[WIP] Slim Worker Runner

The purpose of this is to slim down the memory requirements and boot time of loading single workers by loading only the necessary gems/files/config per worker.  This will make containerizing workers easier, and allow for less memory overhead for MIQ to be run, even in an appliance setting.
Without this patch
$ time ruby lib/workers/bin/run_single_worker.rb -d ManageIQ::Providers::Openshift::ContainerManager::MetricsCollectorWorker
** Using session_store: ActionDispatch::Session::MemCacheStore

real    0m6.192s
user    0m4.925s
sys     0m1.239s

With this patch
$ time ruby lib/workers/bin/run_single_worker.rb -d ManageIQ::Providers::Openshift::ContainerManager::MetricsCollectorWorker

real    0m3.790s
user    0m3.006s
sys     0m0.774s

Links

https://www.pivotaltracker.com/story/show/145243925
Dependent on the following:

https://github.com/ManageIQ/manageiq/pull/14953 - Modularize patches/database_configuration.rb
https://github.com/ManageIQ/manageiq/pull/15020 - Adds MiqHelper
https://github.com/ManageIQ/manageiq/pull/15132 - Add lib/workers/bin/run_single_worker.rb script
https://github.com/ManageIQ/manageiq/pull/15376 - Allow lib/vmdb/logging.rb to be required without needing Rails autoloading
https://github.com/ManageIQ/manageiq/pull/15336 - Add ManageIQ::ActiveRecordConnector for Rails-less ActiveRecord::Base connections
https://github.com/ManageIQ/manageiq/pull/15414 - Make Vmdb::Settings::Walker a independent module
https://github.com/ManageIQ/manageiq/pull/15460 - De-couple DescendantLoader from Rails
https://github.com/ManageIQ/manageiq/pull/15461 - Load Vmdb::Plugins via bundler

TODO

[x] Merge https://github.com/ManageIQ/manageiq/pull/14953
[x] Merge https://github.com/ManageIQ/manageiq/pull/15020
[x] Merge https://github.com/ManageIQ/manageiq/pull/15132
[x] Merge https://github.com/ManageIQ/manageiq/pull/15376
[ ] Merge https://github.com/ManageIQ/manageiq/pull/15336
[x] Merge https://github.com/ManageIQ/manageiq/pull/15414
[ ] Merge https://github.com/ManageIQ/manageiq/pull/15460
[ ] Merge https://github.com/ManageIQ/manageiq/pull/15461
[ ] Merge PR to Make Vmdb::Settings "Rails-less" (TBD, depending on #15460 and #15461)
[ ] #rebaseAllTheThings™

I have a updated version of this branch here:  https://github.com/ManageIQ/manageiq/compare/master...NickLaMuro:slim_single_worker_working
Left this current one intact for comparison for the time being.  Will probably eventually update the above branch with above.

@jrafanie @Fryguy I figure this would interest you the most, but this is what I have come up with for the Autoloading version of this PR:
https://github.com/ManageIQ/manageiq/compare/master...NickLaMuro:slim_single_worker_v2
Things of note between what I have in the working branch and this one:

I have created a Workers::Autoloader class that can be used to configure the autoload_paths in the scripts.  Now used in boot_base (compared to the previous iteration as well.
Created a lib/workers/boot/database_connect.rb (though, probably should be called something like base_initialize.rb or something), that configures logging, config, settings, plugins, and connects ActiveRecord to the DB.
A very small file for openshift/container_manager/metrics_collector_worker.rb file, when compared to the previous iteration.  This makes use of the database_connector script, and the Worker::Autoloader to handle setting up most of the dependencies.

To make some further changes, we could extract out the bundler groups stuff from config/application and make use of that here to remove some of the requires that were needed.  But with this, things do seem to be pretty lightweight:
$ bundle exec miqperf profile -mta "-d ManageIQ::Providers::Openshift::ContainerManager::MetricsCollectorWorker" lib/workers/bin/run_single_worker.rb

TOTAL_MEMORY_USED: 82.58203125MiB

Timings
-------
real    0m2.762s
user    0m2.240s
sys     0m0.510s
cuser   0m0.000s
csys    0m0.000s

Will need to compare to the other working branch and master to see how this compares memory wise.

Some results from other branches:
master
$ bundle exec miqperf profile -mta "-d ManageIQ::Providers::Openshift::ContainerManager::MetricsCollectorWorker" lib/workers/bin/run_single_worker.rb
** Using session_store: ActionDispatch::Session::MemCacheStore

TOTAL_MEMORY_USED: 163.546875MiB

Timings
-------
real    0m6.622s
user    0m5.390s
sys     0m1.200s
cuser   0m0.000s
csys    0m0.000s

Without Workers::Autoloader
$ bundle exec miqperf profile -mta "-d ManageIQ::Providers::Openshift::ContainerManager::MetricsCollectorWorker" lib/workers/bin/run_single_worker.rb

TOTAL_MEMORY_USED: 95.0625MiB

Timings
-------
real    0m3.257s
user    0m2.550s
sys     0m0.700s
cuser   0m0.000s
csys    0m0.000s

So looks like the Workers::Autoloader implementation is faster, uses less memory, is less code to write per worker, and less code require to change for each worker as well.

@Fryguy @jrafanie Thoughts on the above two comments?
https://github.com/ManageIQ/manageiq/pull/15174#issuecomment-315468186
https://github.com/ManageIQ/manageiq/pull/15174#issuecomment-315470546


Do not download non-local binaries

Today, we download all the declared binaries in our lockfile. This can be slow/expensive.
After this PR, we skip downloading any binary that doesn't match the local machine's OS or CPU. We're not users of remote execution, and it's not clear if/how this affects remote execution. If it negatively affects RBE, we can always drop this functionality behind a flag on our repository rules.

The way Bazel is meant for this to work (and works with remote execution as well) is via toolchain resolution.
See https://github.com/aspect-build/rules_py/blob/main/py/private/toolchain/repo.bzl as an example: the "hub" repo just registers a bunch of toolchain() calls. the toolchain attribute points to a platform-specific repo where the tool is downloaded. This way bazel only fetches the ones for the toolchains it selected.

Still not sure I follow how to defer downloads in a repository rule — it seems like even if I create a repository for each of the platforms for each of the tools that I’m going to end up needing a download call in that rule, which ends up largely the same?


Return maximum item size in stats command

Since the maximum item size is configurable, it would be quite useful if the maximum item size could be included in the output of the stats command.
This could be pretty useful to allow client libraries to fail fast on entries that will not fit that limit, instead of having to submit them and then handle the server failure afterwards.

This exists under stats settings as "item_size_max"


bug: griffe.loader  is not found

had this error
  File "/opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/quartodoc/autosummary.py", line 9, in <module>
    from griffe.loader import GriffeLoader
ModuleNotFoundError: No module named 'griffe.loader'

did some research:
griffe just released version 1.0.0, which removed all modules under griffe package: https://github.com/mkdocstrings/griffe/releases/tag/1.0.0

Shoot -- thanks for flagging. I have time this week to take up some quartodoc work, and this is a big priority

Thank you so much.

v0.7.6 should now support griffe v1+. definitely let me know if you run into any issues! (here is the PR: https://github.com/machow/quartodoc/pull/359)


improvement of follow function

File: Instagram.js
Method: Follow()
Change headers in fetch from built-in to this.getHeaders().
Line 244:
'headers': headers
change to
'headers': this.getHeaders()//headers
This change help me to repair this method. It's work fine now.

Hello, thank you. You are can to make pull request.

I was trying but i had a problem with it , sorry. Finally, I wrote it on issues, because i had a problem with it

What is problems you have, when trying to create pull request ? I can help you :)

I think i do this, sorry for problem. Can u look if everything is good ?

Yeap

Resolved.


Remove extraneous files left in the file system

Don't merge, will re-open pull request with just the one file removed


Updated: intellij 192.6817.14

Newer version of intellij (192.7142.36) is now available in master. f50a661e90fa3ed371ac480f3236464e381ed1cc


Dynamic Config (storagePath)

Hi,
How Can I add dynamic Storage Path : config.storagePath
 var projectid = Router.current().params._id; (I am using Iron Router)
storagePath: '/path/to/uploads/'+projectid,
Could you Please Suggest something.
Thanks and Best Regards,
Manu

Hi @manusharma1 ,
Unfortunately it is not possible right now.
If you can explain main purpose for it, then maybe I can help you to find a right way.

Hi @dr-dimitru ,
I want to create a new folder with respect to the router path _id and store the corresponding file to that folder
I mean based on the router _id which is project _id I want to upload documents on the specific folder related to project ID and want every document associated to their corresponding project.
I would be grateful if you can give me some hint or solution to tackle this issue.
Thanks and Best Regards,
Manu

IDK why but this is common question. But I didn't found the previous one, so I think you have 2 options:

Every time create a new collection (what is usually not Okay)
Use meta property for association, see insert method

P.S.: I hope I got your point

Hi @dr-dimitru ,
I agree that we can use meta to insert some values in the the Document in collection, but I wanted to create one directory on the disk and put the project files there so that these would be properly segregated according to the project id. Your Package is wonderful, but If I could create directory it would be perfect solution for me.
Thanks and Best Regards,
Manu

Is there any way to Generate Configuration Dynamically?, Any Other Way, As I said that your Package is wonderfully but only lacks creatiung the folders dynamically if we want to specify folder per file and upload file to that folder, BTW I tested that if I use some var like below:
var projectid = 'test';
storagePath: '/meteor/tops/tops_uploads/'+projectid,

Its creating a test directory but I want to have this variable dynamic value, Can you Suggest me something, Believe me that definitely this feature could be required by many other people and it will make your Package great.
Thanks and Regards,
Manu

@manusharma1 thank you, good suggestion. I'll think about how to implement this feature, probably I'll allow to set it as function which should return path as a String.

Thanks @dr-dimitru  for the Update, I will wait for this, I hope you will able to resolve this soon, Thank You So Much

Hi @dr-dimitru ,
Any Update on the feature, How much time you think it will take to get implemented, I mean when you will release this, any Timelines?
Thanks and Best Regards,
Manu

Still working... PR is welcome.
Next release date will be during next week.

Implemented in dev branch, see 16c6c19d40c307275a17274ca67693c50ea9c7ab
Please, test it on your end. I'm still confused about this feature, as storagePath is server only (and should be hidden from prying eyes, with security in mind). IDK how you will pass projectid.
Waiting for your responce.

@manusharma1

Have you tested it?
Does it work for you?

Hi @dr-dimitru ,
I have tried it but I am getting some error related to Meteor Accounts after using the dev branch, I will do some more tests and see if it works. I will update you soon.
Thanks and Best Regards,
Manu

@manusharma1 waiting roof update from your end. BTW what error are you getting?

Hi @manusharma1 , I'm about to release v1.6.0, have you tested storagePath() on your end?

Hi @dr-dimitru
Sorry for delay, I was busy with some work.
I am getting the following error:
=> Started proxy.
ostrio:files: updating npm dependencies -- fs-extra, request, throttle,
file-type...
=> Errors prevented startup:
While building package ostrio:files:
error: couldn't install npm packages from npm-shrinkwrap: Command
failed: npm ERR! git submodule -q update --init --recursive: fatal:
'submodule' appears to be a git command, but we were not
npm ERR! git submodule -q update --init --recursive: able to execute
it. Maybe git-submodule is broken?
npm ERR! git submodule -q update --init --recursive:
npm ERR! Windows_NT 6.1.7600
npm ERR! argv "C:\Users\Manu
2\AppData\Local\.meteor\packages\meteor-tool\1.3.4_1\mt-os.windows.x86
_32\dev_bundle\bin\\node.exe"
"C:\Users\Manu
2\AppData\Local\.meteor\packages\meteor-tool\1.3.4_1\mt-os.windows.x86
_32\dev_bundle\lib\node_modules\npm\bin\npm-cli.js"
"install"
npm ERR! node v0.10.45
npm ERR! npm  v3.9.6
npm ERR! code 128
npm ERR! Command failed: fatal: 'submodule' appears to be a git
command, but we were not
npm ERR! able to execute it. Maybe git-submodule is broken?
npm ERR!
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     https://github.com/npm/npm/issues
npm ERR! git submodule -q update --init --recursive: fatal: 'submodule'
appears to be a git command, but we were not
npm ERR! git submodule -q update --init --recursive: able to execute
it. Maybe git-submodule is broken?
npm ERR! git submodule -q update --init --recursive:
npm ERR! Windows_NT 6.1.7600
npm ERR! argv "C:\Users\Manu
2\AppData\Local\.meteor\packages\meteor-tool\1.3.4_1\mt-os.windows.x86
_32\dev_bundle\bin\\node.exe"
"C:\Users\Manu
2\AppData\Local\.meteor\packages\meteor-tool\1.3.4_1\mt-os.windows.x86
_32\dev_bundle\lib\node_modules\npm\bin\npm-cli.js"
"install"
npm ERR! node v0.10.45
npm ERR! npm  v3.9.6
npm ERR! code 128
npm ERR! Command failed: fatal: 'submodule' appears to be a git
command, but we were not
npm ERR! able to execute it. Maybe git-submodule is broken?
npm ERR!
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     https://github.com/npm/npm/issues
=> Your application has errors. Waiting for file change.
Thanks and Best Regards,
Manu

I also tried this on the older version of meteor and there Its started, but I am getting the following error in console and app is not loading in browser:
TypeError: Accounts.onLogout is not a function
file : ostrio_files.js
    Accounts.onLogout(function() {                                                                                // 488

Thanks and Best Regards,
Manu

Hi @manusharma1 ,

First Error seems to be unrelated to MF package, (I guess it's related to Meteor bug)
Do you have accounts-base installed? (It's not required, but if you have it installed MF sets onLogout hook)

Hi @dr-dimitru , I have tried it again after installing the accounts-base and with your latest dev code, I am getting the following error:
	=> Errors prevented startup:

	   While selecting package versions:
	   error: Conflict: Constraint<EMAIL_ADDRESS>is not satisfied by webapp
	   1.2.3.
	   Constraints on package "webapp":
	   *<EMAIL_ADDRESS><- top level
	   *<EMAIL_ADDRESS><- meteor-base 1.0.1
	   *<EMAIL_ADDRESS><- routepolicy 1.0.6 <- ddp-server 1.2.2 <- ddp 1.2.2 <-
	   accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- routepolicy 1.0.6 <- webapp 1.2.3 <- iron:router
	   1.0.12
	   *<EMAIL_ADDRESS><- ddp-server 1.2.2 <- ddp 1.2.2 <- accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- autoupdate 1.2.4 <- hot-code-push 1.0.0 <-
	   meteor-base 1.0.1
	   *<EMAIL_ADDRESS><- mongo 1.1.3
	   *<EMAIL_ADDRESS><- iron:router 1.0.12
	   *<EMAIL_ADDRESS><- ostrio:files 1.6.0
	   *<EMAIL_ADDRESS><- ostrio:cookies 2.0.4 <- ostrio:files 1.6.0

	   Conflict: Constraint<EMAIL_ADDRESS>is not satisfied by underscore
	   1.0.4.

	   Constraints on package "check":
	   *<EMAIL_ADDRESS><- top level
	   *<EMAIL_ADDRESS><- blaze 2.1.3 <- accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- babel-compiler 5.8.24_1 <- ecmascript 0.1.6
	   *<EMAIL_ADDRESS><- ddp-client 1.2.1 <- ddp 1.2.2 <- accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- ddp-common 1.2.2 <- ddp-client 1.2.1 <- ddp 1.2.2 <-
	   accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- ddp-server 1.2.2 <- ddp 1.2.2 <- accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- autoupdate 1.2.4 <- hot-code-push 1.0.0 <- meteor-base
	   1.0.1
	   *<EMAIL_ADDRESS><- mongo 1.1.3
	   *<EMAIL_ADDRESS><- accounts-password 1.1.4
	   *<EMAIL_ADDRESS><- accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- srp 1.0.4 <- accounts-password 1.1.4
	   *<EMAIL_ADDRESS><- ostrio:files 1.6.0

	   Conflict: Constraint<EMAIL_ADDRESS>is not satisfied by random 1.0.5.

	   Constraints on package "coffeescript":
	   *<EMAIL_ADDRESS><- top level
	   *<EMAIL_ADDRESS><- ostrio:iron-router-title 1.0.2
	   *<EMAIL_ADDRESS><- ostrio:iron-router-helper-class 1.0.0 <-
	   ostrio:iron-router-title 1.0.2
	   *<EMAIL_ADDRESS><- ostrio:files 1.6.0
	   *<EMAIL_ADDRESS><- ostrio:cookies 2.0.4 <- ostrio:files 1.6.0

	   Conflict: Constraint<EMAIL_ADDRESS>is not satisfied by templating
	   1.1.5.
	   Constraints on package "templating":
	   *<EMAIL_ADDRESS><- top level
	   *<EMAIL_ADDRESS><- launch-screen 1.0.4 <- mobile-experience 1.0.1
	   *<EMAIL_ADDRESS><- blaze-html-templates 1.0.1
	   *<EMAIL_ADDRESS><- iron:router 1.0.12
	   *<EMAIL_ADDRESS><- iron:layout 1.0.12 <- iron:controller 1.0.12 <-
	   iron:router 1.0.12
	   *<EMAIL_ADDRESS><- iron:layout 1.0.12 <- iron:router 1.0.12
	   *<EMAIL_ADDRESS><- iron:dynamic-template 1.0.12 <- iron:controller
	   1.0.12 <- iron:router 1.0.12
	   *<EMAIL_ADDRESS><- iron:controller 1.0.12 <- iron:router 1.0.12
	   *<EMAIL_ADDRESS>|| 1.0.9 <- sacha:spin 2.3.1
	   *<EMAIL_ADDRESS><- ephemer:reactive-datatables 1.1.0
	   *<EMAIL_ADDRESS><- ostrio:files 1.6.0
	   *<EMAIL_ADDRESS><- ostrio:templatehelpers 1.1.2

	   Conflict: Constraint<EMAIL_ADDRESS>is not satisfied by
	   reactive-var 1.0.6.
	   Constraints on package "reactive-var":
	   *<EMAIL_ADDRESS><- top level
	   *<EMAIL_ADDRESS><- blaze 2.1.3 <- accounts-base 1.2.2
	   *<EMAIL_ADDRESS><- iron:dynamic-template 1.0.12 <- iron:controller
	   1.0.12 <- iron:router 1.0.12
	   *<EMAIL_ADDRESS><- ostrio:iron-router-title 1.0.2
	   *<EMAIL_ADDRESS><- ostrio:files 1.6.0

	   Conflict: Constraint<EMAIL_ADDRESS>is not satisfied by tracker 1.0.9.

	   Constraints on package "http":
	   *<EMAIL_ADDRESS><- top level
	   *<EMAIL_ADDRESS><- autoupdate 1.2.4 <- hot-code-push 1.0.0 <- meteor-base
	   1.0.1
	   *<EMAIL_ADDRESS><- ostrio:files 1.6.0
	   *<EMAIL_ADDRESS><- ostrio:cookies 2.0.4 <- ostrio:files 1.6.0

	=> Your application has errors. Waiting for file change.

Thanks and Best Regards,
Manu

@manusharma1 ,
Make sure Meteor version is equal or higher to <IP_ADDRESS>


[Task]: Fix change password with mismatch passwords leads to app reload

@jeeanribeiro the same happens when you change pin

@jeeanribeiro the same happens when you change pin

I've added the fix to the PR


Updating to work with React 0.14.0-rc1

Updated peerDependencies
Updated render method to not mutate props
Removed bit about babel polyfill

This should fix https://github.com/andreypopp/react-textarea-autosize/issues/47 and https://github.com/andreypopp/react-textarea-autosize/issues/53

I've forked this as well and am tracking built lib so that can install directly from github repo. Also working in 0.14-rc1
"dependencies": {
"tomatau/react-textarea-autosize#react-0.14",

Closing in favor of #44 which was submitted first and appears to be more targeted towards a single change (updating codebase for react 0.14).

@andreypopp if you don't update the props to make a copy and use that, you get errors about mutating props (which was discouraged in React 0.13):
ERROR: 'Warning: `textarea` was passed a style object that has previously been mutated. Mutating `style` is deprecated. Consider cloning it beforehand. Check the `render` of `TextareaAutosize`. Previous style: {"height":null}. Mutated style: {"height":null}.'

@nickpresta that's interesting... at kind 72 code already clones props object.


Update gke dm docs

Update DM istio docs and clearly show the IAM permissions required.
ref:

Issue https://github.com/istio/istio.github.io/issues/900
Issue https://github.com/istio/istio.github.io/issues/939

/cc @geeknoid Now that 0.5.1 is live we should prioritize these docs.

What do you mean by "prioritize these docs"?

the circle erro is #997 / unrelated so I'll merge this


Add dns search domain

Add DNS search domain(s)

@JrCs sorry this slipped through the cracks. Could you rebase this onto master once more?

Rebase done.

Thanks!


How to avoid errors on rapid queries?

I'm setting up some integration tests, and coming across the "Error: Transaction has been aborted. Please retry" error. There's a function that resets the data I am mutating before and after each test. It works about 80% of the time, but otherwise is throwing the error.
If I put a short async 'sleep' delay in the beforeEach/afterEach functions, it works as expected. But, this doesn't leave me confident that my code can handle requests which might fail because they are submitted in rapid succession. Simply retrying the query once more doesn't feel good either.
Am I missing something?
Here's a simplified version of the test.
// @flow
/* eslint-disable no-undef */
import { request } from '../../../__tests__/utils'
import { sampleUser } from '../../../database/stubs/users'
import { updateUser, getUser } from '../UserModel'

const sleep = (ms) => new Promise((r) => setTimeout(r, ms))
const resetUserData = async () => {
	await updateUser(sampleUser.uid, { input: sampleUser })
}

describe('[updateViewerProfile]', () => {
	beforeAll(async () => {
		await resetUserData()
		// await sleep(100) // <-- uncommenting these two gets it working
	})
	afterAll(async () => {
		// await sleep(100) // <--
		await resetUserData()
	})

	it('should update existing data', async () => {
		const newBioLine = 'Test bio line'

		// Note: this is an actual GraphQL mutation that goes through my resolvers.
		// This is not querying dgraph directly.
		const mutation = /* GraphQL */ `
		mutation updateProfile($bioLine: String) {
			updateViewerProfile(input: {bioLine: $bioLine }) {
				username
				bioLine
			}
		}
		`
		const variables = {
			bioLine: newBioLine,
		}
		const context = { viewer: joseph }
		const result = await request(mutation, { variables, context })
		expect(result.data.updateViewerProfile.bioLine).toBe(newBioLine)
	})
})

An aborted error is returned if other transactions concurrently modify the same data that was
modified in this transaction. It is up to the user to retry transactions when they fail. This is more of a dgraph issue rather than the client's. You can create a new issue in the main dgraph repo.
Similar issues in dgraph:

https://github.com/dgraph-io/dgraph/issues/2018
https://discuss.dgraph.io/t/about-transaction-abort-error-while-persist-edges/2213
https://github.com/dgraph-io/dgraph/issues/2221

Got it, thanks @gpahal
Also, for anyone coming here concerning dgraph-js, I was simply forgetting to await a txn.commit() in one of the functions used (but not shown) above. 🤦🏼♂


🐛 [firebase_auth] Version Solving failed on flutter beta channel

Bug report
flutter pub getproduces this error:
because firebase_auth >=0.18.4+1 depends on firebase_auth_web ^0.3.2+3 which depends on intl ^0.16.1, firebase_auth >=0.18.4+1 requires intl ^0.16.1.

And because every version of flutter_localizations from sdk depends on intl 0.17.0-nullsafety.2, firebase_auth >=0.18.4+1 is incompatible with flutter_localizations from sdk.

Steps to reproduce
dependencies:
firebase_auth: ^0.18.4+1
flutter_localizations:
    sdk: flutter
intl_translation: any
intl: any

Flutter doctor
Run flutter doctor and paste the output below:
Click To Expand
[✓] Flutter (Channel beta, 1.25.0-8.1.pre, on macOS 11.1 20C69 darwin-x64,
    locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 12.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2020.3)
[✓] VS Code (version 1.52.1)
[✓] Connected device (1 available)
• No issues found!

Same here

Related: #4057

Hi @felixwortmann
There is already an open issue for this https://github.com/FirebaseExtended/flutterfire/issues/4342. Please comment there with your logs and the unmentioned information.
Closing this as a duplicate.
Thank you


^2.4.0 when reinstalled pulls 2.7.0 which has breaking api changes

Expected Behavior
the api should remain the same on a minor version increase otherwise change to a major version if the api is different
Current Behavior
with select rows disabled it enables when updated to 2.7.0 and the way i have it coded works perfect on 2.4.0, there are other bugs too like now on some pages i get filter undefined but works fine in 2.4.0
Steps to Reproduce (for bugs)

have 2.4.0 mui-datatables installed
reinstall npm packages it updates to 2.7.0 which is a minor update
the api has breaking changes it should be a major update if the api has breaking changes
I do not know at what version it broke but api changes should of bumped it to 3.0.0 i have to keep a backup copy of 2.4.0 because using ^2.4.0 will update the breaking api changes.

Your Environment

Tech
Version

Material-UI
^3.9.2

MUI-datatables
^2.4.0

React
^16.8.6

browser
google chrome

etc

Hello @phillipDarby. In order to address your issues, I would need specific tickets with steps to reproduce and/or code examples I can run. If you can provide that, I will look into the issues.
New features are allowable in minor version updates, as long as they are backwards compatible, which I do my best to ensure. It's always possible that I made a mistake, which is why I would like to learn more about your issue.
I do think it's worth pointing out though, that in principle, there is no such thing as any version update, even patches, that can guarantee that your code will still work before and after. It is always possible, for example, for code to be written that unknowingly takes advantage of a bug, and will thus break even during a patch.
So, one specific example I know of is that many users have been using false as a value to send in to the selectableRows option. I don't know the full history of this feature, but I think that it was unintentional to allow use of false for an option which is listed in the documentation as an enum. So, at some point, the incorrect option was working because the code either allowed it, or it was allowed incidentally, by accident. This kind of issue should be fixed, as it is not the correct API, and can lead to other bugs and unintended consequences. However, on fixing it, anyone improperly using false as an option will see their code break. But it's important to follow the docs as best as possible.

here is an example of one of the components
`import React, { Component } from "react";
import withAuth from "../../auth/withAuth";
import { withRouter } from "react-router-dom";
import { connect } from "react-redux";
import IconButton from "@material-ui/core/IconButton";
import Button from "@material-ui/core/Button";
import MuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider";
import Visibility from "@material-ui/icons/Visibility";
import Avatar from "@material-ui/core/Avatar";
import Chip from "@material-ui/core/Chip";
import Tooltip from "@material-ui/core/Tooltip";
import { withStyles } from "@material-ui/core/styles";
import Green from "@material-ui/core/colors/green";
import Red from "@material-ui/core/colors/red";
import MUIDataTable from "mui-datatables";
import Warning from "@material-ui/icons/Warning";
import {
getMuiTheme
} from "./HelperFunctions/helpers";
const ContractedChip = withStyles({
root: {
backgroundColor: Green[600],
color: "white",
fontWeight: "700",
margin: 3
}
})(Avatar);
const NonContractedChip = withStyles({
root: {
backgroundColor: Red[600],
color: "white",
fontWeight: "700",
margin: 3
}
})(Avatar);
/**

NOTE: always check is mounted before setting the state
*/
class MyClientsContainer extends Component {
state = {
data: [],
page: 0,
count: 0,
rowsPerPage: 10,
filterList: [[], [], [], [], [], [], [], []],
columns: []
};

_baseStore = "myClientsTab-";
_isMounted = false;
checkFilters = () => {
let bool = false;
this.state.columns.forEach(function(column){
if(column.display === "false"){bool = true;}
});
if (bool) {
  return (
    <Tooltip title="Not All Columns are active">
      <IconButton style={{ color: Red[600] }}>
        <Warning />
      </IconButton>
    </Tooltip>
  );
}

};
componentDidMount() {
this._isMounted = true;
this.setState({
  rowsPerPage: localStorage.getItem(this._baseStore + "NumberRows") !== null
    ? parseInt(localStorage.getItem(this._baseStore + "NumberRows"))
    : 10,

    filterList: localStorage.getItem(this._baseStore + "Filter") !== null
    ? JSON.parse(localStorage.getItem(this._baseStore + "Filter"))
    : [[], [], [], [], [], [], [], [], []],

    columns: localStorage.getItem(this._baseStore + "Columns") !== null
    ? JSON.parse(localStorage.getItem(this._baseStore + "Columns"))
    :[]
});

this.getData();

}
componentWillUnmount() {
this._isMounted = false;
}
/**

TODO: Enable this once api is done for this call...
/
getData = async () => {
let token = localStorage.getItem("token");
await fetch(api/clientLocation/getMyClientsTabData, {
headers: {
Authorization: "Bearer " + token,
"Content-Type": "application/json"
},
method: "post"
})
.then(response => {
if (!response.ok) {
this.props.unauthorized();
throw Error(response.statusText);
}
return response.json();
})
.then(data => {
if (this._isMounted) {
/* HACK: this is only way I can find to download CSV properly need to change to field that may have commas in it */
var dat = data.map(val => {
val[2] = val[2].replace(",", " ");
return val;
});
this.setState({
data: dat,
count: data.length
});
}
})
.then(() => {
var test = this.state.data.filter(rec => {
return rec[1] === this.state.filterList[1];
});
if (this._isMounted && test !== null) {
this.setState({ count: test.length });
}
})
.catch(error => {
console.log(error);
});
};

handleChangeRowsPerPage = event => {
localStorage.setItem(this._baseStore + "NumberRows", event.target.value);
this.setState({ rowsPerPage: event.target.value });
};
handleChangePage = (event, page) => {
this.setState({ page: page });
};
render() {
const { data, page, count, rowsPerPage } = this.state;
const options = {
print: false,
filterType: "multiselect",
selectableRows: false,
filter: true,
responsive: "scroll",
serverSide: false,
download: this.props.users.permissions.auditing,
downloadOptions: { filename: "MyClients.csv", separator: "," },
textLabels: {
pagination: {
next: "Next Page",
previous: "Previous Page",
rowsPerPage: "Clients per page:",
displayRows: "of"
},
body: {
noMatch: "Sorry, you have no clients assigned to you",
toolTip: "Sort"
}
},
count: count,
page: page,
rowsPerPage: rowsPerPage,
  onFilterChange: (changedColumn, list) => {
    localStorage.setItem(this._baseStore + "Filter", JSON.stringify(list));
    this.setState({ filterList: list });
  },
  onColumnViewChange: (changedColumn, action) => {
    let display = action === "remove" ? "false" : "true";
    let tColumns = this.state.columns;
    tColumns.map((column) => {
      if(changedColumn === column.name){
        column.display = display;
      }
    });
    this.setState({columns: tColumns});
    localStorage.setItem(this._baseStore + "Columns", JSON.stringify(tColumns));

  },

  onColumnSortChange: (changedColumn, direction) => {
    let dir = direction === "ascending" ? "asc" : "desc";
    let tColumns = this.state.columns;
    tColumns.map((column) => {
      column.sortDirection = changedColumn === column.name ? dir : null;
    });
    this.setState({columns: tColumns});
    localStorage.setItem(this._baseStore + "Columns", JSON.stringify(tColumns));

  },
  onTableInit: (action, tableState) => {
    let empty = localStorage.getItem(this._baseStore + "Columns") === null;

    if(empty){
      localStorage.setItem(this._baseStore + "Columns",JSON.stringify(tableState.columns));
    }
  },

  onTableChange: (action, tableState) => {
    if(action === "propsUpdate") {
      for(let i = 0; i < this.state.columns.length; i++){
        tableState.columns[i].sortDirection = this.state.columns[i].sortDirection;
        tableState.columns[i].display = this.state.columns[i].display;
      }
      tableState.filterList = this.state.filterList;
      tableState.rowsPerPage = this.state.rowsPerPage;
      tableState.count = tableState.displayData.length
    }

    if(action === "filterChange")
    {
      tableState.count = tableState.displayData.length
    }
  },

  onChangePage: currentPage => {
    this.setState({ page: currentPage });
  },

  onChangeRowsPerPage: numberOfRows => {
    localStorage.setItem(this._baseStore + "NumberRows", numberOfRows);
    this.setState({ rowsPerPage: numberOfRows });
  },

  customToolbar: tableMeta => {
    return <React.Fragment>{this.checkFilters()}</React.Fragment>;
  }
};
const columns = [
  {
    name: "Action",
    options: {
      filter: false,
      download: false,
      customBodyRender: (value, tableMeta, updateValue) => {
        return (
          //<Tooltip title="View">

          <Button
            size="small"
            onClick={() =>
              this.props.history.push(`/clients/location/${value}`)
            }
          >
            <Visibility color="primary" aria-label="View" />
          </Button>

          //</Tooltip>
        );
      }
    }
  },
  {
    name: "Contracted",
    options: {
      customFilterListRender: v => `Contracted: ${v}`,
      sort: true,
      customBodyRender: (value, tableMeta, updateValue) => {
        if (value === "Contracted") {
          return (
            <Chip
              variant="outlined"
              avatar={<ContractedChip sizes="sm">C</ContractedChip>}
            />
          );
        }
        if (value === "Non-Contracted") {
          return (
            <Chip
              variant="outlined"
              avatar={<NonContractedChip sizes="sm">NC</NonContractedChip>}
            />
          );
        }
      }
    }
  },
  {
    name: "Name",
    options: {
      filter: false
    }
  },
  {
    name: "Street Address",
    options: {
      filter: false
    }
  },
  {
    name: "City",
    options: {
      filter: false
    }
  },
  {
    name: "State",
    options: {
      filter: false
    }
  },
  {
    name: "Zip",
    options: {
      filter: false
    }
  },
  {
    name: "Phone",
    options: {
      filter: false
    }
  }
];
return (
  <MuiThemeProvider theme={getMuiTheme}>
    <MUIDataTable
      title={"My Clients"}
      data={data}
      columns={columns}
      options={options}
    />
  </MuiThemeProvider>
);

}
}
const mapStateToProps = state => {
return {
authenticated: state.users.authenticated,
ui: state.ui,
users: state.users
};
};
export default withRouter(
withAuth(connect(mapStateToProps)(MyClientsContainer))
);`

here is an example code:
const options = {
      print: false,
      filterType: "multiselect",
      selectableRows: false,
      filter: true,
      responsive: "scroll",
      serverSide: false,
      download: this.props.users.permissions.auditing,
      downloadOptions: { filename: "MyClients.csv", separator: "," },
      textLabels: {
        pagination: {
          next: "Next Page",
          previous: "Previous Page",
          rowsPerPage: "Clients per page:",
          displayRows: "of"
        },
        body: {
          noMatch: "Sorry, you have no clients assigned to you",
          toolTip: "Sort"
        }
      },
      count: count,
      page: page,
      rowsPerPage: rowsPerPage,

      onFilterChange: (changedColumn, list) => {
        localStorage.setItem(this._baseStore + "Filter", JSON.stringify(list));
        this.setState({ filterList: list });
      },
      onColumnViewChange: (changedColumn, action) => {
        let display = action === "remove" ? "false" : "true";
        let tColumns = this.state.columns;
        tColumns.map((column) => {
          if(changedColumn === column.name){
            column.display = display;
          }
        });
        this.setState({columns: tColumns});
        localStorage.setItem(this._baseStore + "Columns", JSON.stringify(tColumns));

      },

      onColumnSortChange: (changedColumn, direction) => {
        let dir = direction === "ascending" ? "asc" : "desc";
        let tColumns = this.state.columns;
        tColumns.map((column) => {
          column.sortDirection = changedColumn === column.name ? dir : null;
        });
        this.setState({columns: tColumns});
        localStorage.setItem(this._baseStore + "Columns", JSON.stringify(tColumns));

      },
      onTableInit: (action, tableState) => {
        let empty = localStorage.getItem(this._baseStore + "Columns") === null;

        if(empty){
          localStorage.setItem(this._baseStore + "Columns",JSON.stringify(tableState.columns));
        }
      },

      onTableChange: (action, tableState) => {
        if(action === "propsUpdate") {
          for(let i = 0; i < this.state.columns.length; i++){
            tableState.columns[i].sortDirection = this.state.columns[i].sortDirection;
            tableState.columns[i].display = this.state.columns[i].display;
          }
          tableState.filterList = this.state.filterList;
          tableState.rowsPerPage = this.state.rowsPerPage;
          tableState.count = tableState.displayData.length
        }

        if(action === "filterChange")
        {
          tableState.count = tableState.displayData.length
        }
      },

      onChangePage: currentPage => {
        this.setState({ page: currentPage });
      },

      onChangeRowsPerPage: numberOfRows => {
        localStorage.setItem(this._baseStore + "NumberRows", numberOfRows);
        this.setState({ rowsPerPage: numberOfRows });
      },

      customToolbar: tableMeta => {
        return <React.Fragment>{this.checkFilters()}</React.Fragment>;
      }
    };

so selectable rows should be 'none' instead of false

Yes, that is correct regarding selectableRows ('none' is correct). Does it fix your issue if you make that adjustment?
Perhaps I should have been more clear in the release notes that I was plugging that particular hole. Or, since I knew people were using it, perhaps it would have been even better to add console warnings/errors for the incorrect option. I will consider adding that to help people if this issue comes up again.

yes that fixes that issue the other one about filter being undefined i suspect has to do with this area
 componentDidMount() {
    this._isMounted = true;

    this.setState({
      rowsPerPage: localStorage.getItem(this._baseStore + "NumberRows") !== null
        ? parseInt(localStorage.getItem(this._baseStore + "NumberRows"))
        : 10,

        filterList: localStorage.getItem(this._baseStore + "Filter") !== null
        ? JSON.parse(localStorage.getItem(this._baseStore + "Filter"))
        : [[], [], [], [], [], [], [], [], []],

        columns: localStorage.getItem(this._baseStore + "Columns") !== null
        ? JSON.parse(localStorage.getItem(this._baseStore + "Columns"))
        :[]
    });

    this.getData();

  }

or this area
{
        name: "Contracted",
        options: {
          customFilterListRender: v => `Contracted: ${v}`,
          sort: true,
          customBodyRender: (value, tableMeta, updateValue) => {
            if (value === "Contracted") {
              return (
                <Chip
                  variant="outlined"
                  avatar={<ContractedChip sizes="sm">C</ContractedChip>}
                />
              );
            }
            if (value === "Non-Contracted") {
              return (
                <Chip
                  variant="outlined"
                  avatar={<NonContractedChip sizes="sm">NC</NonContractedChip>}
                />
              );
            }
          }
        }
      },

or this area on my fetch
.then(response => {
        if (!response.ok) {
          this.props.unauthorized();
          throw Error(response.statusText);
        }
        return response.json();
      })
      .then(data => {
        if (this._isMounted) {
          /** HACK: this is only way I can find to download CSV properly need to change to field that may have commas in it */
          var dat = data.map(val => {
            val[2] = val[2].replace(",", " ");
            return val;
          });
          this.setState({
            data: dat,
            count: data.length
          });
        }
      })
      .then(() => {
        var test = this.state.data.filter(rec => {
          return rec[1] === this.state.filterList[1];
        });

        if (this._isMounted && test !== null) {
          this.setState({ count: test.length });
        }
      })
      .catch(error => {
        console.log(error);
      });


Add an additional level called 'dev'

We had discussed the need for this in many AQAvit meetings, but adding an additional level called dev will allow us to onboard new tests, while being explicit that they should be considered non-blocking for AQAvit verification, and are there for development purposes (either for flaky tests, newly added tests, or development work).
This implies that our Test Grid will now have a new row, the levels would be:
sanity - fast running tests that test areas of code that change often
extended - longer running tests that do not need to run as frequently, and/or run in multiple modes
special - typically tests that require special setup/config or hardware
dev - new tests, flaky tests, those present and helpful for development, but not yet hardened to be part of AQAvit verification

We will need to update TKG, TRSS, and the upstream pipeline for this:
TKG - enable dev level
TRSS - add a dev row in Grid view
Upstream pipeline - trigger corresponding dev test builds
We may also add a default test target for dev level for the initial stage.


Fix update of side nav given changes to counts and schemas

Summary
Fixes #6719
Occurred changes and/or fixed issues

BUG

there is no getter for managementReady so it was always undefined
this means both computed properties for counts and schemas always returned an empty object/array
when the getter returns the empty objects/arrays the watchers ALWAYS fired which then updated the side nav
HOWEVER - it seems vue fails to trigger changes to computed properties which contains getters that were never hit (aka we never called the getters to fetch counts/schemas... so changes to them didn't trigger updates to the computed property).

FIX

Ensure we get the correct managementReady... so the computed properties both return the correct count/schema and trigger when that value changes
HOWEVER - this means we'll trigger the side nav update more. So guard against some of the simpler issues (watches fire even if old === new, so gate on that... both count/schema shouldn't change much given web-worker.steve-sub-worker.js)

Areas or cases that should be tested

Counts of resources shown in the side nav should automatically update given

creating/deleting resources within that browser
creating/deleting resource in another browser

Same as above, but for schemas (for instance installing/uninstalling the CIS Benchmark app should show/remove the CIS Benchmark side nav menu item

Approved by Neil on a call, merging.


feat: allow reading of JSON objects in the configuration

This PR allows HyprPanel to read conventional JSON objects from the configuration file, while keeping the dot-notation as used currently. This means it should not break existing workflows. The behaviour with writing to the configuration file is not changed.
Should also fix #433, as I was running into the same issue.

Hey there, I had to put reviewing this PR on hold as the project was migrating to Astal. I'll get this reviewed soon, thanks for contributing. :heart:


Added issue and PR templates

:information_source: PR template is on this format

1 Closes/fixes/resolves issue(s)?
Closes #408
2 What was added/changed/fixed?

Added issue and PR templates

3 Related issue(s)? [Optional]
4 Others [Optional]
5 Checklist (after created PR)

[x] Added revievers
[x] Added assinee(s)
[x] Added label(s)
[x] Added to project
[x] Added to milestone

Updated with new structure and templates. See this test-repo to check how it feels: https://github.com/claesgill/github_templates


feat: Add support for SQLAlchemy 1.4

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:

[x] Make sure to open an issue as a bug/issue before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
[x] Ensure the tests and linter pass
[x] Code coverage does not decrease (if any source code was changed)
[x] Appropriate docs were updated (if necessary)

Fixes #83 🦕

@plamut thanks for the review!


AOT branch

Hi, I have try your branch of AOT and try to compile it in my local. But there is some problem with the ng compiler, could you please help me?
Here are error log:
Run npm start give this error:
TypeError: this.compiler.compileModules is not a function
    at CodeGenerator.codegen (C:\Users\iminar\Dev\angular\modules\@angular\compi                                                                                ler-cli\src\codegen.ts:71:26)
    at AotPlugin._make (C:\@Projects\@various\ng2-admin-aot\node_modules\@ngtool                                                                                s\webpack\src\plugin.js:186:43)
    at Compiler.<anonymous> (C:\@Projects\@various\ng2-admin-aot\node_modules\@n                                                                                gtools\webpack\src\plugin.js:151:75)
    at Compiler.applyPluginsParallel (C:\@Projects\@various\ng2-admin-aot\node_m                                                                                odules\tapable\lib\Tapable.js:156:14)
    at Compiler.<anonymous> (C:\@Projects\@various\ng2-admin-aot\node_modules\we                                                                                bpack\lib\Compiler.js:463:8)
    at Compiler.applyPluginsAsync (C:\@Projects\@various\ng2-admin-aot\node_modu                                                                                les\tapable\lib\Tapable.js:73:70)
    at Compiler.compile (C:\@Projects\@various\ng2-admin-aot\node_modules\webpac                                                                                k\lib\Compiler.js:456:7)
    at Watching.<anonymous> (C:\@Projects\@various\ng2-admin-aot\node_modules\we                                                                                bpack\lib\Compiler.js:46:17)
    at next (C:\@Projects\@various\ng2-admin-aot\node_modules\tapable\lib\Tapabl                                                                                e.js:81:11)
    at Compiler.invalidAsyncPlugin (C:\@Projects\@various\ng2-admin-aot\node_mod                                                                                ules\webpack-dev-middleware\middleware.js:119:3)
    at next (C:\@Projects\@various\ng2-admin-aot\node_modules\tapable\lib\Tapabl                                                                                e.js:83:14)
    at Compiler.<anonymous> (C:\@Projects\@various\ng2-admin-aot\node_modules\we                                                                                bpack\lib\CachePlugin.js:31:4)
    at next (C:\@Projects\@various\ng2-admin-aot\node_modules\tapable\lib\Tapabl                                                                                e.js:83:14)
    at Compiler.<anonymous> (C:\@Projects\@various\ng2-admin-aot\node_modules\aw                                                                                esome-typescript-loader\src\index.ts:215:13)
    at Compiler.applyPluginsAsync (C:\@Projects\@various\ng2-admin-aot\node_modu                                                                                les\tapable\lib\Tapable.js:85:13)
    at Watching._go (C:\@Projects\@various\ng2-admin-aot\node_modules\webpack\li                                                                                b\Compiler.js:44:16)
    at Watching.<anonymous> (C:\@Projects\@various\ng2-admin-aot\node_modules\we                                                                                bpack\lib\Compiler.js:36:8)
    at Compiler.readRecords (C:\@Projects\@various\ng2-admin-aot\node_modules\we                                                                                bpack\lib\Compiler.js:367:10)
    at new Watching (C:\@Projects\@various\ng2-admin-aot\node_modules\webpack\li                                                                                b\Compiler.js:33:16)
    at Compiler.watch (C:\@Projects\@various\ng2-admin-aot\node_modules\webpack\                                                                                lib\Compiler.js:204:17)
    at module.exports (C:\@Projects\@various\ng2-admin-aot\node_modules\webpack-                                                                                dev-middleware\middleware.js:146:27)
    at new Server (C:\@Projects\@various\ng2-admin-aot\node_modules\webpack-dev-                                                                                server\lib\Server.js:43:20)

Run npm run build:prod then npm run server:prod
It can load the index but have some trouble in:
Uncaught Error: Can't resolve all parameters for BaSlimScroll: (?).
    at CompileMetadataResolver.getDependenciesMetadata (http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:26:30374)
    at CompileMetadataResolver.getTypeMetadata (http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:26:27335)
    at CompileMetadataResolver.getDirectiveMetadata (http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:26:16970)
    at http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:26:19550
    at Array.forEach (native)
    at CompileMetadataResolver.getNgModuleMetadata (http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:26:19175)
    at http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:26:18759
    at Array.forEach (native)
    at CompileMetadataResolver.getNgModuleMetadata (http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:26:17970)
    at RuntimeCompiler._compileComponents (http://localhost:8080/vendor.7339abac83e788a11088.bundle.js:36:27168)

@nampdn ,
I've since updated the branch. I think what you were seeing was this issue. Upgrading the angular version to 2.1.2 seemed to fix it.
I've also got things just about working for AOT compilation. I've commented out just about everything in the branch except for the dashboard page. When running with npm start, the project will run in standard JIT mode.
To run in AOT, use npm run build:prod. This will compile the project in AOT mode and put the output in the dist folder. You can serve them locally with the command node node_modules/.bin/http-server dist/.
Right now the last major error is that there seems to be a different context being fed to webpack between the dev and prod configurations. For dev, things build fine. On prod, I have to change the loadChildren path in pages.routing.ts to be './pages/dashboard/dashboard.module#DashboardModule?sync=true'.

Your work is awesome, I couldn't any branch from akveo to work with AOT compilation except yours. For the last major error, I hope it will be supported soon (in the mean time I will do like what you have to do).

@nampdn ,
I've managed to resolve the last issue. A new version of angular2-router-loader allows the use of non-relative paths which will normalize according to the context the require is called from. I've pushed this change as a commit to the AOT branch.

@debben Thanks you a lots. I'm going to try it now.


Trait: Network Length Distribution (Ldist)

GiA Trait: Network Length Distribution (Ldist)
Units: n/n
Description: The fraction of network pixels found in the lower 2/3 of the network. The lower 2/3 of the network is defined based on the network depth.
Analogous SLEAP Trait: fraction of total lengths
Implementation:
def get_network_length_fraction(points: np.ndarray, fraction: float = 2/3) -> float:
    """Return fraction of root network length that is in the lower fraction of the plant."""

This could be achieved by:

Find the bounding box of all the plant points --> bbox = (left_x, top_y, width, height).
Find the bounding box of the lower fraction:lower_height = bbox[3] * fraction
lower_bbox = (bbox[0], bbox[1] - (bbox[3] - lower_height), bbox[2], lower_height)

Intersect lower_bbox with the points (tip: use shapely)
For every segment, compute length, sum the total --> lower_length
Subtract lower_length from total length

Implemented in #18.


Remove GCE autoscaling metrics from GCM sink

Fix #1487. Remove GCE autoscaling metrics from GCM sink. GCE Autoscaler has not
been supported in Kubernetes for a while. Also remove the metrics
parameter of GCM sink configuration, which was previously used to enable
collection of only GCE autoscaling metrics.

This change is

Bump to verify cla.

@mwielgus

Closing for now as obsolete.


ImportError: cannot import name 'transfer' from 'giftless'

python version: 3.7.3
pip3 version: 18.1
giftless version: 0.2.0
When running from Pypi with
uwsgi -M -T --threads 2 -p 2 --manage-script-name \
    --module giftless.wsgi_entrypoint --callable app --http <IP_ADDRESS>:8080

I get the error ImportError: cannot import name 'transfer' from 'giftless' .
It seems like the folder "transfer" is missing in the pypi module.

Thanks for reporting, I've confirmed this and will work to fix.

This should be resolved in 0.2.1 - please try it.


fix: store safe addresses as checksum

Summary
When calling safe's API to fetch token balances for a particular safe, the checksum check would sometimes fail.
This PR ensures that:

If a user attempts to add a treasury with a mixed-case or non-checksum address, we convert it first.
All calls to gnosis api converts addresses to checksum, in case.

Closes: #
How to test

Go to settings > advanced > add treasury > enter mixed case or lowercase address
See that the submitted safe address is correctly converted to checksum

To-Do

[ ]

Can you fix conflicts please

Can you fix conflicts please

Resolved!
Thank you 🙏


version checking

How does wiredep handle components that depend on different versions of the same package?

The resolution of potential dependency conflicts happens during bower install. wiredep doesn't include itself in that negotiation, it only injects the main files from the components listed in your bower.json file.


WIP

Hi @SeanTAllen,
The changelog - changed label was added to this pull request; all PRs with a changelog label need to have release notes included as part of the PR. If you haven't added release notes already, please do.
Release notes are added by creating a uniquely named file in the .release-notes directory. We suggest you call the file 76.md to match the number of this pull request.
The basic format of the release notes (using markdown) should be:
## Title

End user description of changes, why it's important,
problems it solves etc.

If a breaking change, make sure to include 1 or more
examples what code would look like prior to this change
and how to update it to work after this change.

Thanks.


I can't find configuration parameters for model training

I can't find the main file How it load parameters，Maybe my code level is not very good，Can you help me, please

Sorry for the late reply. We use Hydra so they are in the config files. Here is the general config and specifics for ffhq are here. You can also find them in the model checkpoints under the "args" keyword. I hope this helps, let me know if you still can't find them and I'd be happy to answer. If anything specific is missing let me know.

Closing due to inactivity. Please feel free to reopen if the issue persists.


Help: sample code of connexion download file

Description
Dear All,
I am programing a swagger server base on connexion which will download file. But I cannot find any resource about this topic. Can somebody give me a sample code or any help?
Best regards!

Hi @xiaochaowu
The OpenAPI documentation (Swagger 2, OpenAPI 3) and framework documentation (Flask, aiohttp) should provide all information that is needed.
Closing for now, but feel free to reopen if something connexion specific is holding you back.


Move solution to the root folder

List of changes

Move solution to the root folder

Types of changes
Improvement. I will just git clone, open my IDE, and it opens.

[ ] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change that adds functionality or value)
[ ] Breaking change (fix or feature that would cause existing functionality not to work as expected)
[ ] Test fix (non-breaking change that improves test stability or correctness)

Documentation

[ ] Have you proposed a file change/ PR with Appium to update documentation?

This can be done by navigating to the documentation section on http://appium.io selecting the appropriate command/endpoint and clicking the 'Edit this doc' link to update the C# example
Integration tests

[ ] Have you provided integration tests for your changes? (required for Bugfix, New feature, or Test fix)

Details
Please provide more details about changes if necessary. You can provide code samples showing how they work and possible use cases if there are new features. Also, you can create gists with pasted C# code samples or put them here using markdown.
About markdown please read Mastering markdown and Writing on GitHub

@nvborisenko, please sign the CLA. It's a one time for the appium repo.


[NFC] Omitting default N=4 from SmallVector and to_vector.

It is generated by sed commands, e.g.,
sed 's/SmallVector<\([^,]*\), 4>/SmallVector<\1>/g'
sed 's/to_vector<4>/to_vector/g'

Then run clang-format.

We have mixed style in our codebase, maybe it's good to have a consistent style which keeps it in the short?

I like this change, but sometimes it depends on what the callee/caller want. If the callee/caller in MLIR use SmallVector<..., 4> then this leads to an implicit copy.

I think that's fine for most of cases. Many people just use auto... The compiler could notify the case (like -Wreturn-std-move flag). For IREE codebase, it is okay to pass SmallVector to any upstream function because they should take SmallVectorImp or ArrayRef as input arguments. For using upstream function, I think the compiler would warn out if that is the case.

I like this change, but sometimes it depends on what the callee/caller want. If the callee/caller in MLIR use SmallVector<..., 4> then this leads to an implicit copy.

The default size is 4, isn't that the case? So this change shouldn't change the existing behavior? Not sure if I'm missing something...


add server version and other info to health endpoint

When merged, this PR will:

add ldFlag named LeifDBVersion on main.go which will be used within the /health endpoint as part of the response.
updates the Makefile to include the ldflag argument while making builds.

Closes #48.
cc: @btmorr

@btmorr What other information would you like to include within the response of the health endpoint?

Oh, also--do commit the changes to the "docs" directory. Since the fields on one of the endpoints changed, this modifies the auto-generated swagger schema, which is what's in that directory


[WIP] add danger module and dangerfile

This PR adds in Danger to help with cultural rules.
What is Danger?

Danger runs during your CI process, and gives teams the chance to automate common code review chores.
This provides another logical step in your build, through this Danger can help lint your rote tasks in daily code review.
You can use Danger to codify your teams norms. Leaving humans to think about harder problems.
She does this by leaving messages inside your PRs based on rules that you create with the Ruby scripting language.
Over time, as rules are adhered to, the message is amended to reflect the current state of the code review.

What can danger do?
I borrowed some of the cultural rules from Jest's dangerfile, but I believe there are probably a handful of additional rules (like making sure a PR is tagged with a label) that would be helpful. Danger does not enforce any rules, it just provides a mechanism to communicate information via the PR, as well as data about the PR and the files affected (via git).
Some examples of the types of rules Danger can help with:

Ensure new files follow a naming convention
Ensure new files have @flow turned on
Ensure new JS files have corresponding new test files
Ensure PR messages follow a format or provide certain information
Ensure an individual is assigned to review the PR
Ensure the PR title follows a format
Ensure the changelog is updated
Ensure yarn.lock is updated when package.json is updated

To Do:

[x] Add danger npm
[x] Add dangerfile
[ ] Add DANGER_GITHUB_API_TOKEN env var to CI
[ ] Add npm run danger task to be run on CI

cc/ @orta

The Dangerfile on the  Danger repo gives a few good example rules too: https://github.com/danger/danger-js/blob/master/dangerfile.ts


Correction for raw affiliation INSERM, Univ Rennes, INRAE, Institut NUMECAN (Nutrition Metabolisms and Cancer) UMR_A 1341, UMR_S 1241, F-35000 Rennes, France

Correction needed for raw affiliation INSERM, Univ Rennes, INRAE, Institut NUMECAN (Nutrition Metabolisms and Cancer) UMR_A 1341, UMR_S 1241, F-35000 Rennes, France
raw_affiliation_name: INSERM, Univ Rennes, INRAE, Institut NUMECAN (Nutrition Metabolisms and Cancer) UMR_A 1341, UMR_S 1241, F-35000 Rennes, France
new_rors: 02vjkv261;015m7wh34;003vg9w96;03zb6nw87
previous_rors: 02vjkv261;015m7wh34;003vg9w96
works_examples: W4315780863
contact: 62eae5148613a9acdb908ab4d3436d5d:d698af7e2fea60c203cfbd957335ec8e @ univ-rennes.fr

This issue was accepted and ingested by the OpenAlex team on 2024-10-10. The new affiliations should be visible within the next 7 days.


Twitch is missing from the Platform ID List

I just noticed this. I'm not sure, if that is intentional or not.

Some platforms might be missing from the list. We'll add them eventually.

Please include Twitch game library integration. Their library is even bigger than Epic's. Please help.

Please add this.  I have a ton of games on Twitch.

I'd love to see a Twitch integration as well :)

Hello guys. If someone is working on development of this integration, it should be highly recommended to check the dll extension of Playnite for this Twitch integration: https://github.com/JosefNemec/Playnite/releases
Maybe it has the key to develop it as well in GOG Galaxy 2.0. Thank you all

Id love twitch integration. Please add

On board with wanting Twitch integration, please and thank you! I keep getting free games every month from Twitch Prime, many I don't have anywhere else.

I would also love Twitch integration! There are quite a few solid games in my Twitch library, but it's a pain to see them with the current twitch client.

Well, there actually exists one now. You can find it here:
https://github.com/Mixaill/awesome-gog-galaxy
Note, that it temporarily uses Amazon as its platform ID.

Well, there actually exists one now. You can find it here:
https://github.com/Mixaill/awesome-gog-galaxy
Note, that it temporarily uses Amazon as its platform ID.

That's awesome.  I'll test it out later today.  Thanks for the heads up.

We'll be adding Twitch to list of possible platforms IDs most probably in the next update.

Added in https://github.com/gogcom/galaxy-integrations-python-api/commit/8d6ec500f97e74efd709902cad2447dafc1b7397

Please keep in mind, all platforms added in 8d6ec50 will only be supported by the Galaxy Client with the next update.

oh yes Plz add twitch integration.

Finally supported by the client :)


events.js:183 throw er; // Unhandled 'error' event Error: SQLITE_BUSY: database is locked

Note: for support questions, please join our Discord server

I'm submitting a ...
[x] bug report
[ ] feature request
[ ] question about the decisions made in the repository

Action taken (what you did)
Start a new gekko->choose kraken, currency:USD, asset:BCH, type and strategy does not matter. Press start.

Expected result (what you hoped would happen)
Gekko start working

Actual result (unexpected outcome)
** --> POST /api/startGekko 200 10ms 402b
events.js:183
throw er; // Unhandled 'error' event
^
Error: SQLITE_BUSY: database is locked
RECEIVED ERROR IN GEKKO<PHONE_NUMBER>356823
Child process has died.**

Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc)
Same goes with many other pairs on many different markets
Start a new gekko->choose kraken, currency:EUR, asset:XBT and it is working just fine.
running windows 7 64bit. gekko downloaded today.

Tried reinstall, still not resolved.  I suspect it is disk lag causing the issue in my case.

@daflame76 Have you attempted to adjust the busyTimeout setting as mentioned earlier in this thread? IIRC, someone else set it to 15 seconds and it worked, there definitely seems to be a theme that slower PCs have this issue more than others.
Alternatively setup MongoDB in a docker image if you are running multiple service and need the reliability, these are much more robust solutions for a dedicated setup, IMHO.

https://stackoverflow.com/a/3481134/9495076

Based on everyone's experience with sqlite here it would seem prudent to switch to mongodb long-term.  In the end for reliability I switched to the console runner which seems to be fine.

@daflame76 The UI uses two processes for every gekko, one to fetch and store the market data, the other to read and process. A console runner uses a single process for this entire pipeline, this is why you are not seeing an issue there. However if you tried to run two console runners on the same exchange you would likely see the issue come back.


1500 fix lifecycle@devel

Thank you for your Pull Request! We have developed this task checklist from the Development Process Guide to help with the final steps of the process. Completing the below tasks helps to ensure our reviewers can maximize their time on your code as well as making sure the admiral codebase remains robust and consistent.
Please check off each taskbox as an acknowledgment that you completed the task or check off that it is not relevant to your Pull Request. This checklist is part of the Github Action workflows and the Pull Request will not be merged into the devel branch until you have checked off each task.

[ ] Place Closes #<insert_issue_number> into the beginning of your Pull Request Title (Use Edit button in top-right if you need to update)
[ ] Code is formatted according to the tidyverse style guide. Run styler::style_file() to style R and Rmd files
[ ] Updated relevant unit tests or have written new unit tests - See Unit Test Guide
[ ] If you removed/replaced any function and/or function parameters, did you fully follow the deprecation guidance?
[ ] Update to all relevant roxygen headers and examples
[ ] Run devtools::document() so all .Rd files in the man folder and the NAMESPACE file in the project root are updated appropriately
[ ] Address any updates needed for vignettes and/or templates
[x] Update NEWS.md if the changes pertain to a user-facing function (i.e. it has an @export tag) or documentation aimed at users (rather than developers)
[ ] Build admiral site pkgdown::build_site() and check that all affected examples are displayed correctly and that all new functions occur on the "Reference" page.
[ ] Address or fix all lintr warnings and errors - lintr::lint_package()
[ ] Run R CMD check locally and address all errors and warnings - devtools::check()
[x] Link the issue in the Development Section on the right hand side.
[ ] Address all merge conflicts and resolve appropriately
[ ] Pat yourself on the back for a job well done! Much love to your accomplishment!

Also @bms63 please assign yourself to the issue next time. I actually had someone from the community who wanted to pick this up but then saw your PR.

Hey @thomas-neitmann and @bundfussr.    I'd like to merge this into devel as I think this will cause some issues with our Action that tests the latest package releases, i.e. {lifecycle}.


Run e2e tests in parallel

As we access the same folder for all tests we get interference between tests.
The solution here is to create a test setup and folder for every Project Instance.

[ ] Create the package.json dynamically => needed for serveCommand CLI param which executes a npm srcipt
[ ] Add time stamp to the project folder

Running test in parrallel is still not working:
This MR reverted to sequential e2e test
https://github.com/push-based/user-flow/pull/268

Currently all test including e2e take 2 min in the pipeline. This issue should not be prioritised.


UI issue with navigation

Reproducible for ul.right when top level item is bigger than submenu width.

navigation mixin v2 is used


Automated cherry pick of #2302: Fix MarshalJSON error caused by incorrect conversion function

Cherry pick of #2302 on release-0.13.
#2302: Fix MarshalJSON error caused by incorrect conversion function
For details on the cherry pick process, see the cherry pick requests page.

Codecov Report

Merging #2312 (3f9b033) into release-0.13 (439d091) will decrease coverage by 15.08%.
The diff coverage is 100.00%.

@@                Coverage Diff                @@
##           release-0.13    #2312       +/-   ##
=================================================
- Coverage         55.99%   40.91%   -15.09%
=================================================
  Files               201      116       -85
  Lines             17304    14629     -2675
=================================================
- Hits               9690     5985     -3705
- Misses             6571     8132     +1561
+ Partials           1043      512      -531

Flag
Coverage Δ

kind-e2e-tests
?

unit-tests
40.91% <100.00%> (+0.03%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

 I did manual upgrade test from v0.11.4 and v0.12.3 to v0.13.2-3f9b0335, all succeeded.


X Axis name does not get consolidated

I'd like to have only one "Monat" under the final table and have the others refer to it.
According to some googling this is supposed to happen automatically (?), but it appears not.
The setup is identical to https://github.com/ioam/holoviews/issues/3171
However I've tried to help Holoviews by defining one Dimension:
months = hv.Dimension("month", label="Monat")
and then used that for all X-Axes. to no avail.

Duplicate of https://github.com/ioam/holoviews/issues/2104. You could use a GridSpace or GridMatrix instead of a Layout for the time being, or manually disable the axes using .options(xaxis=None) on the plots you want to disable the axes for.


[Ctrl/Alt]+Shift+Arrowkey doesnt work

Which operating system does the issue occur on?
Linux
If on linux, are you using X11 or Wayland?
AFAIK both
It seems like [Ctrl/Alt]+Shift+Arrowkey doesnt get catched by terminal applications when using alacritty.
See this issue for reference: https://github.com/zyedidia/micro/issues/1335

Would you mind trying bindings suggested here?

Based on some quick testing, it looks like Alacritty does not send the correct escapes when multiple modifiers are held down. We have bindings for shift, alt or control, but not combinations of those.
In theory, this is all the combinations we should support:
                    Code     Modifiers
                  ---------+---------------------------
                     2     | Shift
                     3     | Alt
                     4     | Shift + Alt
                     5     | Control
                     6     | Shift + Control
                     7     | Alt + Control
                     8     | Shift + Alt + Control
                     9     | Meta
                     10    | Meta + Shift
                     11    | Meta + Alt
                     12    | Meta + Alt + Shift
                     13    | Meta + Ctrl
                     14    | Meta + Ctrl + Shift
                     15    | Meta + Ctrl + Alt
                     16    | Meta + Ctrl + Alt + Shift
                  ---------+---------------------------

This is not only the case for the arrow keys, but also for everything else which uses that mechanism like PageUp/PageDown and function keys.
Implementing this is trivial, it's just a matter of adding additional key bindings, however I question whether we do want to have all of that in your configuration file. I feel like the key bindings are at a point, where we would benefit from not actually having all of them listed in the default config.

@kchibisov seems to be working for alt Shift+Alt+Arrowkey - just missing the sequences for Shift+Ctrl+Arrowkey

@nifker try this one
- { key: Up,       mods: Control|Shift,  chars: "\x1b[1;6A"                }
- { key: Down,     mods: Control|Shift,  chars: "\x1b[1;6B"                }
- { key: Left,     mods: Control|Shift,  chars: "\x1b[1;6D"                }
- { key: Right,    mods: Control|Shift,  chars: "\x1b[1;6C"                }

That is working. Thanks. Shall I close this one now?

That is working. Thanks. Shall I close this one now?

No. It'll be closed when all shortcuts that @chrisduerr mentioned above will be added.

Not sure if you already support this, but you also might want to consider adding escape sequences for "other" keys as well (things like semicolon etc). See xterm's modifyOtherKeys setting: https://invisible-island.net/xterm/manpage/xterm.html.

@nifker Were you running tmux? On some CLI programs only when it is running. Seems to be related with the fact that tmux changes TERM to screen-256color, when it was xterm-256color.

Not sure if you already support this, but you also might want to consider adding escape sequences for "other" keys as well (things like semicolon etc). See xterm's modifyOtherKeys setting: https://invisible-island.net/xterm/manpage/xterm.html.

I think this is disabled in ncurses by default, right? In which case we should do the same in Alacritty (imho) and not provide any of these bindings. If people want these features, they can always add their own bindings.

They are.
But they can also be enabled (and/or disabled) programmatically with "CSI > Ps ; Ps m" . Emacs uses this to enable more key bindings.

ncurses

Xterm. This has nothing to do with ncurses.

Xterm. This has nothing to do with ncurses.

Yeah sorry, this was a typo.

But they can also be enabled (and/or disabled) programmatically with "CSI > Ps ; Ps m" . Emacs uses this to enable more key bindings.

Oh, I don't think we support this escape at all yet? It would likely make sense to open a separate issue for this. This probably requires creating a new mode, adding it as an available mode for key bindings and creating appropriate mouse bindings for just that mode.


Hide hidden columns from trace viewer

Use the "type" parameter to encode hidden columns.
Signed-off-by: Matthew Khouzam<EMAIL_ADDRESS>

@MatthewKhouzam if the column is hidden, is there a way to show them in the front-end with the current implementation?

@MatthewKhouzam Is this PR still valid?

@MatthewKhouzam, the column model in the TSP doesn't have the hidden flag at the moment. If we'd like to support to allow the backend to hide columns by default this would have to be added to the TSP, trace server and front-end.
Shall this one be issue be closed for now. We can work on it when it becomes priority?


can i record screen only?

if i don't have microphone or speaker , can i record screen only?
In my pc without audio device, i set { audio:false, video:true} to record screen, but it is not OK. it occurs error in detect audio device.
for the plugin, it can record screen only. code as follow:
var recorder = new RecordRTC_Extension();
recorder.startRecording({
enableScreen: true,
enableMicrophone: true,
enableSpeakers: true
});
btnStopRecording.onclick = function() {
recorder.stopRecording(function(blob) {
console.log(blob.size, blob);
var url = URL.createObjectURL(blob);
video.src = url;
});
};

it is OK in chrome 72. but it is not OK in FireFox.

I'll recommend getDisplayMedia API that is supported by all browsers today, including Safari-preview.
Screen ONLY
let stream = await navigator.mediaDevices.getDisplayMedia({video: true});
let recorder = new RecordRTCPromisesHandler(stream, {
    type: 'video'
});
recorder.startRecording();

const sleep = m => new Promise(r => setTimeout(r, m));
await sleep(3000);

await recorder.stopRecording();
let blob = await recorder.getBlob();
invokeSaveAsDialog(blob);

Screen + Microphone
let mic = await navigator.mediaDevices.getUserMedia({audio: true});
let screenPlusMic = await navigator.mediaDevices.getDisplayMedia({video: true});
screenPlusMic.addTrack(mic.getTracks()[0]);
let recorder = new RecordRTCPromisesHandler(screenPlusMic, {
    type: 'video'
});
recorder.startRecording();

const sleep = m => new Promise(r => setTimeout(r, m));
await sleep(3000);

await recorder.stopRecording();
let blob = await recorder.getBlob();
invokeSaveAsDialog(blob);

Screen + Speakers
Work in progress. Browser vendors may implement this feature in next 2-3 months. (because it is supported by the spec).

I got it.
Thank you


How to represent kinematic model for robotics

Has a standard been proposed for the modelling of kinematics in AAS?  Common file formats for this information already exist (e.g. URDF files) - so perhaps the intention is for this information to simply be referenced or added as supplementary files in the AAS?  In any case, some guidance on the best practice would be useful, I think.

@imcardle: we are not aware of any dedicated kinematic models within AAS.
However, if you are coming more from the simulation direction, the IDTA working group Simulation might be interesting for you. Here is one example: https://github.com/admin-shell-io/submodel-templates/blob/main/development/Simulation/1/0/Festo_VWS_DGST_8078833_16_02_2021_enl_1_FMU.aasx
On the other hand, embedding files within submodels is always possible using "File" submodel elements with dedicated semantic IDs, as it is, for example, done within the MTP submodel proposal.