DISCUSS: future of docopt-ng

This is a broad topic that I've been thinking about recently, that has come up in several places, such as #4 and #45
What does the community want for the future of docopt-ng?

A maintained and type-hinted port of the original docopt
that, plus more features
something else?

I have so far been pursuing 1. This was because

I was estimating that most users are just porting over from the old docopt to here.
There are now many more CLI libraries than when docopt was released, so I think any new applications are more likely to use one of the more modern frameworks, that provides type hints, input validation etc. Docopt inherently is limited in those two aspects because it operates on plain docstrings, so those would have to be done as a post-processing step, leading to code duplication. Perhaps we should add this to the README so that new users know the limitations coming in.
I liked the scope that @keleshev started with, a function that takes a usage message and sys.argv, and returns a dict. It's well defined, has a narrow interface but a complex implementation, and composes well. In release 0.9.0 I even removed the magic stuff in pursuit of this (see the changelog for rationale)
So far, additional features have been able to be implemented as extensions, rather than needing to change this repo

the magic stuff could have been an extension
docopt-dispatch could be implemented as an extension

I have limited time and already am not giving this all the attention that it should probably be getting, so a smaller scope is more tenable for me.

I would love to hear people's opinions here. I don't have a lot of open source maintainership experience, so I apologize for any frustration that is caused by that.
Cheers,
Nick

Hello @NickCrews,
I'm the maintainer of docopts with an S for shell in bash. Written in go. I'm in a huge pause on this project since last September.
My own plan was to totally rewrite the golang parser to fully handle parse errors of docopt language, hand have a really nice diagnostic behavior. AST and much more. This is an handcrafted parser and lexer. It's still at some PoC level.
I appreciate the original goal of docstring => to dict. In bash it makes even more sense. Then I handle the argument the way I want, in python too. If my docopt parser finally succeed to have a really nice error reporting (better achieved in handcrafted parser than in generated one) I was planing to port it back to python as well. The original docopt project is frozen but full of really nice issues (about my goal on error reporting).
Error reporting / diagnostic is mostly the only thing I need for a cli at my side.
Hope that helps.
Sylvain.

Hi @Sylvain303, nice to meet you!
If the multiple ports were able to share one grammar, I think that would help unify the whole ecosystem, and reduce bugs. If someone wrote that grammar, would you want to use it? I'm no expert in grammars so I don't know which one we would want (EBNF, PEG, etc?). I think the biggest drawback would be the generic errors, as you say. IDK how to address this, maybe in each language's grammar-parsing library there would be a way to catch the parsing errors and wrap them in more helpful error messages?

If the multiple ports were able to share one grammar, I think that would help unify the whole ecosystem, and reduce bugs.

Basically that's what was done. On the code side, not a well defined grammar. Then the python development stopped. The python original docopt was mostly "blindly" ported into other some language. That was the case in golang and some other I looked at. The parser algorithm was almost verbatim in Go the same as in the original python one.
This issue discuss about grammar: https://github.com/docopt/docopt/issues/330 (pointer to and language description used in F# port)
I made an analysis myself here: https://github.com/docopt/docopts/blob/dev-grammar/grammar/docopt_language.ebnf

If someone wrote that grammar, would you want to use it? I'm no expert in grammars so I don't know which one we would want (EBNF, PEG, etc?). I think the biggest drawback would be the generic errors, as you say.

I'm not a grammar parser expert myself, but I love it since my first met of the GNU lex & Yacc book 20 years ago...
The docopt language is not trivial (on grammar definition) and has ambiguity. I needed a state lexer to tokenise it the way I wanted.
What the book was saying, is that grammar generator greatly simplify the complexity of writing a parser and its maintenance. But the error handling is mostly limited. I tried some generator and I was limited. I finally looked at golang owns parser which is a dedicated code and lexer too, and decided to write my own for docopt too.
F# port was using some F# language trick which is friendly for parsing and matching rules. Other language has some similar facilities like in Rust I think.

would you want to use it?

I'm actually using the original golang one in doctops. This one also stopped, as mentioned it was a port. Go has now some interesting argument parser, that also adresses the command line completion. As in kubectl for example. Still docopt is the only one based on documentation parsing avoiding to remember the object side of other argument parser and their fixed model. As  @keleshev  was mentioning back in his original video presentation in 2012 at PyCon.
Yes I would use a shared grammar / parser and contribute to it. Obviously it need to satisfy my own need on error reporting too. And we may also need to agree on some behavior fix on some strange docopt original behavior (ex: dict mapping change when Options: is present with argument --long=<argument_for_long>)

IDK how to address this, maybe in each language's grammar-parsing library there would be a way to catch the parsing errors and wrap them in more helpful error messages?

I turn the problem in this way: what is the result I would like to have with error handling?
Then I'm experimenting with the parser and erroneous ambiguous docopt input.
When I would have the AST, obviously I will also generate the command line completion too. :wink:

Just a random Python developer: I always loved docopt but was worried due to the lack of updates. I considered switching away from docopt but now that I found this project I hope I can use it for much longer (also switching away from docopt would take a long time as we have hundreds of scripts using docopt).
The thing I always liked about docopt was that the file had a easily readable help text at the top and that text was in sync with the actual script. I don't need more features but better error messages and diagnostics would be nice.
Over the years I encountered some parsing bugs/shortcomings in docopt but I was able to work around these so I don't remember any specifics anymore.

A colleague suggested docopt as a solution to a problem that I'm currently having.  I'm building a library of command line tools, and templates about how to use the tool.  Currently, there is a manual process of entering the command line with all its arguments etc, which is obviously not ideal.  I'd like docopt to spit out my list of arguments with the name, flag, any choice options and the help text.  This is a small part of a much larger project, so I was definitely hoping to find something already in the wild but haven't quite found what I need.

@Cyleigh that use case makes sense, thanks for the thoughts! Does docopt satisfy your needs, or is there something missing?

@Cyleigh that use case makes sense, thanks for the thoughts! Does docopt satisfy your needs, or is there something missing?

I'm not necessarily the most experienced python user, so I am having some trouble.  For example, the help string of options and arguments are not returned in ParsedOptions, and it very much assumes that I will want to parse a command line (which I don't want to do on creation).

I continue to really enjoy docopt: it gives me a CLI without the need to thing about any APIs.

Just found this and thought I'd chime in. I'm using docopt-ng in my project sqltrack. Specifically, I needed to parse arguments without actually running the code, and put those arguments into a database. Think scheduling a job on an HPC cluster, where the software available on the head node is very limited. At least back then, I found no other option besides putting the argument parsing into a separate file that doesn't depend on any third-party libraries.
In practice, missing data types were a problem, but I found a solution that worked pretty well: Just guess. There are a number of rules based on suffix matching and users can add their own. E.g., an option that matches *-path would be converted to pathlib.Path. If no rule applies cleanly, it tries int, float, complex, and finally json.loads.
Overall, I'm pretty happy how this turned out. Argument parsing using docopt-ng is opt-in, and I haven't had any complaints about this scheme.
In conclusion, I'm happy to use docopt-ng as-is, and would appreciate if it remains functional with future Python versions :)

Having used the original docopt - so excuse me if you already support this.
I would really love for a special argument that just dumps a structured (json / yaml) representation of the argument parser, that easily allows me to check what is parsed and wether changes I did might have changed the way args will be parsed.
This could also allow diffing between the way stuff is parsed in versions (as a kind of acceptance tests).
That is something I always missed when using the original docopt, that I always just used very rarely and was having a lot of trouble remembering the intricacies of the docopt configuration language.

@dwt that feature makes sense, and should be theoretically be possible.
If you want to discuss this further, please make a new feature request issue, so this thread doesn't go off topic. But in short:
I am not going to implement that (don't have the time time or interest), but I would consider merging a PR if

I didn't have to do huge amounts of edits/review on it
no additional dependencies, or very lightweight ones
didn't look like a huge maintenance burden. I'm skeptical this would be possible
didn't break existing users
I don't know of any common json schema that would work for this. I would love to not reinvent the wheel here, so would be worth it to explore what other. It also seems to me like "checking for a change in parsing behavior" would not be that useful on its own. If the behavior started off incorrect, you aren't actually catching that. It seems more useful to actually test assert my_parse("myprogram new --name foo") == <some dict>, even if it might be a bit more verbose. Also would serve as documentation.

Having used the original docopt - so excuse me if you already support this.
I would really love for a special argument that just dumps a structured (json / yaml) representation of the argument parser, that easily allows me to check what is parsed and wether changes I did might have changed the way args will be parsed.
This could also allow diffing between the way stuff is parsed in versions (as a kind of acceptance tests).
That is something I always missed when using the original docopt, that I always just used very rarely and was having a lot of trouble remembering the intricacies of the docopt configuration language.

@dwt
Hello, I'm not very active yet on docopts coding (golang version for bash) watch-out the extra 'S'. But I
try to implement such thing:  dumping what was actually parsed by docopt parser.
Could you create an new issue with some sample of what you would love to see outputted? That would be very useful. 🤩

@Sylvain303 @NickCrews Thanks for the feedback, I have opened a separate bug at #61

I am a heavy user of docopt. The selling points are, I think, three:

it helps keep documentation and code in sync,
it is a lightweight and straightforward dependency,
it supports a familiar and intuitive help text syntax.

Personally, I would like for docopt to be maintained so that it follows newer versions of Python and its quality improves (there are reported bugs and ambiguities).
Regarding new features, it would be great to have them if they contribute to the selling points without compromising any of them. Given that there is an ecosystem of other projects around docopt, it would also be nice to maintain an up-to-date list of such projects.

one thing that bothers me is that the API of argparse is super unintuitive, which is pretty much solved by docopt.

Another random dev here, I keep returning to docopt.
Alternatives are just so much less intuitive and feel bulky. If I need validation, I don't mind a bit of duplication, for the benefits of KISS and the documentation-first approach.
I wish there was a sleek way of combining with pydantic (without duplication), though.
But definitely don't want to see docopt gone!

Same here, I like the simplicity of docopt, and I wasn't even annoyed by docopt being unmaintained, but now I'll switch to docopt-ng.
I use it with commandopt for all my projects (disclaimer : I wrote it) to easily execute functions (commands) given docopts arguments.
The only thing I would dream to see is an autocomplete, so perhaps some external tool taking a docopt and turning it into bash completions, but imo that's out of the scope of docopt-ng.

A maintained, tested, typehinted docopt that continues to work with updates to Python makes me very happy.  A pure doc to dict converter, too, would be fine, too.  I'm happy to parse the arguments myself.  In particular, it makes parsing with custom functions an option.


1566 quota

This PR implements quota management functionalities on Django side that are needed for running a script nightly. @mjstealey and I need to do integration testing on a VM and patch things up as needed, but want to open a PR up for code review at the same time. @alvacouch @pkdash I requested code review from you both.

@alvacouch Regarding your comment It seems that quotas are not being attributed in the proper places. Theoretically, quotas should be assigned to users at resource creation time and should not change. This is -- I think -- what we discussed. There is a modification of the quota AVUs at file copying time that seems to deviate from this design.
It appears you have some confusion on that copy routine which I have already responded hoping to clear your confusion. In short, yes, quotas are assigned to users at resource creation time and will not change. The resource copy is another route for resource creation meaning you create a resource by coping a resource you can view created by others, in which case, you will be changed with quota rather than the original owner of the resource you have copied. Does this make sense to you? Let me know if you still have doubts on this.

There are two issues here:

there are multiple paths through the code after creating an empty resource, and at least one of them (leaving the resource empty) does not seem to attribute quota correctly. The setting for the quota attribution AVU should be when the resource is created, not when files are copied into it.

The code you wrote can be easily misused by a naïve programmer. If a naïve programmer calls "copy_resource_files_and_AVUs" on a resource that is already created correctly with proper quota attribution, it can change that attribution if the caller is not the creator.

@alvacouch Now I got your point. Yes, you are right, quota does not have to be set again in copy_resource_file_and_avus() since it is already be set when create_empty_resource() is called. I'll remove it. Thanks for catching it.

@alvacouch @pkdash I have finished all items for quota monitoring, reporting, and enforcement first pass implementation on Django side in this PR. It is ready for your review.

@alvacouch Your requested change has already been addressed, so you can review again and raise further concerns if any.

@hyi I may not be able to review this until tomorrow. If this needs to be merged soon then I am OK with +1 from @alvacouch.

@pkdash It is certainly OK for you to review after tomorrow. This PR is not targeted for next release, but hopefully for the subsequent release.

This PR is not targeted for next release, but hopefully for the subsequent release.

@hyi, @pkdash, @alvacouch - it would be preferred to not merge this into develop until 1.9.6 is out the deployed. Hopefully this week.
In the meantime Hong and I can work with the branch itself on alpha.

@aphelionz @pkdash Can you take a look at the one test failure on this PR - copied below for your easy reference:
500 != 200
-------------------- >> begin captured logging << --------------------
pysolr: DEBUG: Starting request to 'http://<IP_ADDRESS>:8983/solr/update/?commit=true' (post) with body 'u'<delete>'...
requests.packages.urllib3.connectionpool: DEBUG: "POST /solr/update/?commit=true HTTP/1.1" 200 None
pysolr: INFO: Finished 'http://<IP_ADDRESS>:8983/solr/update/?commit=true' (post) with body 'u'<delete>' in 0.011 seconds.
pysolr: DEBUG: Starting request to 'http://<IP_ADDRESS>:8983/solr/update/?commit=true' (post) with body 'u'<delete>'...
requests.packages.urllib3.connectionpool: DEBUG: "POST /solr/update/?commit=true HTTP/1.1" 200 None
pysolr: INFO: Finished 'http://<IP_ADDRESS>:8983/solr/update/?commit=true' (post) with body 'u'<delete>' in 0.010 seconds.
--------------------- >> end captured logging << ---------------------
Stacktrace

  File "/usr/local/lib/python2.7/unittest/case.py", line 329, in run
    testMethod()
  File "/hydroshare/hs_core/tests/api/rest/test_unzip.py", line 69, in test_deep_unzip
    self.assertEqual(response.status_code, status.HTTP_200_OK)
  File "/usr/local/lib/python2.7/unittest/case.py", line 513, in assertEqual
    assertion_func(first, second, msg=msg)
  File "/usr/local/lib/python2.7/unittest/case.py", line 506, in _baseAssertEqual
    raise self.failureException(msg)
'500 != 200\n-------------------- >>

I looked at the code and don't find anything that could cause this test failure. In fact, in test_unzip.py, in setup(), only /foo/test2.zip is put to the resource, but test_unzip.py test test.zip for unzipping. Does test.zip really exist under /foo for the resource? I have no idea why this test only fails for my PR, though. Any idea or suggestion would be appreciated.

@hyi and @aphelionz  It seems the test2.zip is under foo folder. Which would cause the test to fail. But I am not sure why it did not fail before.

@pkdash @aphelionz Not sure why this rest test failure does not happen for other PRs, but I have confirmed test.zip is not under foo folder which is what caused this rest test failure. I have corrected this issue by modifying the setup() to put test.zip to foo folder and verified the test now passes in my local development environment, so it should pass the Jenkins check now.

@hyi I have now reviewed this PR and have left few comments. I didn't find any unit tests related to user quotas. Would be good to add some unit tests.

@hyi There are multiple new migrations files here which can be merged into a single file by regenerating the migrations.

@mjstealey I have addressed all further requirements on quota implementation and will add unit tests next. In the meantime, it is ready to be deployed to alpha for integration tests with your script and for team to test on front end UI as well. Feel free to deploy to alpha whenever alpha is federated with usersdev for integration tests with your script. Let me know if you need me to do anything on that.

@pkdash I have added unit tests and addressed all your code review comments. It is ready for your next round of code review. @alvacouch I have also added a couple of statements here since your last code review: https://github.com/hydroshare/hydroshare/blob/1566-quota/hs_access_control/models.py#L2868-L2869 to make sure __check_unshare_resource_with_user() raises PermissionDenied exception if another owner tries to unshare the resource with its quota holder meaning quota holder cannot be removed from ownership, which has already been enforced on the front end UI. @mjstealey I will deploy this branch to alpha and make sure things are working as expected ready for you to integrate your script for integration testing.

@mjstealey I have deployed quota branch to alpha and got everything working as expected as far as I can tell. quotaUserName AVU has also been added to all resources in iRODS on alpha and user_quota.csv is created by running the management command dump_user_quota. So it is ready for integration testing with your script. Let me know if you run into any issues or have any questions when you start to work on this. When running the management command to add quota avu to all resources in iRODS, I found these two resources https://www.hydroshare.org/resource/76099f6bea2c480f84c592fed23bef3c/ and https://www.hydroshare.org/resource/b59089aa04a6466596f527806e360a7a/ do not have any owners, which is certainly not allowed and not sure how they occurred in the first place. Looping in @alvacouch and @dtarb also to get their input. I suggest just to delete these two malformed resources with no owners from admin on www.
Again, @pkdash I have made a couple of patches to make things work for alpha deploy (e.g., accommodate the case when some malformed resources have no owners. It is ready for another round of code review. Django should give a green check once it is done building, but if not, I will fix things up as they occur.

@hyi Will do another round of review on Monday.

@alvacouch Thanks for approving this PR already, but I'd like to bring your attention to some minor updates I made to access control unit tests in order to accommodate the fact that the quota holder cannot be unshared or removed from the ownership of a resource. By default, whoever created the resource will become the quota holder of this resource, however, any quota holder owner can transfer the quota holder to another owner, so to unshare a quota holder, this quota holder has to transfer quota holder to another owner to remove its quota holder status. As such, you may want to review again on access-control related updates I made since you approved this PR. I have added comments to explain my updates, so hopefully they all make sense, but let me know if you see any issues related to my updates to access control code and unit tests.

@hyi I have now done with the 2nd round of review. I saw your changes to access control. I assume it should not also be allowed to demote a quota holder privilege over a resource.  If that's true then additional changes need to be made to access control.

@pkdash Thanks. Yes, a quota holder cannot be demoted, but I think changes to this method __check_unshare_resource_with_user() covered this. If not, can you let me know where the demoting check is done? I don't seem to find any and extensive access control tests have all passed. Looping in @alvacouch as well. Just let me know if I have missed any additional changes needed in access control to make sure quota holder owner cannot be removed from ownership or demoted.

@hyi Similar to __check_unshare_resource_with_user()  there is also __check_share_resource_with_user() where you need to guard for the quota holder.

@pkdash Got it. Thanks. Will add the similar check for quota holder in that method as well.

@pkdash I have addressed all your 2nd round of code review comments and also added email notification sent to the new quota holder after quota holder change. It is ready for your new round of code review. Looping in @alvacouch @dtarb as well for their information. @dtarb Here is the email template for sending quota holder change: https://github.com/hydroshare/hydroshare/blob/1566-quota/theme/templates/email/quota_holder_change.html. I'll augment the template when I receive your email draft.
@mjstealey I did not further update alpha, since the new changes I made don't affect the integration workflow with your script and don't affect front end testing either. I will keep you posted if I need to make any further changes that affect the integration workflow, but I don't anticipate any such changes at this point. Let me know if you run into issues when testing your script integration on alpha for quotas.

@hyi Will review again tomorrow.

@hyi I have left one minor comment. Otherwise, +1.

@pkdash Have addressed your comment. You can take a quick look. I assume a +1 from you, but feel free to add any further comments if any. Thanks.

@hyi I assume you planning to do some more work based on the discuss today. Let me know when it is ready review again.

@alvacouch @pkdash I have moved quota holder getter and setter from BaseResource to ResourceAccess as we discussed today. You can do a final review when you get a chance. Thanks.

@hyi I have looked at the changes you have made in the access control. I am not sure why this change is better than what you had. I think this change introduced new dependency of access control module on iRODS. + 1 from me though.

@pkdash I agree with you and I am not convinced this change is better than what I had either. But I believe this is what Alva wants. So I'll defer this to @alvacouch and I am happy to revert back to what I had if that is what we decided to go with. I can go with either as long as we don't create a new quota user field in Django database since I prefer a single point of truth for quota holder which resides in iRODS.

@hyi It seems you can merge this.

@pkdash I'll wait to merge until @mjstealey script is wired in; otherwise, every user's current quota will be displayed as the default zero which will be updated by the nightly script from @mjstealey. @mjstealey Just let me know when your script is ready, then we can merge this with your script wired in at the same time.

@mjstealey and I have discussed and decided to get this PR in for release 1.10 while hiding all quota-related informational messages when user logins in and on user profile page until the backend quota calculation script is hooked up and tested and ready for the prime time. This will allow backend integration final testing done on www production to make sure things are working as expected before exposing the quota usage informational messages to the end users. However, the owners of the resources will be able to change quota holder to another user as needed once this PR is in. I have tested locally and made sure no misleading quota usage information is displayed to the end user at this point before the backend script is hooked up, and all appears to be well. So I'll merge this PR when it passes tests by Jenkins. Looping in @alvacouch @pkdash @dtarb for their information as well.

All checks have passed, so merging this PR.


UVI Request

--- UVI JSON ---
{
  "vendor_name": "Linux",
  "product_name": "Kernel",
  "product_version": "versions from v4.5 to before v5.14.12",
  "vulnerability_type": "unspecified",
  "affected_component": "unspecified",
  "attack_vector": "unspecified",
  "impact": "unspecified",
  "credit": "",
  "references": [
    "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=6e9fc177399f08446293fec7607913fdbc95e191",
    "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=88c3610045ca6e699331b6bb5c095c5565f30721"
  ],
  "extended_references": [
    {
      "type": "commit",
      "value": "6e9fc177399f08446293fec7607913fdbc95e191",
      "note": "introduced"
    },
    {
      "type": "commit",
      "value": "88c3610045ca6e699331b6bb5c095c5565f30721",
      "note": "fixed"
    }
  ],
  "reporter": "joshbressers",
  "reporter_id": 1692786,
  "notes": "",
  "description": "drm/nouveau/debugfs: fix file release memory leak\n\nThis is an automated ID intended to aid in discovery of potential security vulnerabilities. The actual impact and attack plausibility have not yet been proven.\nThis ID is fixed in Linux Kernel version v5.14.12 by commit 88c3610045ca6e699331b6bb5c095c5565f30721, it was introduced in version v4.5 by commit 6e9fc177399f08446293fec7607913fdbc95e191. For more details please see the references link."
}
--- UVI JSON ---

This issue has been assigned UVI-2021-1001687


How can I use plugin inside callback?

I want to call api on location change. I want to attach JWT_TOKEN which is stored in shared preferences. I am facing.
E/flutter (10000): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)

Can you show LocationService.kt ? Look like you didn't do the step 3 of Android. At the moment we can't use plugins on IOS by the way

@RomanJos I followed all 3 steps.
I created Application.kt and configured in manifest.xml.
I am not familiar  with native programming.
Why IOS is not working? there is steps for configure in IOS.

@vimalmistry The Document and the code need to be updated, I will do it this weekend. Please be hold until then.

@mehdok ohh :( Did you updated doc? I found some new informations in readme.md
One question. What is requirement of minimum android version? My client complaints it is not working on their older devices!

Minimum android sdk is 16.

Actually I modified the README 3 days ago so make sure to match changes on your project, it may resolve your issues 😉
I'm using it on a real Android 4.4.2 (API 19) and it work well I only have issue setting the accuracy to HIGH so I left it to NAVIGATION

@RomanJos Sorry your changes in document isn't merged yet. If there is something that can help @vimalmistry please copy paste it here.

No I mean the one that are already merged

I created Application.kt and configured in manifest.xml.

Its LocationService.kt on the readme

Thanks for replies. I actually configured using old doc (Application.kt). It works very  well in most devices  Except some devices and also I can not run it on emulator. But in physical device it works. But I found service is terminated after reboot. Is there any quick fix to auto start on reboot.
I am not a native developer. So I don't know much about .kt and .java file. I am just copy pasting every time.😇

Thats strange it work on some devices but not even on the emulator, have you tried to run the example ? Starting at boot mean that we need a way to start the plugin directly from kotlin and not dart and I think it would require a lot of changes idk
And i do the same lol

@vimalmistry I'm not sure why you can not get it working on some device or simulator, But I can confirm that the plugin is working fine on simulator, both Android and iOS.
On Android I can add the RECEIVE_BOOT_COMPLETED, it's not that hard to restart service when device rebooting, But it is something that only Android supports, as I know there is no similar feature on iOS, so for keeping everything equal I won't do it.

Thanks for replies. I actually configured using old doc (Application.kt). It works very well in most devices Except some devices and also I can not run it on emulator. But in physical device it works. But I found service is terminated after reboot. Is there any quick fix to auto start on reboot.
I am not a native developer. So I don't know much about .kt and .java file. I am just copy pasting every time.😇

Hey, can you tell me how you managed to solve the issue? I'm getting the same problem with SharedPreferences package, while I'm trying to use it on the static callback function

Have you followed the steps in the documentation?
https://github.com/rekab-app/background_locator/wiki/Use-other-plugins-in-callback

i have same case and problem with you, but i follow step on https://github.com/rekab-app/background_locator/wiki/Use-other-plugins-in-callback and it's work, here is my Application.kt
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin;
import io.flutter.view.FlutterMain
import rekab.app.background_locator.LocatorService

class Application : FlutterApplication(), PluginRegistrantCallback {
    override fun onCreate() {
        super.onCreate()
        LocatorService.setPluginRegistrant(this)
        FlutterMain.startInitialization(this)
    }

    override fun registerWith(registry: PluginRegistry?) {
        if (!registry!!.hasPlugin("io.flutter.plugins.sharedpreferences")) {
            SharedPreferencesPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.sharedpreferences"))
        }
    }
}

and change  the Manifestfile.
<application
        android:name=".Application"

you need add shared pref plugin,change
import io.flutter.plugins.pathprovider.PathProviderPlugin

to this
import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin;

and change
if (!registry!!.hasPlugin("io.flutter.plugins.pathprovider")) {
    PathProviderPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.pathprovider"))
 }

to this
 if (!registry!!.hasPlugin("io.flutter.plugins.sharedpreferences")) {
   SharedPreferencesPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.sharedpreferences"))
}

and in the static callback just use the shared pref plugin as usual
SharedPreferences prefs = await SharedPreferences.getInstance();
String somthing = prefs.getString('somthing');

@vimalmistry I'm not sure why you can not get it working on some device or simulator, But I can confirm that the plugin is working fine on simulator, both Android and iOS.
On Android I can add the RECEIVE_BOOT_COMPLETED, it's not that hard to restart service when device rebooting, But it is something that only Android supports, as I know there is no similar feature on iOS, so for keeping everything equal I won't do it.

@mehdok  Any chance to convince you to make this implementation for Android?
Almost 90% here in Brazil is android: https://gs.statcounter.com/os-market-share/mobile/brazil
And worldwide is not so different: https://gs.statcounter.com/os-market-share/mobile/worldwide

@wemersonrv I think I can do that this weekend.

Whats the Java equivalent to this
`import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin;
import io.flutter.view.FlutterMain
import rekab.app.background_locator.LocatorService
class Application : FlutterApplication(), PluginRegistrantCallback {
override fun onCreate() {
super.onCreate()
LocatorService.setPluginRegistrant(this)
FlutterMain.startInitialization(this)
}
override fun registerWith(registry: PluginRegistry?) {
    if (!registry!!.hasPlugin("io.flutter.plugins.sharedpreferences")) {
        SharedPreferencesPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.sharedpreferences"))
    }
}

}`
Can I add a Kotlin file to my flutter app when it was created using Java?

@MazEbeid thanks! can you help with ios configuration?

I have no experience with iOS but this is very important to me at the
moment so I am spending time on it and I will look into how I can
contribute more.
I have tested last night the plugin while the app was in the background for
2hrs and I got a ping on iOS every 1 second or two.
I was out for 2 hrs and spent an hour whole the phone was locked and
stationary and still got some good pings.
I will be moving on to trying to get this to work while the app is
suspended. I think to start with I need to figure out if this is something
that can be done by firing a background service .. the problem with those
is that they cant be faster than 15minutes and also this is not guaranteed
and depends on how the OS prioritises your app.
On Sat, 13 Jun 2020, 07:07 Taras Tataryn<EMAIL_ADDRESS>wrote:

@MazEbeid https://github.com/MazEbeid thanks! can you help with ios
configuration?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/rekab-app/background_locator/issues/34#issuecomment-643576295,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AKAXPSUS54HNWHBI5GSF63DRWMJT5ANCNFSM4ME5WDDQ
.

@MazEbeid @ozz-rjq There is a bug with iOS that prevent that app to get a gps fix while app is terminated in iOS (or at least get a fix every 500 meter or so). Also there is a PR #59 which address this issue, but there is a bug with it too. It would be appreciated if anyone can help with that.


Bug Report: Fabric Lakehouse Table Creation Results in "Unidentified" State

Issue Summary
When using df.write.format("delta").save("Tables/" + table_name) to create or update tables in a Microsoft Fabric Lakehouse with schema support enabled, the resulting tables are not properly recognized in the Lakehouse catalog. Instead, they appear in an "unidentified" state with the error "unable to identify these objects as tables".
Environment

Platform: Microsoft Fabric
Feature: Lakehouse with Schema Support (Preview) enabled
Affected Method: Delta table write using .save() with a manual path

Steps to Reproduce

Target a Microsoft Fabric Lakehouse with Lakehouse Schema Support enabled.
Use the bc2alds notebook code to write a Delta table:df_new.write.mode("overwrite").format("delta").save("Tables/" + table_name)

After execution, inspect the table list in the Lakehouse UI.

Observed Behavior

The table appears in the Lakehouse, but its state is "unidentified".
The error message indicates "unable to identify these objects as tables".
Querying the table fails since it is not properly registered in the Lakehouse catalog.

Root Cause
The issue occurs because schema support requires tables to be registered with an explicit schema context in the Lakehouse. Writing directly to a path using .save() bypasses the schema registration process, causing the Lakehouse to misinterpret the table metadata.
Workarounds
Use saveAsTable() to register the table in the catalog without explicitly specifying the schema:
df_new.write.mode("overwrite").format("delta").saveAsTable(f"{table_name}")

Recommended Fix
Update the notebook to utilize the saveAsTable() method instead of the save() method.

If schema support is enabled, the table defaults to the dbo schema.
If schema support is disabled, the table should still work without errors.

Optionally, set the schema explicitly using a variable:
schema_name = "my_schema"
df_new.write.mode("overwrite").format("delta").saveAsTable(f"{schema_name}.{table_name}")

Thanks allot for reporting this @DataInsightPro ! Added an option to add a schema name.
If that is empty then it will be saved without a schema.


is_topic_muted in muting.js returns 'undefined'

I was working on the pull request "muting and un muting topics with M/U" when I encountered this. While using muting.is_topic_muted(stream, topic) I am passing the message.stream and message.subject and the return value should be either false or true but when I try muting a topic which is not already muted, the function returns undefined. Is this the expected behavior?

I think it's sorta-expected behavior, i.e. an idiomatic way to return a falsy value in JS, but I think it would be better to make it explicitly return false when sub is undefined.  I highly doubt the calling code cares whether it's "false" or "undefined," as long as it's falsy.


Trim parsed_css from pages payload

Progress on #98
We're adding a new custom metric in https://github.com/HTTPArchive/custom-metrics/pull/44 but we don't want it to appear in the HAR payloads on BigQuery because of its size. This PR excludes it for now.
The custom metric is named parsed_css so it'll appear as _parsed_css within the page object.
Later, I'll adjust the pipeline so that we can write the new custom metric to its own table for analysis.

Linter error is for the upstream branch, so won't fix for now.


$_SERVER['REMOTE_HOST'] and REMOTE_ADDR incorrectly set

As HTTP traffic for the apps on CloudFoundry are served by a chain[1], then the X-FORWARDED-HOST and X-FORWARDED-PROTO headers should be used to properly fill the $_SERVER variable for php apps.
Currently php apps most likely see the gorouter IP in REMOTE_X variables, and the DEA IP and port into SERVER_PORT and SERVER_ADDR
https://php-info.cfapps.io/info.php
_SERVER["REMOTE_ADDR"]	<IP_ADDRESS>
_SERVER["REMOTE_PORT"]	14456
[1] Current request chain is:

AWS ELB for run.pivotal.io or HAProxy or Nginx such as in https://github.com/cloudfoundry-community/sslproxy-boshrelease
gorouter
apache within the cf-php-apache-buildpack

Good Morning,
I'm a page web in WordPress a I need use de httpd protocol, The core of WorPress use variables like $_SERVER[HTTP_X_FORWARDED_PROTO] and $_SERVER['HTTPS'] to process redirections.
After read this issue I would like that in my server apache show the variables like this example https://php-info.cfapps.io/info.php, so my question is: how can I activate the group of variables like _SERVER["HTTP_X_FORWARDED_PROTO] and that I can show when I run phpinfo().
Thanks a lot.


/images/icons/new/vendor-openstack_infra.png is missing

In the latest builds from GH master I noticed that the image mentioned in the title does not exist in the appliance nor repository, so when you add an OS provider and look at its quadicon, it will show the broken "not found" image.

Fixed in #1517


When output is provided as a dictionary a loss function is not set during compile.

Here is a very short example that demonstrates the issue:
import keras
import numpy

x = keras.layers.Input((16, 16))
x2 = keras.layers.Dense(32)(x)
x2 = keras.layers.Dense(1, activation = "sigmoid")(x2)

model = keras.models.Model(inputs =[ x], outputs = {"dt":x2})

model.compile( optimizer = keras.optimizers.Adam(0.0001), loss="mean_squared_error")

i = numpy.random.random((5, 16, 16))
o = (numpy.random.random((5, 1))>0.5)*1
model.fit(i, o)

Results in

ValueError: No loss to compute. Provide a loss argument in compile().

I don't know how to fix this issue, I tried using `loss = {"dt":"mean_squared_error"} which is how I previously would setup different loss functions for different outputs. Maybe this is a bug, or it is a new way to setup outputs/loss functions.
pip freeze returns keras and tensorflow values:

keras==3.0.0
tensorboard==2.15.1
tensorboard-data-server==0.7.2
tensorflow==2.15.0.post1
tensorflow-estimator==2.15.0
tensorflow-io-gcs-filesystem==0.34.0

Hi, You are providing wrong inputs and outputs.
Please find the below updated code, which is working fine.
import keras
import numpy

x = keras.layers.Input((16, 16))
x2 = keras.layers.Dense(32)(x)
x2 = keras.layers.Dense(1, activation = "sigmoid")(x2)

model = keras.models.Model(inputs=x, outputs=x2)

model.compile( optimizer = keras.optimizers.Adam(0.0001), loss="mean_squared_error")

i = numpy.random.random((5, 16, 16))
o = (numpy.random.random((5, 1))>0.5)*1
model.fit(i, o)

Your response seems to miss the point. Previously the outputs could be
provided as a dictionary. Now it silently fails.
Are you saying that lists and dictionaries are no longer valid arguments
for inputs and outputs? That seems like quite a change to the api and there
should be an error or warning.
Also, what is the replacement? I have multiple outputs, I map them with a
dictionary. What should I do now.
Your example does not solve the problem.
Thank you
On Mon, Dec 18, 2023, 7:39 PM Sachin Prasad @.***>
wrote:

Hi, You are providing wrong inputs and outputs.
Please find the below updated code, which is working fine.
import kerasimport numpy
x = keras.layers.Input((16, 16))x2 = keras.layers.Dense(32)(x)x2 = keras.layers.Dense(1, activation = "sigmoid")(x2)
model = keras.models.Model(inputs=x, outputs=x2)
model.compile( optimizer = keras.optimizers.Adam(0.0001), loss="mean_squared_error")
i = numpy.random.random((5, 16, 16))o = (numpy.random.random((5, 1))>0.5)*1model.fit(i, o)
—
Reply to this email directly, view it on GitHub
https://github.com/keras-team/keras/issues/18959#issuecomment-1861296958,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA2NNEPY4TWYVIE3VZDX5T3YKCEURAVCNFSM6AAAAABAZQ275WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNRRGI4TMOJVHA
.
You are receiving this because you authored the thread.Message ID:
@.***>

It should ideally support dictionary inputs, but to only one level, Keras 3 doesn't support nested level input, output dictionary mapping anymore.
For more details, check the migration guide here https://keras.io/guides/migrating_to_keras_3/#using-deeply-nested-inputs-in-functional-models

That doesn't sound correct because I am not using a "deeply nested"
dictionary and their examples give warning or errors.
On Mon, Dec 18, 2023, 11:24 PM Sachin Prasad @.***>
wrote:

It should ideally support dictionary inputs, but to only one level, Keras
3 doesn't support nested level input, output dictionary mapping anymore.
For more details, check the migration guide here
https://keras.io/guides/migrating_to_keras_3/#using-deeply-nested-inputs-in-functional-models
—
Reply to this email directly, view it on GitHub
https://github.com/keras-team/keras/issues/18959#issuecomment-1861786958,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA2NNEMMRXRZJIJLN5O3XVDYKC7ADAVCNFSM6AAAAABAZQ275WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNRRG44DMOJVHA
.
You are receiving this because you authored the thread.Message ID:
@.***>

From the documentation for keras 3 model api https://keras.io/api/models/model/#model-class :

Note: Only dicts, lists, and tuples of input tensors are supported. Nested inputs are not supported (e.g. lists of list or dicts of dict).

So I am providing a dict it should be supported. I would say this is a bug, or the documentation needs to be updated.

the behavior change has been documented here

That describes the loss function, it doesn't say that the model no longer
accepts a dictionary. I linked the documentation that says the model
accepts lists, and dictionaries. Maybe you should fix that too.
On Wed, Dec 20, 2023, 11:04 PM Divyashree Sreepathihalli <
@.***> wrote:

the behavior change has been documented here
https://keras.io/guides/migrating_to_keras_3/#:~:text=None%2C name%3Dkeras_tensor_6>-,Multi-output model evaluate(),-The evaluate()
—
Reply to this email directly, view it on GitHub
https://github.com/keras-team/keras/issues/18959#issuecomment-1865203370,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA2NNEM4OAIBQ2KXP7IETN3YKNOFNAVCNFSM6AAAAABAZQ275WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNRVGIYDGMZXGA
.
You are receiving this because you authored the thread.Message ID:
@.***>

This makes keras incompatible with previously trained models for no reason. It also makes it possible to build models and then be unable to train them with a cryptic error. It is really strange to keep a part of the API that is fundamentally broken.

The documentation still says that the Model API supports dictionaries. https://keras.io/api/models/model_training_apis/

What is the rationale for this? It seems to be a completely unnecessary burden on the users of Keras. If Model.output does not need to handle Maps but only a list, why not have the Model API handle that behind the scenes by converting the Map.values to a List?

@odinsbane @ashindea trying to help here (just another user.)
I think what you were asking was fixed in recent versions.
Use keras nightly pip install keras-nightly and your code should work.
Here is a Gist.
I review part of your original post below.

Are you saying that lists and dictionaries are no longer valid arguments for inputs and outputs

No, should not be the case, that was a bug.
In the lines below:

model = keras.models.Model(inputs =[ x], outputs = {"dt":x2})
model.fit(i, o)

For best practice o should be {'dt':o}, but it as it's written it'd also work now.

@ghsanti wow good find! Thank you for the update. Do you know if it was another bug that go fixed that also fixed this one?

@ghsanti wow good find! Thank you for the update. Do you know if it was another bug that go fixed that also fixed this one?

It was fixed between 3.4.1 and current head, so 3.4.1...master should contain it, but I don't know which commit.
You should be able to stick to 3.4.2 once it's released (hopefully this month.)

Thanks. FWIW I think it's working on the version of keras in tf-keras-nightly 2.18.0.dev2024080509, which contains tf.keras 3.4.1.dev2024080503.


Add  new helper API

closes https://github.com/ViewComponent/view_component/issues/1848
What are you trying to accomplish?
as discussed  I am attempting  to add a more explicit helpers api to replace helper.<helper>
What approach did you choose and why?
I used a active support concern to add the method to make it modular and optional

Anything you want to highlight for special attention from reviewers?

@camertron I haven't added the test helpers discussed yet, but can you take a look at what is added so far

Thanks for this @reeganviljoen! Let us know if you need help with the docs!

@camertron, @Spone I got the use_helpers helper top work finally after many hours of debugging strange errors, however I believe it can be further refactored quite a bit but due to these errors whenever I try it breaks, if you can possibly help(if you can) it would be much appreciated

@spone, @BlakeWilliams , @camertron  I have decided to separate the test_helper portion of this pull request as their seems to be a few unrelated issues that would benefit from focused attention, would any of you be able to review what is left of the use_helpers method, I will be adding docs soon

@spone, @BlakeWilliams , @camertron  I have decided to separate the test_helper portion of this pull request

Good call, let's focus on the core feature, then add the test helper.


Errors when migrating to django 1.7

When migrating from 1.6 to 1.7 I hit such errors. All generated calling manage.py validate.

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/apps/config.py", line 197, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/fluent_contents/models/__init__.py", line 23, in <module>
    from fluent_contents.models.fields import PlaceholderField, PlaceholderRelation, ContentItemRelation
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/fluent_contents/models/fields.py", line 2, in <module>
    from django.contrib.contenttypes.generic import GenericRelation, GenericRel
ImportError: cannot import name GenericRel

According to django 1.7 release notes some changes were applied to  content types application.
Digging a bit, it looks like although GenericRelation class was moved, some steps were made to sustain possibility of importing it the old way. GenericRel wasn't treated that way and can't be imported from django.contrib.contenttypes.generic anymore.

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 115, in populate
    app_config.ready()
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/contrib/admin/apps.py", line 22, in ready
    self.module.autodiscover()
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/contrib/admin/__init__.py", line 23, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/utils/module_loading.py", line 74, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/fluent_pages/pagetypes/fluentpage/admin.py", line 6, in <module>
    from fluent_contents.analyzer import get_template_placeholder_data
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/fluent_contents/analyzer.py", line 4, in <module>
    from template_analyzer.djangoanalyzer import get_node_instances
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/template_analyzer/__init__.py", line 1, in <module>
    from .djangoanalyzer import get_node_instances
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/template_analyzer/djangoanalyzer.py", line 11, in <module>
    from django.template.loader_tags import ConstantIncludeNode, ExtendsNode, BlockNode
ImportError: cannot import name ConstantIncludeNode

Looks like ConstantIncludeNode (and its base class BaseIncludeNode) was removed, I can't find them anywhere in Django code.

Performing system checks...

Unhandled exception in thread started by <function wrapper at 0x7f44e830a1b8>
Traceback (most recent call last):
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 222, in wrapper
    fn(*args, **kwargs)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 105, in inner_run
    self.validate(display_num_errors=True)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 362, in validate
    return self.check(app_configs=app_configs, display_num_errors=display_num_errors)
  File "/home/tomek/htdocs/isivi/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 414, in check
    raise CommandError(msg)
django.core.management.base.CommandError: System check identified some issues:

ERRORS:
<class 'fluent_pages.admin.pageadmin.DefaultPageParentAdmin'>: (admin.E016) The value of 'form' must inherit from 'BaseModelForm'.

Django 1.7 came with some new project check framework and some code breaks one of this spec rules.
BTW
Thx a lot for nice group of fluent apps!

This is all solved with the recent commits.


allow for mass when not setting up swift

(cherry picked from commit 13ddcb59e4264965f632ff9a1ed6cc0e727af718)

Abandoning, this commit doesn't work.


[WIP] Remove custom_attribute_columns_and_models and use MiqExpression#fields method

we have MiqExpression#fields for list of fields from MiqExpression.
So I can use it for loading custom attributes.
thanks @kbrock
@miq-bot add_label core, refactoring
@miq-bot assign @gtanzillo

@lpichler whoa - this is sweet
I approached extracting fields a little differently than you did, so I wasn't sure if you felt I got them all.
Also, do we have enough test cases around custom attributes for you to be comfortable that using fields won't introduce regressions?

@miq-bot add_label wip

Also, do we have enough test cases around custom attributes for you to be comfortable that using fields won't introduce regressions?
@kbrock

This PR is mergeable because there is used compact.
But I found expression with "regkey" - registry which is not covered in MiqExpression#fields.
I am preparing a fix for it.
Other thing is that I wanted to use is_tag?
But it can be merged and I can do it in follow-up PR.

@lpichler think @imtayadeway wants to hold of is_tag? - lets not put that in the way of this PR.
Looking forward to seeing fix for "regkey" - please cc me

@lpichler Thank you so much for these PRs around fields and tags.
Can we merge this? Is it a WIP?

@miq-bot remove_label wip


Dev

Current coverage is 67.07%

Merging #42 into master will not affect coverage as of 2bdf161

@@            master     #42   diff @@
======================================
  Files           19      19
  Stmts         1066    1066
  Branches         0       0
  Methods
======================================
  Hit            715     715
  Partial          0       0
  Missed         351     351

Review entire Coverage Diff as of 2bdf161

Powered by Codecov. Updated on successful CI builds.


Deep link for Meetings Attendees not working.

Deep link for Meetings Attendees not working.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 45541337-ecd7-5cf6-cbe4-3f0d2f39aa79
Version Independent ID: 6b4203f0-2844-06c9-eaa3-9cc03e6f76c0
Content: Create deep links - Teams
Content Source: msteams-platform/concepts/build-and-test/deep-links.md
Product: msteams
GitHub Login: @surbhigupta
Microsoft Alias: lajanuar

Hello,
This link suppose to add joe as attendee but it doesn't:
<EMAIL_ADDRESS><EMAIL_ADDRESS>Regards,
AJ
e: @.***
p: +63<PHONE_NUMBER>

From: sayali-MSFT @.>
Sent: Friday, April 8, 2022 5:34:46 PM
To: MicrosoftDocs/msteams-docs @.>
Cc: hehe13 @.>; Mention @.>
Subject: Re: [MicrosoftDocs/msteams-docs] Deep link for Meetings Attendees not working. (Issue #5691)
@hehe13https://github.com/hehe13 -Could you please elaborate your requirement and share the repro steps, so that we can try it from our end.
—
Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/msteams-docs/issues/5691#issuecomment-1092657523, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABY25GEQPLRIADOQ7TQH4ULVD74TNANCNFSM5S3564ZA.
You are receiving this because you were mentioned.Message ID: @.***>

@hehe13 -We are tested this from our end it's working fine for us.Could you please check it once with the below deeplink.modify attendees and dateTime as per requirment.
Microsoft Teams Version <IP_ADDRESS>63 (64-bit)
Deeplink:-
https://teams.microsoft.com/l/meeting/new?subject=test subject&attendees=joe<EMAIL_ADDRESS>11:45:00&endTime=04/11/2022 11:30:00&content=test:content
https://user-images.githubusercontent.com/93527375/162676516-9c057fdd-6eaf-4806-bd4c-d6e5ff2f9740.mp4

Please see my recording. Using the link only keeps myself as the attendee and does not add joe and bob.

Sorry, I don't follow. What do you mean add then in chat?

I think I understand now, if the contact is not part of our company contact list it will not work?


Make clear and easy user flow on the site

Acceptance
I can clearly answer these:

[ ] I'm new to this area and want to know what a data portal is.
[ ] I want to check out this framework and its features and whether worth looking further.
[ ] I want to get started immediately trying this out and building something => take me straight to a tutorial or quickstart example. Relates to #795
[ ] I want to see the examples that i could use so i pick one most relevant to my needs right now.

Analysis
I think we could still revisit our initial plan re landing page, eg, we might be missing some useful sections etc.
Notes
User flow analysis
Job stories and personas
I'm new to this area and want to know what a data portal is
graph LR;
  Home-->Hero-->|Looking for examples|Gallery;
  Home-->Navbar-->|Looking for information|Docs-->?;

+ The gallery is very easy to find

In the gallery, users can interactively understand what a data portal is + what PortalJS aims to accomplish

- Docs don't explain what a data portal is at all

We could start our guides with an article about that
It's also very useful to clarify terminology (kinda like a glossary?)

I want to check out this framework and its features and whether worth looking further
graph LR;
  Home-->Hero-->GetStarted[Get started]
  Hero-->Gallery
  Home-->Section1[How PortalJS works?]
  Home-->Navbar-->Docs
  Home-->Community-->Stars[GitHub stars]

+ Gallery is easy to find and very interesting for this persona
+ Get started is easy to find and takes the user to the docs

+ Docs clarify main points in the first few lines

framework for rapidly building rich data portal frontends
can be used to present a single dataset or build a full-scale data catalog/portal.
Built in JavaScript and React on top of the popular Next.js framework
interacts with backend(s) via an API. It can be used with any backend and has out of the box support for CKAN.

- Docs seem clear on what but not on how

It's likely that the users are going to be expecting a components lib, which at this point is misleading
We could clarify that users can bootstrap a data portal from a variety of examples (templates)

- Features need some review
- At this point we don't even have a tutorial, so users are probably unable to proceed except if they look into the examples

I want to get started immediately trying this out and building something => take me straight to a tutorial or quickstart example
graph LR;
  Home-->Hero-->GetStarted[Get started]-->Examples
  GetStarted-->?

+ Once again, it's easy to get to the docs
- But then, what is the user supposed to do?

Users have to figure out that they have to start from an example
If the user is expecting a components lib, he will probably feel confused

I want to see the examples that i could use so i pick one most relevant to my needs right now
graph LR;
  Home-->Gallery-->?
  Home-->GetStarted[Get started]-->Examples
  Home-->Navbar-->Docs-->Examples

+ It's easy and clear to get to the examples
- Examples section in the docs could be more interesting e.g a grid similar to the gallery section
- The example's page is missing some info, e.g screenshots, description of what it's exactly and when it should be used (e.g https://portaljs.org/docs/example-ckan)

We could come up with a example doc template based on that

- Gallery only links to demos

We could add more links to the on hover overlay

Link to demo
Link to docs
Link to source code

Improvements

Landing page

Gallery

[x] Add more links to each item

[x] Demo
[x] Docs
[x] Source code

Docs

[x] Add a paragraph to the initial text clarifying that a project is bootstraped from an example
[x] Add a "What is a data portal?" section

In the future we can make it a page

[x] Add a Get Started section

in the future we can turn that into its own page, but for now, just a section should suffice
[x] Explain that users should start from an example

[x] Add a "We are working on that! Guides and tutorials coming out soon" message to the tutorials and guides section

Future

Docs

Similar to Flowershow, the index page has just an intro text and then it lists the docs pages
Structure:

Intro text
Get started

What is a data portal?
How PortalJS works?
Create a new data portal with PortalJS

Examples (why don't we call those templates?)

...

Tutorials

...

Guides

...

Material we can reuse

What is a data portal?

https://datahub.io/docs/dms/data-portals

Updates 2023-04-24
PR: https://github.com/datopian/portaljs/pull/799
Changes:

Gallery

Added links to source code and documentation for the examples

Moved the content on the blog posts of the examples to the docs, we now have a single file for the examples
Examples docs are listed on the blogs page
Copied /docs/dms into PortalJS
/docs

Tried to make it more clear that PortalJS rn serves to bootstrap a data portal from an example
Added a "What is a data portal?" section with a link to /docs/dms/data-portals
Added a "Getting started" section with more info about how to create a project
Added a message to the Tutorials and guides section saying that we are going to write content for it in the future

@demenech I think we now have a lot of docs moved to PortalJS.org and I'm wondering how would one navigate? E.g., do you think we can consider some sort of structured way to navigate on /docs page similar to https://nextjs.org/docs (i'm not certain and we can be flexible). I'm not sure if we want to have search but I think flowershow has a way for it as well.

@demenech I think we now have a lot of docs moved to PortalJS.org and I'm wondering how would one navigate? E.g., do you think we can consider some sort of structured way to navigate on /docs page similar to https://nextjs.org/docs (i'm not certain and we can be flexible). I'm not sure if we want to have search but I think flowershow has a way for it as well.

This will be added to the new website inbox.


WIP: add gamedao

Closing this PR for now, feel free to open it again once you've done the changes.


ci: fix flaky tests

PR Checklist
Please check if your PR fulfills the following requirements:

[x] The commit message follows Conventional Commits
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

PR Type
What kind of change does this PR introduce?

[ ] Bugfix
[ ] Feature
[ ] Refactoring
[ ] Code style update
[x] Build or CI related changes
[ ] Documentation content changes

What is the current behavior?
Closes #2908
Does this PR introduce a breaking change?

[ ] Yes
[x] No

I'm not sure that our components should know about Cypress. We have token TUI_DOC_SCROLL_BEHAVIOR in addon-doc, how about move it to cdk/core package, rename to TUI_SCROLL_BEHAVIOR and use it here?
@waterplea what do you think?

I'm not sure that our components should know about Cypress. We have token TUI_DOC_SCROLL_BEHAVIOR in addon-doc, how about move it to cdk/core package, rename to TUI_SCROLL_BEHAVIOR and use it here?
@waterplea what do you think?

It would be a bigger refactor and this mobile calendar is probably getting deprecated in future, in favour of native data picker on mobile. Let's stick with a simple solution for now.


Support for Additional Tags

Is there an existing issue for this?

[X] I have searched the existing issues

Description
Currently it appears that the tags are limited to application_name and environment.
https://github.com/Azure/terraform-azurerm-openai/blob/main/main.tf#L9
While looking to standardize tagging strategy based on customer's requirements, flexibility in the ability to provide custom tags would be essential.
New or Affected Resource(s)/Data Source(s)
all tagged resources
Potential Terraform Configuration
perhaps adding a new variable "additional_tags":

variable "additional_tags" {
  default = {}
}

and on https://github.com/Azure/terraform-azurerm-openai/blob/main/main.tf#L9

  tags = merge(var.additional_tags, (var.default_tags_enabled ? {
    Application_Name = var.application_name
    Environment      = var.environment
  } : {})

(FYI haven't tested the function above works)

References
No response

Completed via #36


KEv2/GKE: missing parity with KEv1 fields

What kind of request is this (question/bug/enhancement/feature request): feature request
The GKE operator CRD is missing fields that the kontainer-engine GKE driver had:
Locations - "Specify default node locations" - additional zones to increase node pool availability
MaintenancePolicy.Window - cluster-level maintenance policy
We should add these to maintain feature parity with the old driver.

How to test:
On GKEClusterConfigSpec set
locations: []

or
locations:
- <zone>
- <another zone>
- etc

On GKEClusterConfigSpec set
maintenanceWindow: ""

or
maintenanceWindow: <time in HH:MM format>

@prabalsharma this is just about testing those two fields, so this can be closed.


Build a unit test showing path splitting.

The path splitting function here needs to force a network split when entering or exiting a waterbody, or, when not in a waterbody, when passing through a junction. We will need to check whether this works both before and after the network has been processed to reduce reservoirs to a single topological element.
https://github.com/NOAA-OWP/t-route/blob/63e1578af5edf7086df7a4106314d5f31bfdbc71/src/python_framework_v02/troute/nhd_network.py#L174

Unit-tests prototyped in #357 ... jump on the bandwagon!


[9.x] Omit render() method in Blade Components

Currently, the render() method is required on a blade component. I would say 95% of the time I never change the render() method view on a rendered blade view component. In Livewire, you can omit the render() method and this PR accomplishes the same action.
Before:
<?php

namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{
    public function render()
    {
        return view('components.alert');
    }
}

After:
<?php

namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{
    //
}

This will automatically attempt to resolve a view located at components.x and also works on nested components. Users may continue to write their own render() methods for complex customization.
Other considerations - throw a good exception message when the blade view doesn't exist (making it clear we couldn't automatically resolve the view)?

@taylorotwell I’d say this is non-breaking? New components would have their render method omitted and use the auto-resolve-view logic. Any existing components (with a render method defined and explicitly specifying a view) will just continue to work as is.


CI:rm load bagerdb test

The test of loading metadata in badgerdb has failed for a long time . Details may refer to https://github.com/juicedata/juicefs/actions/runs/3095075995 .

？


Dropdown suggestion: allow "value" to be an object

So I have been using Dropdown for a simple select, except the value can only be a string. Why not allow the value to be an object?
We can access the options via the data object in the onChange function, but then what if we needed the whole single object instead of just its value?
For those knowledgeable about Angular 1.X, it's like the selected item in the ng-options.

I've considered this a number of times actually.  I'm currently working on improving the allowed values for the items prop as well, #1038, which has opened a clear path to allowing the value to be a string or object.  I'm still considering it as I build out the rest of that PR, perhaps it will make it in.
The primary reason we've not done this is to date is that we want to preserve the onChange => value loop for controlled components.  The value you get back from the Dropdown's onChange is the value of the Dropdown, not the props object of the item.
There's a good description of this here: https://github.com/Semantic-Org/Semantic-UI-React/issues/912#issuecomment-262356714
You can see more historical context here: https://github.com/Semantic-Org/Semantic-UI-React/issues/754

I saw this issue #754 this morning. It's working. thanks.

I found a not very good but functional solution and the errors stopped :)
const options = () => list.data.map((e) => { return {key: e.id, text: e.nome, value: JSON.stringify(e)}; })
values have objects as string, and when send data state for serve i am converter object again
const convertObject = JSON.parse(this.state.data)
 const dataServe= update(this.state.data, {
            $merge: {object: convertObject }
});

If you have something better I would be happy to know because I believe it is not the ideal solution, although it works, I would like value you can receive an object

@angelicalleite, I've considered that solution but concluded the one in issue #754 is so much simpler and better, using _.find() inside the event handler function.

Hi !
I used this solution, which has no dependency to lodash, but it could be too basic for your needs
<Dropdown                     placeholder="The coworker"                     fluid search selection                     value={coworkers.indexOf(this.state.coworker)}                     onChange={this.handleCoworkerChange}                     options={coworkers.map(this.renderMenuItemCoworker)}>                 </Dropdown>
handleCoworkerChange = (event, {value}) => this.setState({coworker: coworkers[value]});
renderMenuItemCoworker = (coworker, index) => {         return {             key: index,             text: ${coworker.firstname || ''} ${coworker.lastname || ''},             value: index         };     };

Hi !
I used this solution, which has no dependency to lodash, but it could be too basic for your needs
<Dropdown
    placeholder="The coworker"
    fluid search selection
    value={coworkers.indexOf(this.state.coworker)}
    onChange={this.handleCoworkerChange}
    options={coworkers.map(this.renderMenuItemCoworker)}>
</Dropdown>

handleCoworkerChange = (event, {value}) => this.setState({coworker: coworkers[value]});
renderMenuItemCoworker = (coworker, index) => {
        return {
            key: index,
            text: `${coworker.firstname || ''} ${coworker.lastname || ''}`,
            value: index
        };
    };


How to get it to work?

Amazing plugin! But...

I set this up. It's not working at all, whatever I try to do, nothing happens. The only plugins I have enabled right now are: obsidian tasks, obsidian git and obsidian home. Screenshot is from the mobile, but it's not working on my Macbook too.
Also, what is "Cron Interval" exactly for?

Oh, of course unlocking the padlock is not helping.
What I didn't know is that I need to check the third button too and also wait a bit, as it's not running exactly at the time, but after ~10 seconds.
Still didn't manage to make it work on MacBook, I'll look into that later today.

Ok, I don't know why, but it started working on my macbook too. I will enable all other plugins, maybe some of them were messing with it before, I will let you know.
Still, it would be nice to know what is "Cron Interval" exactly for.

Hopefully that answers your question!

Yup, that explains a lot! Thanks!
I guess the problems I had might have been might have been connected to #2


docker file pip  sphinx package is old

I use mac run docker build, met
No matching distribution found for sphinx
You are using pip version 18.0, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The command '/bin/sh -c pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com     sphinx     sphinx-autobui

docker file pip package is old

The pip is upgraded in mace-dev-lite, and mace-dev is based on mace-dev-lite. So you can build mace-dev-lite firstly. Or pull images from ali docker hub as Mace docs saying.
Free free to reopen it.


Issues when dragging and things being stuck in your hand

Description

Had about 7-8 seperate people ahelp me over this issue over the course of 2 rounds. People are loosing use of their hand and relogging does not fix it. i also tried "resetent" and it didnt fix it either.
the bug seems to be when you are dragging something and someone drags you. or possibly two people dragging the same thing as well. examples i saw were doctors dragging bodies and janitors pulling their janicarts. Effects were that they lost use of one of their hands and i could not seem to find anything in their hand on my end.
Reproduction

unsure as to how to reproduce at the moment. i asked the reporters to describe the situations at the time of the bug happening and these are the ones that might be useful
Screenshots

Additional context

dupe of #24900


[Feature] Dispatch resource within a component sequentially

Is your feature request related to a problem? Please describe.
In our scenario, we define several traits to generate Custom Resource for completing specific tasks.

In some cases, trait-A need to dispatch before trait-B and workload.
In k8s's case, when we modify pod parameter and configmap parameter, the cm should be dispatched before deployment.
So, the ability that dispatch resource within a component sequentially is necessary.

Describe alternatives you've considered
We want to add a field inOrder align with dependsOn, and serially dispatch resource between steps and dispatch resource within steps in parallel.
There is an example for inOrder as follows
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: fourierapp03
  namespace: fourier
spec:
  components:
    - name: fourierapp03-comp-01
      type: webservice
      inOrder:
        - step:
            - config
        - step:
            - workload
            - cpuscaler
      properties:
        image: nginx:latest
        ports:
          - expose: true
            port: 80
            protocol: TCP
        imagePullPolicy: IfNotPresent
      traits:
        - type: cpuscaler
          properties:
            min: 1
            max: 10
        - type: config
          properties:
            refConfigs:
              - name: fourierapp03-comp-01
                encrypt: false
                mountPath: /mount/test/cm/tomcat.yaml

  policies:
    - name: fourierapp03-comp-01
      type: topology
      properties:
        clusters: [ "local" ]
        namespace: fourier01

  workflow:
    steps:
      - name: step-group
        type: step-group
        subSteps:
          - name: fourierapp03-deploy-01
            type: deploy
            properties:
              policies: [ "fourierapp03-comp-01" ]

Some traits do not have outputs. Without considering the dependencies between traits, whether it is possible to consider adding attributes at the trait level to complete such scenario, which mainly implements the priority of outputs.

How should this attribute be defined? Can you describe it in detail or give an example？ @ZhongsJie96

IMO, placing step (or inOrder) in component part is very aggressive. It is mixing the workflow and component parts. I know there are scenarios need the feature since I was also dealing it before. The proposed spec, though seems to be able to solve this problem, is relatively controversial and confusing.
We have steps in workflow and now we even have the powerful and amazing subSteps feature, users are capable of making arbitrary orders and parallelism for resources to dispatch. For example, moving the ConfigMap to another component, let it be the dependent of the webservice, the cm trait in the webservice should only be used for mounting here.

Discussion
I think before we move on to how to implement this feature or what the spec should be like, we should make it clear what component in KubeVela application means. Is it designed for DESCRIBING THE RESOURCE DISPATCH PROCESS? As far as I see, the component part is more of a description for the desired state, instead of explaining how should we manipulate the resources directly. The dispatch process should be fully controlled by the workflow.

BTW, the field of dependsOn is not directly used for controlling the dispatch order, it is describing the relationship between components, which is the abstraction part, not the implementation part. There are many ways to implement the "dependsOn" relationships, such as explicit ordered execution or implicit conditional waiting.
Actually, I am not against with adding more information into the component section, but it should be more meaningful, not just for a single special case. I think sometimes it might be helpful if we step back and review the KubeVela application from a larger scope, rather than just treating it as a collection of Kubernetes resources and the other things are all about how to dispatching or recycling them. Let's think what a Serverless Application would be like in the future? What will user imagine Application should be like, when they do not have knowledge for Kubernetes?

From this point, what does user want when they attach a config trait to the webservice component? Is it always the case that webservice should always be aware of the config updates when the application is updated? If true, I would recommend to move this order information into the spec of TraitDefinition, for example, give a field like preApply: true to the config trait. If user want to customize the order, let them use the workflow since that's workflow exists for.
Updates
Adding "dependencies" between traits, proposed by @ZhongsJie96 , looks more reasonable to me.
Conclusion
@fourierr Generally, this is a good issue. Thanks for the recording! The proposed solution is a good try.

Got it, at the beginning, I wanted to find a way to cover more scenarios. And just as you say, we actually only need to pre apply config trait. @Somefive

yeah, only dispatching Deployment after ConfigMap is not be enough for it，We solve this problem in two steps, with priority given to preapply.

another thing to address here is that when we say ConfigMap should be updated before Deployment is updated, it might be a bit tricky to determine if the ConfigMap has been updated, since we do not yet have the confirmation.

We're facing the same issue before like @Somefive mentioned. https://github.com/crossplane/oam-kubernetes-runtime/issues/222
In general, we need to pass the generation or version of application for every newly updated resource to determine whether they're updated.
Actually, even we have done this, it's still not enough for CRD controller, so Kubernetes community introduce the observedGeneration field in status to make sure the controller has reconciled well for the CR update.
For more details about observedGeneration, refer to: https://alenkacz.medium.com/kubernetes-operator-best-practices-implementing-observedgeneration-250728868792

For the solutions mentioned above, I can agree the solution:

add a field in traitdefinition to notify the deploy stage

The end user SHOULD NOT understand the Implementation detail about the deploy order just to make sure the configmap is updated before workload mounting it.
I quite agree with @Somefive that we MUST think what a Serverless Application would be like in the future to decide the interface of Application.

For the solutions mentioned above, I can agree the solution:

add a field in traitdefinition to notify the deploy stage

The end user SHOULD NOT understand the Implementation detail about the deploy order just to make sure the configmap is updated before workload mounting it.
I quite agree with @Somefive that we MUST think what a Serverless Application would be like in the future to decide the interface of Application.

According to add a field in traitdefinition, I will reorganize the implementation details.

another thing to address here is that when we say ConfigMap should be updated before Deployment is updated, it might be a bit tricky to determine if the ConfigMap has been updated, since we do not yet have the confirmation.

We're facing the same issue before like @Somefive mentioned. crossplane/oam-kubernetes-runtime#222
In general, we need to pass the generation or revision of application for every newly updated resource to determine whether they're updated.
Actually, even we have done this, it's still not enough for CRD controller, so Kubernetes community introduce the observedGeneration field in status to make sure the controller has reconciled well for the CR update.
For more details about observedGeneration, refer to: https://alenkacz.medium.com/kubernetes-operator-best-practices-implementing-observedgeneration-250728868792

Thanks a lot, the field observedGeneration is very useful for us  @ZhongsJie96

same with #3888

Thanks a lot, the field observedGeneration is very useful for us @ZhongsJie96

Yes, I need to learn more about observedGeneration later.


stats : reports: relations used

Could you update this list for us at some point?
28 | condition
1 | dependent_on
179 | during
3 | exists_during
119 | has_part
10 | has_regulation_target
113 | has_substrate
4 | independent_of
20 | localization_dependent_on
998 | localizes
8 | modified_by
5 | occurs_in
156 | part_of
16 | requires_feature
1 | requires_regulator
I wondered if I could access this within the curations tool.
I found the list of relations
http://oliver0.sysbiol.cam.ac.uk/pombe/view/object/cv/6?model=chado
but they are all "0"
Original comment by: ValWood

now included in chado logs


Exclude collection instances rather than hiding

Viewport-hidden collection instances still appear in renders, so it's better to exclude the collection instead to disable it from view.

This is a nice change. Thanks.


foreman doesn't respect commands with grep

$ gem list | grep foreman
foreman (0.46.0)
This works:
redislog: redis-cli MONITOR
(shows all traffic to redis)
This doesn't work:
redislog: redis-cli MONITOR | grep -v resque
(show all traffic to redis, grep out things from resque)
This doesn't work:
Procfile:
redislog: ./script/redis_log
script/redis_log:
#!/bin/bash
redis-cli MONITOR | grep -v resque
... so I believe this is some conflict between foreman and grep, or bash, or something.  Everything I remove grep everything is peachy.
Also, foreman otherwise rocks my face.  Thanks!

Writing a script doesn't help either.
in my Procfile
log: bash script/taillog.sh

In my bash script:
tail -f log/development.log | grep -v Moped

When I do "foreman start" my terminal emulator's title is "grep" and I see no log output :( - any ideas?


Helium cannot launch chrome inside AWS lambda environment

Recently we moved our Selenium UI tests to AWS Lambda and for this we switched to a lighter version of headless chromium as the default chromium is not compatible with AWS lambda.
Now we wanted to use Helium for our existing tests. Though we wanted to run our tests in headless chromium, we are getting "cannot Import name FirefoxOptions" exception when we tried running our tests with Helium inside AWS Lambda environment.
Please find screenshot with logs for the same.

I don't know; Which version of Selenium do you have installed?

These are the packages we are using.
apipkg==1.5
attrs==19.3.0
beautifulsoup4==4.8.2
bs4==0.0.1
certifi==2019.11.28
chardet==3.0.4
ddt==1.3.0
execnet==1.7.1
Faker==4.0.1
flaky==3.6.1
idna==2.9
importlib-metadata==1.5.0
more-itertools==8.2.0
packaging==20.3
pluggy==0.13.1
py==1.8.1
PyHamcrest==2.0.2
pyparsing==2.4.6
pytest==5.3.4
pytest-base-url==1.4.1
pytest-forked==1.1.3
pytest-html==1.16.0
pytest-metadata==1.8.0
pytest-ordering==0.6
pytest-sugar==0.9.2
pytest-xdist==1.31.0
python-dateutil==2.8.1
PyYAML==5.3
pyyml==0.0.2
requests==2.23.0
selenium==2.37.0
six==1.14.0
soupsieve==2.0
termcolor==1.1.0
text-unidecode==1.3
urllib3==1.25.8
wcwidth==0.1.8
xmltodict==0.12.0
zipp==3.1.0
lambda-git
webdriver_manager

Helium requires Selenium 3.141.0.

You are right. I was using an older version. But even after switching to Selenium 3.141.0, Helium says unable to find chrome binary. I want to bring this to your notice that for AWS lambda purpose, we are using light weight modified chrome binary executable which is available inside /opt directory of AWS lambda environment. Without Helium, selenium webriver is able to find this chrome binary but Helium isn't. Could you please help me?
TIA

I'm sorry I'm unable to provide help with such specific requests for free. Would you be open to paying for my help on an hourly basis?

Sorry, it's not my personal request. Many other engineers who are running their tests inside AWS Lambda will face the same issue and they cant use Helium in that case.

Then you or they should submit a Pull Request to Helium. I will not work for you for free, sorry. I get too many requests every week from people who want me to do just that. From Helium's README:

I have too little spare time to maintain this project for free. If you'd like my help, please go to my web site to ask about my consulting rates. Otherwise, unless it is very easy for me, I will usually not respond to emails or issues on the issue tracker. I will however accept and merge PRs. So if you add some functionality to Helium that may be useful for others, do share it with us by creating a Pull Request.


Fix error in callback handling

Hey!
I found that the code handling the babel transformation, which is basically the key of the plugin might be flawed.
In the original code:
// snippet from line :19
babel.transform(contents, babelOptions, (error, result) => {
  if (error) throw error;
  contents = result.code;
});

return { contents };

This original code would return before the callback would be ever fired, unless the implementation for babel.transform does call the callback synchronously, which I believe it's not doing.
Fixing this locally also unblocked my babel compilation step, so I think it might be a valid fix.
Please check my PR for a suggestion on fixing.

Thanks! I merged most of it in 0.2.1.
I added await to the returns.
The else is unnecessary since there's a return.

I'm well aware that else are not mandatory, but I consider it a good practise, it makes code a bit more readable compared to single line ternaries.
Also, "awaiting" promises before returning is also unnecessary. Async functions can return values or promises, any promise returned would be resolved before the next handler is called.

I don't agree that else is more readable. I can understand for ternaries though.
Thanks for the await tip, I'll remove them.


Update atmos vendor pull

what

Update atmos vendor pull

why

Allow using absolute and relative file paths in component.yaml when vendoring mixins. This will allow having mixins in a local folder (and not in a private GitHub repo for which you'll have to use a GitHub token or other means to authenticate)

  # mixins override files from 'source' with the same 'filename' (e.g. 'context.tf' will override 'context.tf' from the 'source')
  # mixins are processed in the order they are declared in the list
  mixins:
    # Mixins 'uri' supports the following protocols: local files (absolute and relative paths), Git, Mercurial, HTTP, HTTPS, Amazon S3, Google GCP
    # This mixin `uri` is relative to the current `vpc-flow-logs-bucket` folder
    - uri: ../../mixins/context.tf
      filename: context.tf
    - uri: https://raw.githubusercontent.com/cloudposse/terraform-aws-components/{{.Version}}/modules/datadog-agent/introspection.mixin.tf
      version: 0.196.1
      filename: introspection.mixin.tf

related

Closes https://github.com/cloudposse/atmos/issues/185

@aknysh awesome turn around time from me raising this issue in #185 -- Thanks!


Serialization source gen. and property renames

This PR contains two serialization related changes:

Use idiomatic naming for properties and set the JSON explicitly using an attribute
Use source generation to serialize the responses which should:

show up to 40% or more startup time reduction, private memory reduction, throughput speed increase

In a future PR I might also have a look at the nested serialization in the Payload property, if that makes sense (if we'll encrypt it won't).

Use source gen

Awesome!

Use idiomatic naming

Do you know if the source gen then removes the slight perf hit around serializing/deserializing with mismatch casing? Honestly, though I just prefer "what you see is what you get" to messing around with options. Years of spending too much time going down NewtonSoft config means I am ok with my DTO looking exactly like the data it is transferring :) Not a strong preference though so if you can confirm there is no perf hit for the case change and attribute reflection (its all compile time now) then 👍 It is not something I have looked into a bunch.
This change did remind me that the _link was a pointer at HAL media type so I think we should commit to this and:

use application/hal+json instead of application/json
have _links: { next: { href='http...'} } at the least. This would allow HAL clients to consume and so less pressure to provide clients
although tail makes sense describing what is happening with the events, from a resource perspective I wonder if link actions named like so make more sense from the consumer point of view: info, first, previous, self, next?

@Grepsy Thanks for the PR!
2 points, the rest are just highlighting my point of view.

Does the generated code nullify the perf hit taken for mismatched casing?
Can we pull out a Serialize method that requires the context since it is required for correct functioning I don't want to use an optional parameter directly... prob makes more sense in the context so see comment ☝

Thanks for the review and pointers!
I see your point about the decreased readability of the DTOs. My main reason for making the property-names conform to standard C# was because it was my impression we'd also be using these on the consumer side and exposing them to the application. Thinking as a consumer of this library I'd be annoyed when I have to work with ._links._tail public props :-) I think it's ok if they are purely internal to the producer (although it would still not be my preference).
One thing to note is the FeedEvent type though, which without any case-conversion is serialized as-is in PascalCase. This was the only reason the serializerOptions are needed. Without this change the response looks like this, which is mixing _this, camelCase and PascalCase. I'd like to propose to change the PascalCase to camelCase. I'll try and find the least intrusive way to do it so we can see whether that could work. Initial thought is adding extension methods that make sure the source generated overloads are always correctly used.
I can rename the properties to conform to HAL which should also help (only the _links uses the underscore). There also this standard we might consider instead of HAL because it includes paging and paging-metadata which seems to fit our usecase nicely.
{
            "EventId": "a2aff82b-f578-467a-a8f2-a1dde56d9c6b",
            "EventName": "test-event",
            ...
        }
    ],
    "_links": {
        "_meta": "/api/event-feed",
        "_head": "/api/event-feed/page/1",
        "_previous": "",
        "_self": "/api/event-feed/page/1",
        "_next": "/api/event-feed/page/2",
        "_tail": "/api/event-feed/page/2"
    },
    "isComplete": true
}


Jitsi/WebRTC on Safari

https://github.com/jitsi/jitsi-meet/issues/2000#issuecomment-600286721

Currently using WebRTC directly, seems to work on Safari so far

Sample implementation: https://github.com/holtwick/peer2school/blob/master/src/components/app-jitsi.vue


changed documentation of usb-c molex connector

added molex docmentation(https://www.molex.com/pdm_docs/ps/1054440001-000.pdf) as Kicad pointed before to a list of generic usb connectors from the usb foundation.

Hi, it seems this pull request contains a number of temporary files and other files that aren't related to the proposed change.  Could you adjust the request to only contain the files that need to be modified?

I will do it tomorow, i currently don't have access to a computer

It should now have been cleaned, feel fre to ask me to change anything else again.

Hi, the remaining changelist doesn't seem to have changes related to the USB-C connector.

the problem is that I use Kicad 6, which saves the schematic in .kicad_sch. Since Kicad 6 has reach EOL and is replaced by Kicad 7, it could be great that you switch from Kicad 5 to Kicad 6.


Start ComfyUI after installation

This issue is for #2
When clicking on the "Install ComfyUI" button, in the ComfyUI tab when the install location isn't set up yet, ComfyUI doesn't show up even though it clearly started in the console:

Instead of starting the ComfyUI, the user should simply be asked to restart the webui.


Flyin Donut: Pause button

With the PR for Tiltrads' pause button, that just leaves Flyin' Donut as the only game that could make use of a pause button but currently doesn't have one

Not planning on doing this at this time.  But def can next year.

That's fine. All post-release tickets are totally optional. If we fly again next year, I'm going to require a new map.


Don't work NavMesh

Godot version:
3.2 beta1 | 3.1.1 stable
OS/device including version:
Windows 10
Issue description:
Don’t work bake, no matter how I try, it does not work and does not view in the editor. And also the projects that are in the demo do not work if you repeatedly press the bake.
Steps to reproduce:
Download "Navmesh Demo" press bake, and play this - don't work(
Minimal reproduction project:
Nav.zip

NavMesh demo has incorrect set up for baking, don't use it.
Just put all your MeshInstance under NavigationMesh node, and make sure all NavigationMesh nodes are under navigation node, that should work. Also group-based mesh selection was added to master branch, try to use that one for better flexibility or wait for 3.2 release.

NavMesh demo has incorrect set up for baking, don't use it.
Just put all your MeshInstance under NavigationMesh node, and make sure all NavigationMesh nodes are under navigation node, that should work. Also group-based mesh selection was added to master branch, try to use that one for better flexibility or wait for 3.2 release.

I tried, but it failed.
I changed everything and twisted the nodes to achieve the result.
I would not write this issue if everything was so simple.

Please check with 3.2 if that still have your issue.
On Wed, Nov 20, 2019 at 9:14 PM Hromon<EMAIL_ADDRESS>wrote:

NavMesh demo has incorrect set up for baking, don't use it.
Just put all your MeshInstance under NavigationMesh node, and make sure
all NavigationMesh nodes are under navigation node, that should work. Also
group-based mesh selection was added to master branch, try to use that one
for better flexibility or wait for 3.2 release.
I tried, but it failed.
I changed everything and twisted the nodes to achieve the result.
I would not write this issue if everything was so simple.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/33746?email_source=notifications&email_token=AAABPU6LQEJSSHUAYHFTEH3QUV5ABA5CNFSM4JPIBDR2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEETOBLQ#issuecomment-556196014,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAABPU7FGL5LE7GUK7STINLQUV5ABANCNFSM4JPIBDRQ
.

Please check with 3.2 if that still have your issue.

I had to delete all the AppData content that belonged to Godot, and it worked on 3.2


quickmaps navigation updates

quickmaps sub-router implemented
routerlinks updated to include query params
sidenav styling tweaked
e2e tests updated

Passes e2e tests local but fails on server.
May be to do with difference between prod and dev builds.
Will try to fix on Monday :-)

Managed to get the e2e tests to fail locally now, so will try to get that fixed...

Woop woop, tests pass!

🥇