save()需要条件，默认不是使用id作为查询条件，没有就创建吗？

Your Question
save()需要条件，默认不是使用id作为查询条件，没有就创建吗？Model不应该是选择模型/表，不参与查询吗？
##实例代码
var user model.User
db := gorm.DB.Model(&model.User{}).WithContext(ctx)
if result := db.Where(&model.User{Id:1}).First(&user); result.RowsAffected == 1 {
        user.num++
}
// 如果这里使用gorm.DB的话没问题，但是本人偏向于gorm.DB.Model(&model.User{}).WithContext(ctx)方式，所以是这属于bug?
// 还是使用不当？
if err := db.Save(&user).Error;err != nil{
     panic(err)   //  这里会报错
}

db.Save(&user).Error  后面要加Error才会提交事务

db.Save(&user).Error 后面要加Error才会提交事务

提问忘记加.Error，而且这不是事务，你可以运行改代码

https://github.com/go-gorm/gorm/blob/877cc9148f95552f51891d45d588af799033ceb8/callbacks/update.go#L15-L16.
If you use DB.Model(&User{}).Save(&user),  db.Statement.Model is &User{}, db.Statement.Dest is &user,
so db.Statement.Model != db.Statement.Dest and ReflectValue get value from db.Statement.Mode
https://github.com/go-gorm/gorm/blob/877cc9148f95552f51891d45d588af799033ceb8/callbacks/update.go#L183-L185
The WHERE conditions is build from ReflectValue so it's empty.
It's probably not a bug but a feature about Association.(I'm not sure).
So I suggest you use DB.Save(&user) instead of DB.Model(&User{}).Save(&user)

https://github.com/go-gorm/gorm/blob/877cc9148f95552f51891d45d588af799033ceb8/callbacks/update.go#L15-L16
.
If you use DB.Model(&User{}).Save(&user), db.Statement.Model is &User{}, db.Statement.Dest is &user,
so db.Statement.Model != db.Statement.Dest and ReflectValue get value from db.Statement.Mode
https://github.com/go-gorm/gorm/blob/877cc9148f95552f51891d45d588af799033ceb8/callbacks/update.go#L183-L185
The WHERE conditions is build from ReflectValue so it's empty.
It's probably not a bug but a feature about Association.(I'm not sure). So I suggest you use DB.Save(&user) instead of DB.Model(&User{}).Save(&user)

使用DB.Save(&user)的确没有问题，但是本人更偏向于DB.Model(&model.User{}).Save(&user)写法，所以这个算bug还是？因为Model不应该是选择模型/表，不参与查询吗?

Probably not a bug, see this test case.
https://github.com/go-gorm/gorm/blob/877cc9148f95552f51891d45d588af799033ceb8/tests/update_test.go#L543-L557

Maybe we should document this

Probably not a bug, see this test case.
https://github.com/go-gorm/gorm/blob/877cc9148f95552f51891d45d588af799033ceb8/tests/update_test.go#L543-L557

我一直把Model()当Table()使用，也许不应该这样使用吧

Maybe we should document this

Are you interested in creating a PR for it?

Maybe we should document this

Are you interested in creating a PR for it?

It's a little confusing here.
// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Save(&User{Name: "jinzhu"})

// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Model(&User{ID: 1}).Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Model(&User{ID: 1}).Save(&User{Name: "jinzhu"}) // but dest primary key is nil,  insert

Maybe we should discuss what kind of behavior is right...

Maybe we should document this

Are you interested in creating a PR for it?

It's a little confusing here.
// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Save(&User{Name: "jinzhu"})

// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Model(&User{ID: 1}).Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Model(&User{ID: 1}).Save(&User{Name: "jinzhu"}) // but dest primary key is nil,  insert

Maybe we should discuss what kind of behavior is right...

确实，gorm的写法太多了

Maybe we should document this

Are you interested in creating a PR for it?

It's a little confusing here.
// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Save(&User{Name: "jinzhu"})

// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Model(&User{ID: 1}).Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Model(&User{ID: 1}).Save(&User{Name: "jinzhu"}) // but dest primary key is nil,  insert

Maybe we should discuss what kind of behavior is right...

When save value does not contain primary key, it will automatically execute Create. It cannot be used with Model. Model is mainly used to specify table and where conditions, but save is a combination function, it will be difficult to understand if you add where conditions to the insert statement, so I think there are reasons why model is not allowed.
Of course, the above does not discuss the different structures of model and dest, just like create or update, so this may be a feature, but before implementing it, we may need to remind users through documentation.
https://github.com/go-gorm/gorm/blob/master/finisher_api.go#L88

Maybe we should document this

Are you interested in creating a PR for it?

It's a little confusing here.
// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Save(&User{Name: "jinzhu"})

// UPDATE `users` SET `name`="jinzhu" WHERE `id` = 1
db.Model(&User{ID: 1}).Save(&User{ID: 1, Name: "jinzhu"})

// INSERT INTO `users` (`name`) VALUES ("jinzhu")
db.Model(&User{ID: 1}).Save(&User{Name: "jinzhu"}) // but dest primary key is nil,  insert

Maybe we should discuss what kind of behavior is right...

确实，gorm的写法太多了

api设计混乱


Add package.xml for ROS2

Hi, thank you for this awesome library.
I would like to use this library in the ROS2 ecosystem and therefore would like to have a package.xml with some metadata. This allows colcon to build this package as part of a bigger workspace.

Hi @Rayman,
Thanks for the pull-request and sorry for taking my time in responding.
I am not strictly against this change, but would like to learn more about ROS2 and how other projects do this before merging this in.
If you have any other examples of open source projects that include that in their repo, it could be helpful.
If not, give me a few days to look it over and get back to you.

A few examples I could find:

c++ utilities for enums: https://github.com/Neargye/magic_enum/blob/master/package.xml
math library: https://github.com/clalancette/sophus/blob/release/1.22.x/package.xml
trajectory optimization: https://github.com/ros-industrial/stomp/blob/main/package.xml
can dbc parser: https://github.com/nobleo/raptor-dbw-ros2/blob/foxy/can_dbc_parser/package.xml

Once a package has a package.xml, it can be released to the buildfarm and debian packages are generated for all available platforms. This allows robotics developers to use these libraries more easily: https://repo.ros2.org/status_page/compare_humble_iron_jazzy.html

Thank you for the information @Rayman .
I've checked around, and I'm happy to add the package.xml file to the repo.
Could you please update the version inside the file to v0.10.0 please, so that I can approve the PR?


CFEP-18: Remove static libraries from main build

This removes the static libraries from the main package according to CFEP-18. This might break some downstream builds but this is intended and we should fix the downstream builds to use the shared libraries before adding an output here.

Checklist

[x] Used a fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[ ] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[ ] Ensured the license file is being packaged.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@conda-forge-admin please rerender

@conda-forge-admin please rerender


Laford encapsulate logging

Re-initiating and fixing issues.

Once logging is encapsulated, ALL logs in the system can be either turned off or redirected to a custom logging system.

e.g. logs can be automatically turned on for non prod builds and removed otherwise using a build system configuration.

Using this we can safely add as many logs as we want without worrying about it getting to prod


Concrete5 Kint plugin

I made a Kint add-on for Concrete5 : http://www.concrete5.org/marketplace/addons/kint-debug
You can add it to your list, if you want.
Kint is awesome :+1:

Since there's pretty much nothing out there that supports kint 2.0 at this time, I'm closing the third-party-plugin documentation issues.
I probably won't add the list back until there are a decent few to list too.


Patch com.snowplowanalytics.snowplow/mobile_context/jsonschema/1-0-2 (close #1197)

Patches mobile_context schema to increase the max limit for the appAvailableMemory property. It was set too low and some devices (new iPad Pros) already cross the 4GB threshold. Increasing it to match max values for other memory properties.

Thanks for your pull request. Is this your first contribution to a Snowplow open source project? Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).
:memo: Please visit https://docs.snowplowanalytics.com/docs/contributing/contributor-license-agreement/ to learn more and sign.
Once you've signed, please reply here (e.g. I signed it!) and we'll verify. Thanks.


Move Apache.Groovy.2.5 2.5.9 to Apache.Groovy.2 2.5.9

Microsoft Reviewers: Open in CodeFlow

Assuming the move is simply moving and not updating
[Policy] Reset Labels

Automatic Validation ended with:

Executable C:\Windows\SysWOW64\cmd.exe returned exit code: 1

(Automated response - build 881.)


⚠ sandbox-api.piste.gouv.fr healthcheck has degraded performance

In 66e8b26, sandbox-api.piste.gouv.fr healthcheck (https://sandbox-api.piste.gouv.fr/cassation/judilibre/v1.0/healthcheck) experienced degraded performance:

HTTP code: 200
Response time: 2608 ms

Resolved: sandbox-api.piste.gouv.fr healthcheck performance has improved in a2d2827.


Filter a single feed for a specific title

I want use lkml rss feed to monitor all replies containing a specific title but after reading through 5.7 Query feeds in the docs I can't understand it. What should the correct syntax be to only show posts containing the title "Linux 5.9-rc3" from the rss?
I tried
https://lkml.org/rss.php "lkml"
"query:only interest:tags =~ \"lkml\" and ( title =~ \"Linux 5.9-rc3\" )" "lkml"

That gave all entries for lkml.org and none for what I want to see. I only want to see the filtered results and not the main lkml feed.

Your query looks fine to me, but I can't confirm that it works because:

the feed no longer contains any items with "Linux 5-9-rc3" in the title;
a query "query:only interest:tags =~ \"lkml\" and ( title =~ \"media: vivid: \" )" "lkml" shows 7 items both on current master (https://github.com/newsboat/newsboat/commit/e0e76c34bf3713a9e3c94d97c388120c31ad76b3) and 2.12 release.

Can you try my query and tell me what results you get?
Also, can you tell me what Newsboat version you're running, and show your config file? I guessed 2.12 because of the docs link, but really, you should have just filled out the issue template, which asks for that info.

@msilletti, note that colons inside double quotes might not work. I fixed that in #1170, but if you're running an earlier version, you might need to rephrase your filter expression to avoid that.

@Minoru - I built it from your master branch today so it is current. I did your suggestion and it works.
https://lkml.org/rss.php "lkml"
"query:only interest:tags =~ \"lkml\" and ( title =~ \"arm64\" )" "lkml"

Is there a syntax to combine the two lines into 1 line? The effect is I get a feed for the entire lkml.org and my filter. I don't want to see the entire lkml.org if this is possible?
   1 N   (101/101) lkml.org
   2 N       (3/3) only interest

Many thanks to you!

You might be able to hide the first feed by adding a "hiding tag" (e.g. adding "!" as a tag to the end of the lkml.org line).
https://lkml.org/rss.php "lkml" "!"
"query:only interest:tags =~ \"lkml\" and ( title =~ \"arm64\" )" "lkml"

A few things to note:

By hiding the feed, you cannot access it so you can only reload it by pressing R (= reload-all)
The ! tag might show up in the selecttag dialog (related to https://github.com/newsboat/newsboat/issues/500)

Since the bug is not reproducible with current version of Newsboat, and the other question is answered, I'm closing this.


Include the article: Dockerizing Flask With Compose and Machine - From Localhost to the Cloud

Nice one.Thanks!


Add support for Titan protocol to upload data

Uploading a larger amount of data to a server is sometimes useful, but the Gemini protocol doesn't directly support it. Another protocol such as Titan could be used for this purposes.
It could work like this:

When clicking on a titan:// URL, show a file selection dialog. Initially this could be done via drag-and-drop since native file open dialogs are not supported yet.
Open the connection and write the URL and data.
Show a progress bar in the UI until the data has been uploaded.

Another use case is uploading a new version of a page. In this case, there may be no titan:// link provided, but instead the current URL's gemini scheme is changed to titan. The client has no way to know whether a particular server/URL supports Titan uploads, but maybe just providing a menu item to attempt the upload on any Gemini URL would be sufficient, letting the user figure out when it's appropriate.
Open question: Is there any response sent by the server to know what happens after the upload? A redirect to a new URL? Reload the page where the titan:// URL was clicked on? One option is to just sit at the "100% completed" state until the user navigates to a different page.
For reference:

https://communitywiki.org/wiki/Titan
https://alexschroeder.ch/cgit/gemini-titan/about/

@Armen138 That is correct. Titan is basically just Gemini plus a user payload and a couple of URL parameters with specific semantics.

Titan uploads have been implemented for v1.6, where you upload text or files for any URL, or by clicking on a titan:// link.


CI Update

Summary
Describe your changes here.
Fixes #Issue_Number (if available)

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: Out4Land sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.

This is not a valid PR. That branch is for testing purposes for our markdig migration.


CPLP-1470 refactor owncompany search

https://jira.catena-x.net/browse/CPLP-1470

@qxz2mqe somehow in the pr's phil is not added as reviewer. Please always add Philip


Implement Mopidy v0.20 get_distinct API

https://github.com/mopidy/mopidy/pull/1022

Maybe it's OK if initial version does not support queries with get_distinct()...

Basing this on the search view should make handling queries quite easy. May impact performance, but probably still a huge improvement compared to the old handling of MPD list in Mopidy.


Support forecast tasks in profile API; enable index field modifications

Description
This PR adds support for forecast task targets in profile API and enables modification of categorical and custom result index fields

Support forecast task targets in profile API: Previously, the profile API returned empty results for forecast task targets. This update adds support for them. For details, refer to ForecastTaskProfileRunner.
Allow modification of categorical and custom result index fields in forecasting: These fields are not editable in Anomaly Detection (AD). Implemented a lastUiBreakingChangeTime field in the config index to manage changes. Whenever the categorical or custom result index fields are updated, lastUiBreakingChangeTime is refreshed. The UI will not display results before this time to prevent inconsistencies. For details, refer to Config and AbstractTimeSeriesActionHandler.

Testing Done:

Added ITs for both scenarios.

Check List

[X] New functionality includes testing.
[X] New functionality has been documented.
[X] API changes companion pull request created.
[X] Commits are signed per the DCO using --signoff.
[X] Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@yuye-aws backporting to 2.x, won't do it for 2.17:  https://github.com/opensearch-project/anomaly-detection/pull/1319


What was the problem with the old repository ?

What was the problem with the old repository ?
https://github.com/artur9010/lightdm-webkit-material-old

Old repository has "fork status".


Travis cache MulticoreBSP

Travis might need to cache the MulticoreBSP download file, as the website it is downloaded from is not too reliable.

We'll see how this goes with the final project first - this might not be a problem in practice.


Fixed typo: Node-Oject vs. Node-Objekt

Fixes a typo/translation error.

/assign @rlenferink

/lgtm /approve
thank you, for fixing this up!

Seems that tide didn’t pick up the lgtm / approve.
Echoing to retry:
/lgtm
/approve


Activation of the new webhook logic

Description
This PR activates the new webhook logic. When a pod is deployed in a namespace enabled for the liqo offloading, the liqo toleration and the right node selector are added to the pod according to the PodOffloadingStrategy specified in the NamespaceOffloading resource.
Ref. #572

/ok-to-test


ProgressBar rename stringPainted function to StatusTextVisible or something similar to avoid confusion

this issue is fixed: https://github.com/DwcJava/engine/tree/issue-195


gtk3: fix Darwin build

Update: this works now, no longer WIP
This is a work in progress effort to fix the gtk3 build on Darwin.
I'm currently encountering the following build error:
Undefined symbols for architecture x86_64:
  "_libintl_bind_textdomain_codeset", referenced from:
      _main in updateiconcache.o
  "_libintl_bindtextdomain", referenced from:
      _main in updateiconcache.o
  "_libintl_gettext", referenced from:
      _main in updateiconcache.o
  "_libintl_setlocale", referenced from:
      _main in updateiconcache.o
ld: symbol(s) not found for architecture x86_64

@spwhitt that means you probably need to either add libintlOrNull to the build-inputs, or explicitly add -lintl to NIX_LDFLAGS.

@gridaphobe Already tried libintOrNull, no luck. Also FYI libintOrNull is actually a synonym for gettext, which is already a build input. I'll try the other suggestion and report back in a minute. Thanks!

Ah I didn't see gettext in the build-inputs, guess it must be propagated from somewhere else.

Well that suggestion worked beautifully. Thanks a bunch @gridaphobe, it builds now!

Updated PR

Excellent, travis agrees :)


Filter

Current coverage is 35.30% (diff: 100%)

Merging #81 into develop will increase coverage by 0.01%

@@            develop        #81   diff @@
==========================================
  Files           310        310
  Lines         16874      16874
  Methods           0          0
  Messages          0          0
  Branches       2927       2927
==========================================
+ Hits           5955       5957     +2
+ Misses        10016      10014     -2
  Partials        903        903

Powered by Codecov. Last update 847193c...a111397


[Design] JS Editor Snippet Design

Internal design discussion document - https://www.notion.so/appsmith/JS-Snippets-9ac1dcbc234f4f448bcf023f17c5c557


Pool tab not updating when changing account

When you are in add/remove liquidity screen and you change your account the values don't update. When you go back to main pool tab  the data is still from the old account.
Also, because of this, when you remove all your liquidity you can still see the Remove button

Check if this isn't already fixed with the latest merged PRs

checked with current v4 branch, problem is the interval fetching.  But the interval kicking in leads to fetching with former accountId and the old numbers are back.
Instead of hacking around with trying to clear interval and maybe split up user pool info and general pool info again, we might wanna check out urql and how its architecture could have a replacement for simple interval re-fetching which in turn would then remove this bug here.
Like:

https://formidable.com/open-source/urql/docs/advanced/retry-operations/
https://formidable.com/open-source/urql/docs/basics/ui-patterns/#reacting-to-focus-and-stale-time


Logging refactor

Removed outdated sasl config
Adding logging config for disk and console

Solves #376

There's also one -compile({parse_transform, lager_transform}). left in the single dc test clocksi_SUITE.


disable examples check

Please add a meaningful description for your change here

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Mention the appropriate issue in your description (for example: addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, comment fixes #<ISSUE NUMBER> instead.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

So there was a problem that the frontend integration tests compare the deployed examples' code and output to that in master branch. This is generally not the case, because the examples can be deployed from another branch before merging to master, or they can be merged to master and not deployed yet. We have seen the frontend tests failing many times for that reason.
This PR turns off expectations of specific code and output for examples by default, and that way the tests are triggered in the CI. Tests can be run manually with those expectations. This is explained in the updated README.

R: @pabloem


Add application/json header when sending json data.

I'm using Jenkins and SonarQube GitHub plugins with GitBucket.
GitBucket has GitHub-compatible API.
But it is not 100% compatible. This PR solves one of the differences between GitHub and GitBucket. And, it also solves header and body data format mismatch when sending json data.
in current version's Requester.java buildRequest sends json data with content-type: application/x-www-form-urlencoded.
This behavior is incorrect. data and header mismatch. Then, GitBucket was confused by how to handle data.
In GitHub API, GitHub parses this data as json (header content-type is ignored), but this behavior is not documented. In the future this behavior may change.
I think that it is better to accept this modification to avoid future problems.

In order to honor the content type set by the caller of Requester, I fixed this problem a little differently. The fix will be in 1.89


Closes: #1

Updated validations.py python script.
Fixed the behavior of validate_user function in validations.py.
Modefied regular expression
Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

Lab exercise to fix validations.py script


[performance-wip] (vectorization) Opt HashJoin Performance

Proposed changes
Issue Number: close #xxx
Problem summary
Describe your changes.
I hope to improve the performance of hashjoin by modifying the structure of the hash table
Checklist(Required)

Does it affect the original behavior:

[ ] Yes
[ ] No
[ ] I don't know

Has unit tests been added:

[ ] Yes
[ ] No
[ ] No Need

Has document been added or modified:

[ ] Yes
[ ] No
[ ] No Need

Does it need to update dependencies:

[ ] Yes
[ ] No

Are there any changes that cannot be rolled back:

[ ] Yes (If Yes, please explain WHY)
[ ] No

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

Is there any performance tests?

The code still needs to be modified, I will add performance tests later

TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 33.97 seconds
load time: 437 seconds
storage size:<PHONE_NUMBER>7 Bytes
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20221108124311_clickbench_pr_42079.html


implement sequence wrap-around

Packets have a sequence number, which indicates in which order they were sent from sender. This number is used on host to check if packet is old or new. So it the number goes from 1 to 2 ... 256. Then it should wrap around, and packet 2 should be considered newer than packet 240 for example. Figure the details out.


Improve the example for milliseconds.

For the milliseconds the format is SSS and the example is "1234". There's only three digits in the milliseconds, so a better example would be "123".

Nice catch, thanks for the fix!


[Activation] save hash and height for block store and finalized block

#1877 part 1 of step 4

done

@Aprogiena fixed

guard is not in this namespace. can't use in nbitcoin09.08.2018, 18:26, "Aprogiena" notifications@github.com:@Aprogiena commented on this pull request.
In src/NBitcoin/Block.cs:

     {

       if (hex == null)

           throw new ArgumentNullException(nameof(hex));

       if (bytes == null)

guards?
—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or mute the thread.


Extract query key roots to constants

Follow-up to https://github.com/bluesky-social/social-app/pull/3401 intended to avoid this problem by always using constants. We'd need to be disciplined about this. If we slip again, I'll write a lint rule, but I think this will do for now.
Test Plan
Careful read. Plus walked around the app.

Pushed https://github.com/bluesky-social/social-app/pull/3404/commits/37b92f73c983885c5bff3fc3fa2b5e1155124449 to dedupe a potential future misalignment.


Customize error/warning message in VSCode

I attempted to create customized ESLint popup messages in order to improve the user experience by providing clear and visually appealing feedback. In the current state of the VS Code ESLint extension, there is a limitation when it comes to customizing errors or warning messages generated by ESLint configurations. Often, there is a need for ESLint configs to provide user-friendly error messages to enhance the user experience.
Unfortunately, the way error messages are formatted and displayed in both the popup and Output panel of the VS Code ESLint extension hinders the customization options:

Line breaks disappearing: When attempting to implement a custom error solution where line breaks are included in the error message, the behavior is inconsistent. The line breaks do appear correctly in the Output panel, but the popup notification disappears, preventing users from seeing the detailed error message. I think this issue is related to the code handling error formatting here
Long paths with pnpm: Another challenge arises when using pnpm package manager. The inclusion of long paths at the beginning of the error message makes it difficult to read and understand the actual error

These issues restrict the ability to deliver clear and customizable error/warning messages, negatively impacting the user experience. It would be beneficial to have improved support for customization and enhanced visibility of error/warning messages within the VS Code ESLint extension.

I implemented a custom error class that extends the Error class. This allowed me to customize the error messages and achieve the desired outcome in the VSCode output panel, but the popup disappeared. Here is the code snippet I used to create a custom error class:
class MyError extends Error {
  constructor(message) {
    super();
    this._message = message;
  }

  get message() {
    return this._message;
  }

  set message(value) {
    this._message = value.replace(
      /Error:/,
      '\nError:',
    );
  }
}

The custom error class successfully modifies the error message in the output panel by adding an empty line before the "Error:" text. This modification was necessary because ESLint/eslntrc also adds a line break to the Error (Link: https://github.com/eslint/eslintrc/blob/66bc3bc32d0486de7ae5c426b0cfd90035478d4b/lib/config-array-factory.js#L234-L243). However, it seems that this customization causes the popup to disappear.
I suspect that the popup disappearance is related to the customization of the Error class and its expected behavior by the VS Code ESLint extension. I would appreciate any insights or suggestions on how to overcome this issue and achieve both a customized error message and a visible popup.

Have you tried to tweak the message generation here? I might not be necessary anymore to repleace new lines with ' '

@dbaeumer, I don't know what you mean by replacing new lines with ' '. I want to have an empty line before the error message to make the message more visible. For example, some customization, an empty line, and a red exclamation mark:

The problem I'm facing is that when I customize the error message and add an empty line, it appears in the output panel, but the popup notification disappears.

@ProchaLu Why doesn't a popup window show up when ESLint reports an error?

@13OnTheCode There is a popup window when ESLint reports an error, but not when you customize your error message

The custom error class successfully modifies the error message in the output panel by adding an empty line before the "Error:" text. This modification was necessary because ESLint/eslntrc also adds a line break to the Error (Link: https://github.com/eslint/eslintrc/blob/66bc3bc32d0486de7ae5c426b0cfd90035478d4b/lib/config-array-factory.js#L234-L243). However, it seems that this customization causes the popup to disappear.

I suspect that the popup disappearance is related to the customization of the Error class and its expected behavior by the VS Code ESLint extension. I would appreciate any insights or suggestions on how to overcome this issue and achieve both a customized error message and a visible popup.

@ProchaLu I got it, thanks for your work and answers.


python38Packages.ckcc-protocol: 1.0.3 -> 1.1.0

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for python38Packages.ckcc-protocol is: "Communicate with your Coldcard using Python"
meta.homepage for python38Packages.ckcc-protocol is: "https://github.com/Coldcard/ckcc-protocol"
meta.changelog for python38Packages.ckcc-protocol is: ""
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes
Impact

Checks done (click to expand)

built on NixOS

Warning: a test defined in passthru.tests did not pass

0 of 0 passed binary check by having a zero exit code.

0 of 0 passed binary check by having the new version present in output.

found 1.1.0 with grep in /nix/store/zp7jxkbw2xaqqyszqxwzlzqp1x86278s-python3.8-ckcc-protocol-1.1.0

directory tree listing: https://gist.github.com/0ae3fa975e6cdde6da9024b8c9a58d2a

du listing: https://gist.github.com/edd18ae4905d7a5a46af2a2b0e33582c

Rebuild report (if merged into master) (click to expand)

12 total rebuild path(s)

3 package rebuild(s)

3 x86_64-linux rebuild(s)
3 i686-linux rebuild(s)
3 x86_64-darwin rebuild(s)
3 aarch64-linux rebuild(s)

First fifty rebuilds by attrpath
electrum
python38Packages.ckcc-protocol
python39Packages.ckcc-protocol

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/zp7jxkbw2xaqqyszqxwzlzqp1x86278s-python3.8-ckcc-protocol-1.1.0 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A python38Packages.ckcc-protocol https://github.com/r-ryantm/nixpkgs/archive/505e963de8453bcb82856a45f6d8673746fbed6d.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/zp7jxkbw2xaqqyszqxwzlzqp1x86278s-python3.8-ckcc-protocol-1.1.0
ls -la /nix/store/zp7jxkbw2xaqqyszqxwzlzqp1x86278s-python3.8-ckcc-protocol-1.1.0/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

3 packages built:

electrum
python38Packages.ckcc-protocol
python39Packages.ckcc-protocol

Maintainer pings
cc @hkjn for testing.

Result of nixpkgs-review pr 116585 at 505e963d run on aarch64-linux 1

1 package skipped due to time constraints:

electrum

2 packages built successfully:

python38Packages.ckcc-protocol
python39Packages.ckcc-protocol

1 suggestion:

warning: unused-argument
Unused argument: pytest.
Near pkgs/development/python-modules/ckcc-protocol/default.nix:7:3:
  |
7 | , pytest
  |   ^

Result of nixpkgs-review pr 116585 run on x86_64-linux 1

3 packages built:

electrum
python38Packages.ckcc-protocol
python39Packages.ckcc-protocol


deleting a file during post-processing messes up the containing folder

Describe the bug
When a file gets deleted during the post-processing the whole folder can become unusable
Steps to reproduce
folder='ff'
file1='ff.txt'
file2='ff2.txt'
file3='ff3.txt'
# get the drive id
driveid=`curl -ku admin:admin https://host.docker.internal:9200/graph/v1.0/me/drives | jq -c '.[] | .[] | select(.driveAlias | contains("personal")) | .id' -r`

# create a folder
curl -ku admin:admin -XMKCOL 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder

# upload one file
curl -ku admin:admin -XPUT -d"content" 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder'/'$file1

# wait till the post-processing is done, check with:
curl -ku admin:admin -XPROPFIND 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder | xmllint --format -

# create, delete and overwrite the same file over and over again
for i in {1..1000}
do
    curl -ku admin:admin -XPUT -d"content" 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder'/'$file2
    curl -ku admin:admin -XDELETE 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder'/'$file2
    curl -ku admin:admin -XPUT -d"content" 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder'/'$file2
done

# upload a third file
curl -ku admin:admin -XPUT -d"content" 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder'/'$file3

# check the content of the folder
curl -ku admin:admin -XPROPFIND 'https://host.docker.internal:9200/dav/spaces/'$driveid'/'$folder | xmllint --format -

Expected behavior
ff2.txt and ff3.txt should be getting out of post-processing eventually
Actual behavior
ff2.txt and ff3.txt never finish post-processing
Setup
Please describe how you started the server and provide a list of relevant environment variables or configuration files.

POSTPROCESSING_DELAY=30s PROXY_ENABLE_BASIC_AUTH=true OCIS_INSECURE=true PROXY_HTTP_ADDR=<IP_ADDRESS>:9200 OCIS_URL=https://host.docker.internal:9200 PROXY_TRANSPORT_TLS_KEY=./ocis.pem PROXY_TRANSPORT_TLS_CERT=./ocis.crt ./ocis/bin/ocis server

Additional context
logs:
{"level":"error","service":"ocdav","name":"com.owncloud.web.ocdav","traceid":"00000000000000000000000000000000","request-id":"deepthought3/Mvoj78s77G-002127","spaceid":"e4d3bb66-6f2d-455c-9ebc-e518e89d3c06$00364da3-abb6-47d0-8002-6cd66ed6eea5","path":"/ff/ff2.txt","error":"Put \"https://host.docker.internal:9200/data\": context canceled","time":"2023-12-07T17:36:02+05:45","message":"error doing PUT request to data service"}
2023/12/07 17:36:02 http: proxy error: context canceled
{"level":"error","service":"frontend","pkg":"rhttp","traceid":"00000000000000000000000000000000","request-id":"deepthought3/Mvoj78s77G-002129","error":"Put \"http://localhost:9158/data/simple/47d1ecc3-888a-4ef7-a159-bbf9f99ca9f9\": context canceled","time":"2023-12-07T17:36:02+05:45","message":"error doing PUT request to data service"}
{"level":"error","service":"frontend","pkg":"rhttp","traceid":"00000000000000000000000000000000","host":"<IP_ADDRESS>","method":"PUT","uri":"/data","url":"/","proto":"HTTP/1.1","status":500,"size":0,"start":"07/Dec/2023:17:36:02 +0545","end":"07/Dec/2023:17:36:02 +0545","time_ns":231887,"time":"2023-12-07T17:36:02+05:45","message":"http"}
{"level":"error","error":"failed to upload file to blobstore: could not open blob '/home/artur/.ocis/storage/users/spaces/00/364da3-abb6-47d0-8002-6cd66ed6eea5/blobs' for writing: open /home/artur/.ocis/storage/users/spaces/00/364da3-abb6-47d0-8002-6cd66ed6eea5/blobs: is a directory","uploadID":"0645d53a-355c-4aca-9cb5-2177d11c582e","time":"2023-12-07T17:36:02+05:45","message":"could not finalize upload"}
{"level":"error","error":"decomposedfs: root has no parent","uploadID":"0645d53a-355c-4aca-9cb5-2177d11c582e","time":"2023-12-07T17:36:02+05:45","message":"could not propagate tree size change"}
{"level":"error","error":"failed to upload file to blobstore: could not open blob '/home/artur/.ocis/storage/users/spaces/00/364da3-abb6-47d0-8002-6cd66ed6eea5/blobs' for writing: open /home/artur/.ocis/storage/users/spaces/00/364da3-abb6-47d0-8002-6cd66ed6eea5/blobs: is a directory","uploadID":"1d13ffb8-24bf-4fdd-b321-d5c774fcf353","time":"2023-12-07T17:36:32+05:45","message":"could not finalize upload"}
{"level":"error","error":"decomposedfs: root has no parent","uploadID":"1d13ffb8-24bf-4fdd-b321-d5c774fcf353","time":"2023-12-07T17:36:32+05:45","message":"could not propagate tree size change"}
{"level":"error","error":"failed to upload file to blobstore: could not open blob '/home/artur/.ocis/storage/users/spaces/00/364da3-abb6-47d0-8002-6cd66ed6eea5/blobs' for writing: open /home/artur/.ocis/storage/users/spaces/00/364da3-abb6-47d0-8002-6cd66ed6eea5/blobs: is a directory","uploadID":"3f94e7d8-837d-446e-a256-2ef1bdd87aaa","time":"2023-12-07T17:37:02+05:45","message":"could not finalize upload"}
{"level":"error","error":"decomposedfs: root has no parent","uploadID":"3f94e7d8-837d-446e-a256-2ef1bdd87aaa","time":"2023-12-07T17:37:02+05:45","message":"could not propagate tree size change"}

Maybe the main problem is that "context canceled" that shows up in the logs.
Assuming the context is attached to the ocdav request, I'm not sure what is the consequence of canceling that context. Probably the request itself keeps going (unless there is a thread checking the "done" channel of the context, but I haven't seen any), but further request from the ocdav service to a different service using the same context might be blocked (because the context is canceled). This will likely cause problems because some operations among the services won't take place.
As for why the context is canceled, my guess is that the connection gets cut. Assuming the ocdav service makes some requests (using that context) in a different thread, it might happen that the request itself finishes but the secondary thread making the asynchronous request is still running. The client would cut the connection after getting the server response, which could cancel / done the context, so this async request in the secondary thread might get on trouble due to the canceled context.
I haven't taken a deep look at the code, so maybe all requests are synchronous and the problem isn't this.
The other thing I've noticed is that the postprocessing service is mono-threaded (at least the processing part). This means that the service itself will process the events one by one, so if one event takes a lot of time to be processed for whatever reason, all the events after it could be severely delayed.
This could explain why the "ff3.txt" isn't out of postprocessing: the service could be stuck on one of the events from "ff2.txt" (or maybe still processing those), and the events from "ff3.txt" still in the queue.

From another perspective, the errors seems to indicate that the BlobID of the node is empty. That explains why the target blob points to a directory instead of the actual blob file.
The other more plausible explanation is that the target node doesn't exists and we fallback to the space root
https://github.com/cs3org/reva/blob/edge/pkg/storage/utils/decomposedfs/decomposedfs.go#L256 and then
There are some scenarios where the ReadNode returns the space root instead of the target node. We might need to check those scenarios.

https://github.com/cs3org/reva/blob/edge/pkg/storage/utils/decomposedfs/upload/processing.go#L327 seems suspicious. As far as I know, the "acquireLock" parameter should be always true, otherwise there could be problems with race conditions trying to write extended attributes in the file if there are multiple threads / processes competing to write in the same file
Same for

https://github.com/cs3org/reva/blob/edge/pkg/storage/utils/decomposedfs/tree/propagator/sync.go#L188
https://github.com/cs3org/reva/blob/edge/pkg/storage/utils/decomposedfs/tree/propagator/async.go#L400
https://github.com/cs3org/reva/blob/edge/pkg/storage/utils/decomposedfs/grants.go#L333

A haven't found conclusive evidence on whether the extended attributes are set atomically or not. If the operations aren't atomic, race conditions might happen when we set the extended attributes from multiple sides, which could cause problems with what is written.
According to https://man7.org/linux/man-pages/man7/xattr.7.html , "Extended attributes are accessed as atomic objects", however, there was an old bug in the btrfs regarding non-atomic access (https://bst.cisco.com/quickview/bug/CSCvu54502). If the real behavior is dependent on the underlying FS, maybe we shouldn't rely on atomic operations on the extended attributes.

@individual-it  Because the delay is so long in the test case POSTPROCESSING_DELAY=30s and the postprocessing is going sequentially it looks like never finished.
The error {"level":"error","error":"failed to upload file to blobstore: could not open blob '/Users/roman/.ocis/storage/users/spaces/so/me-admin-user-id-0000-000000000000/blobs' for writing: open /Users/roman/.ocis/storage/users/spaces/so/me-admin-user-id-0000-000000000000/blobs: is a directory","uploadID":"d44c8306-1c40-4c71-8927-8f6ac4e45ad1","time":"2023-12-22T14:22:03+01:00","message":"could not finalize upload"}  happened because we tried to upload after the node was deleted and we can't find a destination node as well.

So is this an unrealistic test-case?

Sounds to me unrealistic. But we still need to fix an error that appeared if we put the file and delete it immediately. The postprocessing has to handle it properly.

Here is a draft PR. @butonic @kobergj
Please have a look a comment https://github.com/cs3org/reva/pull/4434#pullrequestreview-1794902199


Remove: Governikus.AusweisApp2 version 2.0.0

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?

[x] Does your manifest conform to the 1.5 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

This PR is coupled to #126654 !
In here the duplicate for the package Governikus.AusweisApp (the new name) is been removed.


[HUDI-681]Remove embeddedTimelineService from HoodieReadClient

What is the purpose of the pull request
Remove the EmbeddedTimelineService from HoodieReadClient, so that we can remove HoodieReadClient into hudi-spark module
Brief change log

Remove embeddedTimelineService from HoodieReadClient

Verify this pull request
This pull request is already covered by existing tests.
Committer checklist

[x] Has a corresponding JIRA in PR title & commit

[ ] Commit message is descriptive of the change

[ ] CI is green

[ ] Necessary doc changes done or have another open PR

[ ] For large changes, please consider breaking it into sub-tasks under an umbrella JIRA.

@yanghua Passed the test in the local environment, try to rebuild.

Codecov Report

Merging #1388 into master will decrease coverage by 0.02%.
The diff coverage is 100%.

@@             Coverage Diff              @@
##             master    #1388      +/-   ##
============================================
- Coverage     67.19%   67.17%   -0.03%
  Complexity      223      223
============================================
  Files           335      335
  Lines         16279    16272       -7
  Branches       1661     1661
============================================
- Hits          10939    10930       -9
  Misses         4604     4604
- Partials        736      738       +2

Impacted Files
Coverage Δ
Complexity Δ

...n/scala/org/apache/hudi/HoodieSparkSqlWriter.scala
52.79% <100%> (-0.87%)
0 <0> (ø)

.../java/org/apache/hudi/client/HoodieReadClient.java
100% <100%> (ø)
0 <0> (ø)
:arrow_down:

...apache/hudi/utilities/deltastreamer/DeltaSync.java
72.41% <100%> (ø)
38 <0> (ø)
:arrow_down:

...src/main/java/org/apache/hudi/DataSourceUtils.java
50.56% <100%> (ø)
0 <0> (ø)
:arrow_down:

...n/java/org/apache/hudi/common/model/HoodieKey.java
88.88% <0%> (-5.56%)
0% <0%> (ø)

...a/org/apache/hudi/common/util/collection/Pair.java
72% <0%> (-4%)
0% <0%> (ø)

...a/org/apache/hudi/client/AbstractHoodieClient.java
76.31% <0%> (-2.64%)
0% <0%> (ø)

...e/hudi/common/table/log/HoodieLogFormatWriter.java
76.92% <0%> (+0.96%)
0% <0%> (ø)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 415882f...929f815. Read the comment docs.


Fix typedoc stuff

I made you this.

fix typedoc config for typedoc-plugin-markdown v4
add eslint-plugin-jsdoc to catch issues typedoc sees
fix most of the jsdoc lints

Hopefully the CI is happy now.

Thanks!


Python video capture

Component your question relates to

[ ] Signalling server
[ ] Frontend library
[ ] Frontend UI library
[ ] Matchmaker
[ ] SFU
[x] This repo
[x] Other

Question
Hello everyone. Nice repo thanks for it 🙏
I found it really useful and it solved my biggest problem 😁
Is there any way I can capture the video from python outside unreal?
Everything works good and I can open web browsers and see the streamed results but when I want to read video from the URL (localhost/?streamid=camera_1) there is no data in it. I have tested other URLs as well but I could not figure out how to read images
Would you help me please
Thanks a lot

sorry for many questions... just a github/net bugg...

Python is not something we support currently and so cannot really provide any input for this. However it should be reasonably straight forward to provide a video stream by following the UE plugin as a reference.
Additionally I currently have a JavaScript implementation of a streamer that might be helpful for you at my fork. This is something that is being developed to help testing and has very limited functionality but should provide a good reference for the bare minimum.
It sounds like you have several issues.
If you cannot switch streamers using the streamerId parameter then it sounds like your streamers are not identifying themselves correctly. It's also possible you're confusing "stream id" with "streamer id". Each streamer connected to the signalling server has it's own unique streamer id and that is what the streamerId parameter is selecting. We currently do not have a way to select individual streams from the one streamer.
The quality of the video stream will be completely up to the encoder or the quality of the stream provided. The front end will just display whatever video stream it receives.
Hope this helps.

It helped a lot,
Thanks for the answer


[Remove] Types from PutIndexTemplateRequest and builder to reduce mapping to a string

Signed-off-by: Suraj Singh<EMAIL_ADDRESS>Description
With type removal from codebase, this change prevents PutIndexTemplateRequest and corresponding builder to hold multiple mapping types. It change internal representation of mapping from maps to String and a subsequent change of https://github.com/opensearch-project/OpenSearch/pull/2497
Related: #1940
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Existing gradle check is failing due to parsing issue. Probable bug in logic change in PutIndexTemplateRequest.toXContent method
  2> REPRODUCE WITH: ./gradlew ':server:test' --tests "org.opensearch.action.admin.indices.template.put.PutIndexTemplateRequestTests.testFromXContent" -Dtests.seed=B211A97EE49E7566 -Dtests.security.manager=true -Dtests.jvm.argline="-XX:TieredStopAtLevel=1 -XX:ReservedCodeCacheSize=64m" -Dtests.locale=sl-SI -Dtests.timezone=Asia/Aqtau -Druntime.java=17
  2> java.lang.NullPointerException: Cannot invoke "String.length()" because "content" is null
        at __randomizedtesting.SeedInfo.seed([B211A97EE49E7566:93799C666D3995BC]:0)
        at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:1158)
        at org.opensearch.common.xcontent.json.JsonXContent.createParser(JsonXContent.java:97)
        at org.opensearch.action.admin.indices.template.put.PutIndexTemplateRequest.toXContent(PutIndexTemplateRequest.java:523)

start gradle check

**REPRODUCE WITH: ./gradlew ':qa:remote-clusters:integTest' --tests "org.opensearch.cluster.remote.test.RemoteClustersIT.testHAProxyModeConnectionWorks" -Dtests.seed=822F6BCFE6BD6C51 -Dtests.security.manager=true -Dtests.jvm.argline="-XX:TieredStopAtLevel=1 -XX:ReservedCodeCacheSize=64m" -Dtests.locale=ar-KW -Dtests.timezone=Asia/Colombo -Druntime.java=17

org.opensearch.cluster.remote.test.RemoteClustersIT > testHAProxyModeConnectionWorks FAILED
    java.lang.AssertionError
        at __randomizedtesting.SeedInfo.seed([822F6BCFE6BD6C51:8559BE04DD3B1A0C]:0)
        at org.junit.Assert.fail(Assert.java:87)
        at org.junit.Assert.assertTrue(Assert.java:42)
        at org.junit.Assert.assertTrue(Assert.java:53)
        at org.opensearch.cluster.remote.test.RemoteClustersIT.testHAProxyModeConnectionWorks(RemoteClustersIT.java:125)**

start gradle check

@nknize : I would also request your review on this PR as it involves changes around serialisation. Can you please have a look ?


knowledge_representation: 0.9.1-1 in 'noetic/distribution.yaml' [bloom]

Increasing version of package(s) in repository knowledge_representation to 0.9.1-1:

upstream repository: https://github.com/utexas-bwi/knowledge_representation.git
release repository: https://github.com/utexas-bwi-gbp/knowledge_representation-release.git
distro file: noetic/distribution.yaml
bloom version: 0.9.7
previous version for package: null

knowledge_representation
* Update YAML knowledge_loader
* Support passing multiple maps to the map loader
* Update rosdeps for Noetic

Thanks for your help @sloretz! Made a new release (#25948) incorporating your fixes and code changes for Python 3 support.


delete reference to patch_network_get

Issue

#294
Solution

I just delete the  patch_network_get reference in the source code
Context

Testing Instructions

launching all test
Release Notes

I remove the reference to  patch_network_get in all files in the source code

@sed-i

Hi @SamirPS a very recent commit  in PR 331 reverted to using network-get for reasons discussed in Issue 329. As a result this PR may fail the unit tests. You may run the unit tests locally on your system using the command line tox -e unit to confirm this.
I think issue 294 must be closed. I have left a note on it stating so. My sincerely apologies for this oversight and I am very grateful for your efforts. Please do feel welcome to drop by the Observability Mattermost Channel and chat with the team.


parameter that allows starting server w/o launching browser

I've been unable to find parameter that allows starting ripple emulator server w/o launching browser that connects to it.  Having this switch option would enable scenarios like vscode and similar ide debuggers that can launch and attach to browser provided server side is up and running.

@myusrn I think this is a great idea. It would be great if you  could send in a PR for this.

i found a way to make this work using the an alias'd command that does what visual studio 2015 update 2 [vs15upd2] does when you tell it to launch a debug session for an apache cordova project using one of the provided ripple emulator options.
alias rplS "start cmd.exe /c ""%programfiles%\nodejs\node.exe" "%appdata%\npm\node_modules\vs-tac\ripple.js" "%%cd%%" 4400  --cliVersion 6.0.0 --loglevel warn""
i'm no node package sme but if i can find the time i'll take a look at how "ripple emulate" is implemented and if adding a "--nobrowser" switch option similar to what "ionic serve" supports can be enabled in a straight forward way . . . and if so put that in a pull request.


signalr connect 404

I am using traefik in k8s, but there is a 404 error for signalr. I cannot find a solution, please kindly help!

Hi! I'm Træfiker :robot: the bot in charge of communication regulation.
Thanks for your interest in Træfik!
We dedicate the issue tracker to bug reports and feature requests only.
If you have questions and need community support, you can join our Slack workspace and reach out to us on the #support channel.
Another option is to use Stack Overflow and tag your question traefik.
Of course, double checking Træfik's documentation is always a good idea :sweat_smile:


Search for Person.name returns keyword error

a search for eg "Klimt" in the "name or label" field of the person list returns:
Cannot resolve keyword 'label' into field choices are...
search for "klimt"

this is due to the use of name_label_filter in https://github.com/acdh-oeaw/apis-core-rdf/blob/ff47d2aadf75cfe6936e5cc3a9f37ad9101f1cb1/apis_core/apis_entities/filters.py#L44
Maybe that line can simple be removed

This was now fixed as part of https://github.com/acdh-oeaw/apis-core-rdf/pull/153 which is already deployed


Check what keys can decrypt PGP MESSAGE

I have a question. Please look at the following screenshots

It's true for FlowCrypt for Android that uses Node.js to decrypt a PGP message. When I try to decrypt such a message and don't provide passphrases, Node.js realization returns me an error that contains info about keys that have missed passphrases. Looks like this
{
   "type":"decryptErr",
   "content":"-----BEGIN PGP MESSAGE----- ...-----END PGP MESSAGE-----",
   "decryptErr":{
      "success":false,
      "error":{
         "type":"need_passphrase",
         "message":"Missing pass phrase"
      },
      "longids":{
         "message":[
            "D7A3DEDB65CB1EFB",
            "CCEBCFC9A5417178",
            "4F1458BD22B7BB53"
         ],
         "matching":[
            "45F0A5260A80F238598DD081C669001D0A6DCAC8",
            "3DEBE9F677D5B9BB38E5A244225F8023C20D0957"
         ],
         "chosen":[

         ],
         "needPassphrase":[
            "45F0A5260A80F238598DD081C669001D0A6DCAC8",
            "3DEBE9F677D5B9BB38E5A244225F8023C20D0957"
         ]
      },
      "isEncrypted":true
   },
   "complete":true
}

needPassphrase says me what keys have missed passphrase. Could we have something similar in PGPainless? Could I know for what keys the message was encrypted?
###########################################
How I can receive NEED_PASSPHRASE error with PGPainless
override fun getSecretKeyRingProtector(): SecretKeyRingProtector {
    val keyRingProtectionSettings = KeyRingProtectionSettings.secureDefaultSettings()
    val availablePGPSecretKeyRings = getPGPSecretKeyRings()//existed keys
    return PasswordBasedSecretKeyRingProtector(keyRingProtectionSettings) { keyId ->
      for (pgpSecretKeyRing in availablePGPSecretKeyRings) {
        val keyIDs = pgpSecretKeyRing.secretKeys.iterator().asSequence().map { it.keyID }
        if (keyIDs.contains(keyId)) {
          for (secretKey in pgpSecretKeyRing.secretKeys) {
            val openPgpV4Fingerprint = OpenPgpV4Fingerprint(secretKey)
            val fingerprint = openPgpV4Fingerprint.toString()
            val passphrase = getPassphraseByFingerprint(fingerprint)
            if (passphrase == null || passphrase.isEmpty) {
              throw DecryptionException(
                decryptionErrorType = PgpDecrypt.DecryptionErrorType.NEED_PASSPHRASE,
                e = PGPException("flowcrypt: need passphrase"),
                fingerprints = listOf(fingerprint)
              )
            }
            return@PasswordBasedSecretKeyRingProtector passphrase
          }
        }
      }

      return@PasswordBasedSecretKeyRingProtector null
    }
  }

Later I use getSecretKeyRingProtector() with the following code
fun decryptWithResult(
    srcInputStream: InputStream,
    pgpSecretKeyRingCollection: PGPSecretKeyRingCollection,
    protector: SecretKeyRingProtector //`getSecretKeyRingProtector()`
  ): DecryptionResult {
    srcInputStream.use { srcStream ->
      val destOutputStream = ByteArrayOutputStream()
      destOutputStream.use { outStream ->
        try {
          val decryptionStream = PGPainless.decryptAndOrVerify()
            .onInputStream(srcStream)
            .withOptions(
              ConsumerOptions()
                .addDecryptionKeys(pgpSecretKeyRingCollection, protector)
            )

          decryptionStream.use { it.copyTo(outStream) }
          return DecryptionResult.withDecrypted(
            content = destOutputStream,
            filename = decryptionStream.result.fileName
          )
        } catch (e: Exception) {
          return DecryptionResult.withError(
            processDecryptionException(e)
          )
        }
      }
    }
  }

But this approach returns me only the first found issue. Instead, I would like to know info about all keys. In that case, I can propose a user provide a passphrase at least for one of the keys.
@vanitasvitae Please let me know If you need more clarifications.

I would suggest using the CachingSecretKeyRingProtector class.
You can pass it a SecretKeyPassphraseProvider as callback function which is called for each missing key passphrase.
Eg:
    SecretKeyPassphraseProvider callback = new SecretKeyPassphraseProvider() {
            @Nullable
            @Override
            public Passphrase getPassphraseFor(Long keyId) {
                // prompt user for passphrase in UI
                return passphrase;
            }
    };
    CachingSecretKeyRingProtector protector = new CachingSecretKeyRingProtector(callback);

Now whenever there is a key for which the passphrase is missing, PGPainless will call the getPassphraseFor() method of the callback which you can use to prompt the user to enter the passphrase.
Afterwards the passphrase will be cached in the protector.

unfortunately, it doesn't fit our needs. This approach uses a sequence. And I should provide a passphrase immediately. Otherwise, I will catch an exception(that relates to a single key). To be short, in the Android world it will be a little hard to use that strategy (different threads and so on).

Could I know for what keys the message was encrypted?

What about that? Can we have any additional info when we try to decrypt a message? or for example check a message for that info.
For example, I have the following
-----BEGIN PGP MESSAGE-----
Version: PGPainless

hF4D16Pe22XLHvsSAQdA+cgF8qgAX5lRtuSzCVzwbyEq24srMTdzL/0HWa0sjXgw
E6aJjgjGlcCqHaMssSCAx7v6a1OkONRJmOkUeafNxOy8CNUlPOFhcDWnmKILjuMj
hF4DTxRYvSK3u1MSAQdAs1C904AQanwQRp0eZ/1IINQ39wA+xDo6KTyqLFzHKWYw
NeR9FoAQ1b4T+KtlgQH9UVh1jw1U++tMuwVOHYqCuomJ1oMfvMcO9CO3wC4tvi5K
0sAYAcFYdIyg3ILeNhpOhWFDeXdSgID5KaFMsm45eRl9ZdvQNz/VwqOwMhD8acbO
IscIBwqgfxaS0BoNlcj5ao0T0wrTb6fJvwT/YZ5QTXfBzxzHIB1nuFgJqnrpsHom
18zRc1igiWm5nPhdwGTmfeH586HQZwKubXrNvEKE41Rl3Wn7PjUAgkwkV9KOyW3W
tilaJQHxPFI7lTUtMzFffVs3Qe0Gz+03x+7MGnTSDO1Bg5/h4Tttc6V7rPViI+rG
kWGg1Aw3Ev6T+bBTfk20oL77zbrscUKlTezO
=gcMh
-----END PGP MESSAGE-----

Can we check for what keys this message was encrypted? It will help me.
Something similar to this one

Yeah that should be doable.
Basically a method which parses the message "header" to extract recipients and signers.

I added MessageInspector which can be used to determine recipient key-ids and whether a message is passphrase protected.

I added MessageInspector which can be used to determine recipient key-ids and whether a message is passphrase protected.

Great! Thank you. It will be very helpful.

But I've found another issue. I propose to discuss the following code
fun decryptWithResult(
    srcInputStream: InputStream,
    pgpSecretKeyRingCollection: PGPSecretKeyRingCollection,
    protector: SecretKeyRingProtector
  ): DecryptionResult {
    srcInputStream.use { srcStream ->
      val destOutputStream = ByteArrayOutputStream()
      destOutputStream.use { outStream ->
        try {
          val decryptionStream = PGPainless.decryptAndOrVerify()
            .onInputStream(srcStream)
            .withOptions(
              ConsumerOptions()
                .addDecryptionKeys(pgpSecretKeyRingCollection, protector)
            )

          decryptionStream.use { it.copyTo(outStream) }
          return DecryptionResult.withDecrypted(
            content = destOutputStream,
            filename = decryptionStream.result.fileName
          )
        } catch (e: Exception) {
          return DecryptionResult.withError(
            processDecryptionException(e)
          )
        }
      }
    }
  }

where

srcInputStream: InputStream - our -----BEGIN PGP MESSAGE-----...-----END PGP MESSAGE-----
pgpSecretKeyRingCollection: PGPSecretKeyRingCollection - contains private keys that can be used to decrypt a message from srcInputStream(let's imagine it contains 2 keys: A and B)
protector: SecretKeyRingProtector - handles fetching passphrase for pgpSecretKeyRingCollection(let's imagine it contains just one passphrase for B)

expected results
If we try to decrypt a message that was encrypted for 2 keys(A and B) and just pass only one passphrase for B we should be able to decrypt that message. Because for at least one suitable key we have a passphrase
actual results
Due to a logic one by one PGPainless takes the first key from the ring collection(A in our case), asks protector to provide a passphrase for A, and throws an exception. But we have key B and a passphrase for this key.

I've opened a new issue. The current issue can be closed because you've added the requested changes.


Give a shot to fsnotifiy to provide new log sources

What does this PR do?
Gave a shot to fsnotify
Motivation
Ensure we start reading logs ASAP

What's the performance impact of fsnotify? We take actions for creations and deletions, but doesn't fsnotify notifies for all actions, including modifications? That'd mean that we'd get plenty of notifications that we discard. Would that have a performance impact?
An alternative could also be to use a logic similar to the file scanner with a wildcard pattern.
Lastly, is there a good reason to use different behaviors for file tailing and for kubernetes file tailing? I'd expect that if we wanted to move to fsnotify, we'd do it everywhere and share the logic


errors in rules delly, manta and smoove

Hello,
below command fails with errors in all relevant rules (delly, manta, smoove). A pretended run (-n) returns no problem, and I would appreciate help in getting it to run. I am attaching zipped archive containing the snakmake log file, config.yaml, sampleKey.txt, and a log of STDERR and STDOUT.
snakeSV-troubleshoot.zip
$snakeSV --configfile config/config.yaml --cores 8 -pr --use-conda
thanks a lot for your help
best
Norman

Hi Norman,
Thanks for reaching out. I didn't test the pipeline with non-human genomes.
After a quick look here, manta also gave me errors, but I was able to make it run using dysgu instead.
The other tools: smoove and delly, use a file to restrict regions that are specific to human genome builds, so right now they will require some changes in the snakeSV rule to test without that option.
I recommend interpreting these results cautiously since I'm unsure if the results are reliable or even if these callers should work with non-human genomes.
Here is my config.yaml that worked:
# All paths set on this file are relative to the workdir (if not absolute).
workdir: "./"

OUT_FOLDER: "results_test"
SAMPLE_KEY: "sampleKey.txt"

TOOLS:
#  - "manta"
#  - "smoove"
#  - "delly"
  - "dysgu"

# Reference genome files
REFERENCE_FASTA: "Baxijiao.AAA.genome_plus_chloroplast.fa"
REF_BUILD: ""

Best,
Ricardo

Hello @ricardovialle , thank you for the swift reply. Yes, my fear was that this is yet another tool that is human genomes only. However, I have run delly on this data before and generated the necessary files, so maybe it does not take much to make it more generic?  Meanwhile, I did as instructed and reran specifying only the tool "dysgu". It seems to have gotten quite far, but did throw an error eventually. I am attaching the log. Any hint or fix would be greatly appreciated. Thanks a lot!
snakesv_2023-11-23_13-39-07.log


cpio: 2.12 -> 2.13

Motivation for this change
See https://lists.gnu.org/archive/html/info-gnu/2019-11/msg00002.html
for release information.
Fixes CVE-2019-14866
The CVE-2015-1197-cpio-2.12.patch that was used still applies, but since upstream says that this CVE have been fixed in 2.13, it should not be necessary anymore.
Things done

[X] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[X] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nix-review --run "nix-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[ ] Fits CONTRIBUTING.md.

Notify maintainers
cc @

@c0bw3b my bad (I did remove it, but got it included again by mistake when I checked it did not apply anymore…). Thanks for spotting it.


Helpful debugging output to list all endpoints at startup

I wanted to get a list of endpoints. This component class will print out all the endpoints in the application at startup time.  eg:
Endpoint: [/api/expression] | HTTP Method: [] | Controller: org.zfin.agr.DataController | Method: getFirstExpression
Endpoint: [/alliance/dashboard] | HTTP Method: [] | Controller: org.zfin.alliancegenome.presentation.AllianceDashboardController | Method: allianceDashboard
Endpoint: [/ontology/show-expressed-genes/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: showExpressedGenes
Endpoint: [/ontology/show-expressed-insitu-probes/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: showExpressedInSituProbes
Endpoint: [/ontology/show-labeled-antibodies/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: showExpressedAntibodies
Endpoint: [/ontology/show-clean-fish/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: showPhenotypeCleanFish
Endpoint: [/ontology/show-all-clean-fish/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: showAllPhenotypeCleanFish
Endpoint: [/ontology/show-all-clean-fish-include-substructures/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: showAllPhenotypeCleanFishIncludingSubs
Endpoint: [/ontology/show-all-phenotype-mutants-substructures/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: showAllPhenotypeMutantsIncludingSubstructures
Endpoint: [/ontology/{oboID}/phenotype-summary/{fishID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.AnatomyAjaxController | Method: genotypeSummary
Endpoint: [/ontology/show-high-quality-probes-substructures/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.HighQualityProbesController | Method: showHighQualityProbesSubstructures
Endpoint: [/ontology/show-high-quality-probes/{zdbID}] | HTTP Method: [] | Controller: org.zfin.anatomy.presentation.HighQualityProbesController | Method: showHighQualityProbes

...

Full list of endpoints
endpoints.xlsx


Adjust min supported OS version

Description
Working on https://github.com/maplibre/maplibre-navigation-ios/pull/37 we had to increase our deployment target from iOS12 to iOS13. We don't mind bumping the version if it's necessary but we are hesitant to do it only for tooling.
Tasks

[x] reduce min supported version to iOS12

Infos for Reviewer
A quick integration on our side shows that it works correctly. Xcode 15.3 last supported version without deprecation warning is iOS12. The official SwiftLint Package states macOS12, instead of 10_15 as min supported version, so I've fixed this as well. Not sure if the precompiled binary even works on such old machines.

See this test run that is using this branch: https://github.com/maplibre/maplibre-navigation-ios/actions/runs/8672422330?pr=37
@lukepistrol is this something you would accept and could review please?


NASA triangular cost and schedule distribution

In GitLab by @asbrown on Jun 16, 2020, 12:16
Summary
As part of the development of the new costing model, costs_step.f90 (cost_model = 2), a new probabilistic cost estimation will be introduced as spelled out in the attached paper "An Independent Cost and Schedule Estimate Process for NASA Science Projects".
The paper describes a 'typical triangular cost & schedule distribution' (see below):

A triangular errortype will be put in process_config.py for use through the evaluate_uncertainties.py utility.
Checklist
After implementing issue do the following

[ ] Run test suite
[ ] Does it change the output? If so, give justifications.
[ ] Does it change the baseline 2019 run? (you may need to run on Freia)
[ ] Merge request created

This can be done quite easily but currently test_uncertainties_evaluate.py is skipped on the CI as it takes "too long". Either the change can go in untested, or this will have to wait until the test is added back in to the CI.

Closing issue as the uncertainty tools in PROCESS are to be replaced soon.


wip: Add try_deserialize which returns nil

Motivation

Sometimes it'd be nice to return nil instead of KeyError when
deserialization fails. deserialize is a part of T::Props::CustomType,
so we can't change the API for that one. Instead, we should introduce a
new method. I've chosen the name try_deserialize.
At least two people have asked for this on Slack, and it was a pretty
obvious gap when writing the documentation, so considering it's easy to
implement, I think we should just do it.
Test plan

See included automated tests.

Waiting to merge this until I roll out the other Opus::Enum change to pay-server.


"Entity Too Large" when downloading a project using qfield.

Hi,
Since the update to 0.24.0, when I try to download a project locally with qfield, I get the following error message (excerpt) during the process.
It is interesting to note that a directory with the ID 7b0ea8e2-c788-4d04-ac21-24196879a2f9 does not exist at all in the project file system. Even if I pretend to the system that there is no (last) package by deleting the last package ID and the timestamp in the project table and also removing the package directory in the file system. I still get the same error message.
Does anyone know what is going wrong here?
Thanks.
Feedback pre:
{
  "container_exit_code": 0,
  "error": "Requested \"http://<here-is-my-domain-server>/api/v1/packages/d1a3e564-00b6-4d7c-aa1d-b3383935508b/7b0ea8e2-c788-4d04-ac21-24196879a2f9/files/data.gpkg/\" and got \"413 Request Entity Too Large\":\nb'\\r\\n<title>413 Request Entity Too Large</title>\\r\\n\\r\\n
413 Request Entity Too Large
\\r\\n
nginx/1.22.1\\r\\n\\r\\n\\r\\n'",
  "error_class": "QfcRequestException",
  "error_origin": "container",
  "error_stack": [
    "  File \"/usr/src/app/qfc_worker/utils.py\", line 556, in run_workflow\n    return_values = step.method(**arguments)\n",
    "  File \"/usr/src/app/qfc_worker/utils.py\", line 255, in upload_package\n    client.upload_files(\n",
    "  File \"/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py\", line 246, in upload_files\n    raise err\n",
    "  File \"/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py\", line 232, in upload_files\n    self.upload_file(\n",
    "  File \"/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py\", line 288, in upload_file\n    return self._request(\n",
    "  File \"/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py\", line 811, in _request\n    raise QfcRequestException(response) from err\n"
  ],
  "error_type": "API_OTHER",
  "feedback_version": "2.0",

Can you try with a smaller offline layer if it works fine for you? Seems the offlined version of your data in data.gpkg is way too large. Just to confirm it works with smaller projects.
Do you have a large postgis layer?
If you revert back to the previous QFC version, does it work as expected?

I used a different project as a test. In this project, the data.gpkg file went through without errors. Then the process got stuck on a file called "Luftbild RLP.tif" with the same error. This is a geo-tiff with a size of 93 MB.
I then excluded this tif file from the project. Then the project was downloaded from qfield without errors. The process was error-free according to qfc-log.
There are still crazy things that happen. In qfield the project is displayed as "locally available". But I can't call it up in qfield. Whenever I tap on the project, it is downloaded again and not started locally.
-- snip --
15:34:58.195 /usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py INFO     Uploading file "data.gpkg"…
15:34:58.203 /usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py INFO     Uploading file "Luftbild RLP.tif"…
::>>>::c056496d-9198-49ab-9506-f270ec9f6586 1
Feedback pre:
{
"container_exit_code": 0,
"error": "Requested "http://geoforest.mynetgear.com/api/v1/packages/26a1791c-c704-4240-8eae-181da3933abb/53016345-3d7e-4ea8-a1e6-2536ea079647/files/Luftbild RLP.tif/\" and got "413 Request Entity Too Large":\nb'\r\n413 Request Entity Too Large\r\n\r\n413 Request Entity Too Large\r\nnginx/1.22.1\r\n\r\n\r\n'",
"error_class": "QfcRequestException",
"error_origin": "container",
"error_stack": [
"  File "/usr/src/app/qfc_worker/utils.py", line 556, in run_workflow\n    return_values = step.method(**arguments)\n",
"  File "/usr/src/app/qfc_worker/utils.py", line 255, in upload_package\n    client.upload_files(\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 246, in upload_files\n    raise err\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 232, in upload_files\n    self.upload_file(\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 288, in upload_file\n    return self._request(\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 811, in _request\n    raise QfcRequestException(response) from err\n"
],
"error_type": "API_OTHER",
"feedback_version": "2.0",
-- snap --

One more important piece of information about the previously mentioned test project.
If the project is set to :

QGIS core Offline Editing (deprecated)
The data.gpkg file runs through without errors. The error "Request Entity Too Large" only occurs with the tif file.

Optimized Packager
The error "Request Entity Too Large" already occurs with the data.gpkg file

Thanks for the input. So it seems the "Optimized packager" produces bigger offline package. It would be interesting to know a bit more about your vector layers? Is it single data source but multiple layers? Is it a pg behind it? Anything that will help us to identify the issue is welcomed. If you can share the data with me, would be even better.

If you revert back to the previous QFC version, does it work as expected?

This is important bit would help me to identify the regression, is it working flawlessly, or you still get:

The data.gpkg file runs through without errors. The error "Request Entity Too Large" only occurs with the tif file.

Can you please try onething for me. In the latest QFieldCloud version, please replace the nginx image from nginx:stable to nginx:1.23.4-bullseye.

How can I send you the test project as a zip file? It doesn't seem to work in github.

Thanks for the input. So it seems the "Optimized packager" produces bigger offline package. It would be interesting to know a bit more about your vector layers? Is it single data source but multiple layers? Is it a pg behind it? Anything that will help us to identify the issue is welcomed. If you can share the data with me, would be even better.

ivan at opengis.ch

I have sent you a test project. And yes, almost all layers have pg behind them.

If you revert back to the previous QFC version, does it work as expected?

This is important bit would help me to identify the regression, is it working flawlessly, or you still get:

The data.gpkg file runs through without errors. The error "Request Entity Too Large" only occurs with the tif file.

I have now tested the qfield download of the test project with qfieldcloud 0.23.2 and 0.23.0. The error "Request Entity Too Large" now also occurs with the previous versions. However, I have not reversed the database migration.

I had now set up the following test scenario:
I used the test project from QGis to create a completely new qfc project via the qfc-extension. This worked flawlessly. The qfc-extension now creates its own directory locally. The qfc-extension then transferred exactly this directory to the qfc-server. Everything went smoothly and without errors.
Apparently the qfc-extension creates separate gpkg files for each pg-layer. Incidentally, there is no longer a file called data.gpkg in the directory.
Now I do a project downlaod from qfield (qfield is updated and the project is created from scratch with the qfc-extension of qgis). And that doesn't work again.
The error situation is the same as already described. Depending on the packager, the process gets stuck either at data.gpkg or at the tif file according to the log. Interestingly, as I said, there is no data.gpkg file in the project at all.
What's going wrong?

It's not because of the DB migration. Most probably some of the underlying docker images is casuing this.

I have now reached the point where I can download a test project consisting exclusively of pg layers with the old packager mode (deprecated) locally via qfield without errors.
The same project, set to the optimized new packager mode in qfc, still generates the known error during qfield download.
It is very strange that I cannot open a project downloaded locally from qfc without errors in qfield either. Tapping on it only starts the download again and again. But this phenomenon is possibly a topic for the qfield app area.
What is really annoying is the very spartan frontend introduced with qfc version 0.24.0. For example, if you want to add collaborators to a project, you can only create NEW users. It is not possible to select existing users, the userlist-dropdown field is empty.
I continue to look for a solution and a way out of this confused situation. My qfc server is currently unusable.

It's not because of the DB migration. Most probably some of the underlying docker images is casuing this.

My images, containers, volumes are fine.
I have set up the following test scenario for verification purposes:

qfield-side several end devices with qfield 3.1.9 Borneo on Android.
qfc-side I went back to qfc 0.23.2, so that I have a better to use frontend.
qgis-installation at qfc I have changed from qgis:final-3_32_3 to qgis:final-3_34_3, so this warning also disappeared from the qfc log: QGSSTDERR WARNING  Logged warning: Loading a file that was saved with a newer version of qgis (saved in 3.34.3-Prizren, loaded in 3.32.3-Lima). Problems may occur.
I did this by changing the Dockerfile in the docker-qgis folder. Apparently the qfc-update does not automatically update the QGis installation. libqfieldsync is now also up to date.
As a test I created a simple project, no postgres, just a pgkg file, point geometry, with 2 fields. Nothing else at all. The test project is attached here as a zip file.
The QGis-Version is 3.34.3-Prizren, the qfc-extension is the current one (4.7.0).

Test:

[ ] Creating the qfc project via the QGis extension - error-free.
[ ] Uploading the project files from QGis to qfc - error-free.
[ ] Downloading the project from qfield:
on the part of  qfc - error-free
on the part of qfield - failed (previously no error was shown there, but instead of starting the project the download was carried out again and again, if I wanted to call up the project.).

I am also attaching the log file from qfc regarding the download of the qfield test project. For qfc the process was error-free. And nothing in the log suggests to me a reason why qfield thinks there is an error and the project does not start.
Based on the test results, I assume that either an error with qfc, libqfieldsync or qfield or a combination of all of these is the cause of the malfunction. In any case, it is not my docker.
testproject.log
testproject.zip

Hi,
even with qfc version v0.25.0 the download of a project to qfield devices still does not work.
In a project with postgres layers, the already known error occurs when downloading the data.gpkg, documented in the qfc-log (see below). It is the only error.
With the simple test project already posted here, no error occurs in qfc-log, but qfield shows an error message and the project cannot be loaded in qfield.
The suspicion you expressed that my Docker image was not in order has already turned out to be wrong. I have already regenerated the images countless times. Everything is fine on my self-hosted qfc server, including the Docker images, containers and volumes.
When can we finally use QFC again so that it works? The trouble only started with version 0.24.x.
Regards,
19:51:46.436 /usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py INFO     Uploading file "data.gpkg"…
::>>>::3b470bce-5b9d-4ecf-94e7-32c3484c82c7 1
Feedback pre
{
"container_exit_code": 0,
"error": "Requested "http://geoforest.mynetgear.com/api/v1/packages/d1a3e564-00b6-4d7c-aa1d-b3383935508b/5eecf1dc-9ec2-40ea-919f-554739d08375/files/data.gpkg/\" and got "413 Request Entity Too Large":\nb'\r\n413 Request Entity Too Large\r\n\r\n413 Request Entity Too Large\r\nnginx/1.24.0\r\n\r\n\r\n'",
"error_class": "QfcRequestException",
"error_origin": "container",
"error_stack": [
"  File "/usr/src/app/qfc_worker/utils.py", line 556, in run_workflow\n    return_values = step.method(**arguments)\n",
"  File "/usr/src/app/qfc_worker/utils.py", line 255, in upload_package\n    client.upload_files(\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 246, in upload_files\n    raise err\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 232, in upload_files\n    self.upload_file(\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 288, in upload_file\n    return self._request(\n",
"  File "/usr/local/lib/python3.10/dist-packages/qfieldcloud_sdk/sdk.py", line 811, in _request\n    raise QfcRequestException(response) from err\n"
],
"error_type": "API_OTHER",
"feedback_version": "2.0",

Hi  @suricactus
I have now completely reinstalled qfc on a server. I then transferred the 2 QGIS test projects (one with pg layers, the other a simple gpkg) to qfc.
The result:

the errors are exactly the same as already described.
what works now is logging in via username (previously only possible via email address) and a correctly displayed frontend. This indicates that there were already migration inconsistencies in previous updates of qfc.

Overall, despite reinstallation, qfc has been unusable for me as a self-hoster since version 0.24.x.


Build Error After Installing Plugin (D8: Program type already present: android.support.v4.app.INotificationSideChannel$Stub)

The issue I seem to be getting is
D8: Program type already present: android.support.v4.app.INotificationSideChannel$Stub
> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: android.support.v4.app.INotificationSideChannel$Stub

When I do as suggested by @andrehtissot, I get it to build successfully however I am using cordova-plugin-googleplus and that then has issues and fails to work. From my emulator I see the error in logcat as follows:
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/api/Api$zzf;
2020-05-08 16:33:42.236 8397-8522/ W/System.err:     at com.google.android.gms.auth.api.Auth.<clinit>(Unknown Source:0)
2020-05-08 16:33:42.236 8397-8522/ W/System.err:     at nl.xservices.plugins.GooglePlus.buildGoogleApiClient(GooglePlus.java:181)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at nl.xservices.plugins.GooglePlus.execute(GooglePlus.java:97)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:117)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at org.apache.cordova.PluginManager.exec(PluginManager.java:132)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:59)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at android.os.MessageQueue.nativePollOnce(Native Method)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at android.os.MessageQueue.next(MessageQueue.java:336)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at android.os.Looper.loop(Looper.java:174)
2020-05-08 16:33:42.237 8397-8522/ W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:67)
2020-05-08 16:33:42.237 8397-8522/ W/System.err: Caused by: java.lang.ClassNotFoundException: com.google.android.gms.common.api.Api$zzf

My Ionic Info:
Ionic:

   Ionic CLI                     : 6.8.0 (/usr/local/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 5.0.7
   @angular-devkit/build-angular : 0.803.25
   @angular-devkit/schematics    : 8.3.25
   @angular/cli                  : 8.3.26
   @ionic/angular-toolkit        : 2.2.0

Cordova:

   Cordova CLI       : 9.0.0<EMAIL_ADDRESS>   Cordova Platforms : android 8.1.0, ios 5.1.1
   Cordova Plugins   : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.1.3, (and 11 other plugins)

Utility:

   cordova-res (update available: 0.14.0) : 0.11.0
   native-run                             : 1.0.0

System:

   Android SDK Tools : 26.1.1 (/Users/user/Library/Android/sdk)
   ios-deploy        : 1.10.0
   ios-sim           : 8.0.2
   NodeJS            : v12.14.1 (/usr/local/bin/node)
   npm               : 6.14.4
   OS                : macOS Catalina
   Xcode             : Xcode 11.4.1 Build version 11E503a

my package.json
"dependencies": {
    "@angular/common": "~8.2.14",
    "@angular/core": "~8.2.14",
    "@angular/fire": "^6.0.0",
    "@angular/forms": "~8.2.14",
    "@angular/platform-browser": "~8.2.14",
    "@angular/platform-browser-dynamic": "~8.2.14",
    "@angular/router": "~8.2.14",
    "@babel/compat-data": "^7.8.0",
    "@ionic-native/core": "^5.0.0",
    "@ionic-native/fcm": "^5.25.0",
    "@ionic-native/google-plus": "^5.23.0",
    "@ionic-native/in-app-browser": "^5.24.0",
    "@ionic-native/photo-viewer": "^5.24.0",
    "@ionic-native/splash-screen": "^5.0.0",
    "@ionic-native/status-bar": "^5.0.0",
    "@ionic/angular": "^5.0.0",
    "com-sarriaroman-photoviewer": "git+https://github.com/TdoubleG/photoviewer.git",
    "cordova-android": "^8.1.0",
    "cordova-ios": "5.1.1",
    "cordova-plugin-fcm-with-dependecy-updated": "^6.3.1",
    "cordova-plugin-googleplus": "^7.0.2",
    "cordova-plugin-inappbrowser": "^3.2.0",
    "cordova-res": "^0.11.0",
    "cordova-support-android-plugin": "^1.0.2",
    "cordova-support-google-services": "^1.4.0",
    "core-js": "^2.5.4",
    "firebase": "^7.13.2",
    "ngx-ionic-image-viewer": "^0.7.0",
    "rxjs": "~6.5.1",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.803.20",
    "@angular/cli": "8.3.26",
    "@angular/compiler": "~8.2.14",
    "@angular/compiler-cli": "~8.2.14",
    "@angular/language-service": "~8.2.14",
    "@ionic/angular-toolkit": "^2.1.1",
    "@ionic/lab": "3.1.3",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "^5.0.0",
    "cordova-plugin-device": "^2.0.2",
    "cordova-plugin-ionic-keyboard": "^2.2.0",
    "cordova-plugin-ionic-webview": "^4.1.3",
    "cordova-plugin-splashscreen": "^5.0.2",
    "cordova-plugin-statusbar": "^2.4.2",
    "cordova-plugin-whitelist": "^1.3.3",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "npm-force-resolutions": "0.0.3",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "~3.4.3"
  },
  "description": "An Ionic project",
  "cordova": {
    "plugins": {
      "cordova-plugin-whitelist": {},
      "cordova-plugin-statusbar": {},
      "cordova-plugin-device": {},
      "cordova-plugin-splashscreen": {},
      "cordova-plugin-ionic-webview": {
        "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
      },
      "cordova-plugin-ionic-keyboard": {},
      "com-sarriaroman-photoviewer": {},
      "cordova-plugin-googleplus": {
        "PLAY_SERVICES_VERSION": "11.8.0"
      },
      "cordova-plugin-inappbrowser": {},
      "cordova-plugin-fcm-with-dependecy-updated": {
        "FCM_VERSION": "19.0.0",
        "GRADLE_TOOLS_VERSION": "3.5.3",
        "GOOGLE_SERVICES_VERSION": "4.3.3",
        "SUPPORT_LIBRARY_VERSION": "28.0.0",
        "ANDROID_DEFAULT_NOTIFICATION_ICON": "@mipmap/ic_launcher"
      }
    },
    "platforms": [
      "ios",
      "android"
    ]
  }
``` # # # #

I realised the package.json doesn't have the plugins androidx and androidx-adapter but I still get the same issue when installed

I got the same issue. I fixed it by installing androidx and androidx-adapter using below:
cordova plugin add cordova-plugin-androidx cordova plugin add cordova-plugin-androidx-adapter
And, then, I edited my gradle.properties and added the 2 lines below:
android.useAndroidX=true android.enableJetifier=true
After that, I recompiled my project and it worked.

I realised the package.json doesn't have the plugins androidx and androidx-adapter but I still get the same issue when installed

@rajesh1158 As mentioned in my 2nd comment, I did install both plugins and that's when I faced the issue where my googleplus plugin just stopped working.
Fortunately, I was able to solve my issue by removing the androidx and androidx-adapter plugin, then changing the 2 lines in android/app/build.gradle:
implementation "com.google.android.gms:play-services-auth:11.8.0"
implementation "com.google.android.gms:play-services-identity:11.8.0"

to this
implementation "com.google.android.gms:play-services-auth:+"
implementation "com.google.android.gms:play-services-identity:+"

After that I had no issues and all plugins were functional. However, I don't feel like this is the best way to get it to work. I will give you're method a try but would prefer to find a solution that doesn't require changing the build files

For now it's a good solution.
The issue here is that cordova-plugin-googleplus and cordova-plugin-fcm-with-dependecy-updated make use of native dependencies that, if in wildly different in version, cannot work well together.
What you could try is to, instead of changing the file, install cordova-plugin-googleplus with the configuration set, like:
cordova plugin add cordova-plugin-googleplus --variable PLAY_SERVICES_VERSION="+"

This would not only set the plugin config as you manually configured yourself, as it'd set in package.json, for reference.

Closed issue due to inactivity.


Disable ability to copy or cut text from LineEdit if secret mode is enabled.

Fix for issue #21352.
Changes LineEdit behavior to ignore copy and cut commands if secret mode is enabled. This matches the behavior found in today's major web browsers. (Tested Firefox, Chrome, and Edge.)

Can you make it optional allow_copy like discussed in https://github.com/godotengine/godot/issues/21352

Can you make it optional allow_copy like discussed in #21352

Is there a real use case for making it optional though? When do you want a secret to be copy-pastable?

Like Noshyaar said in a puzzle/Hacking game. Ignoring this case until someone opens an issue should be fine too.

I don't think it's necessary to add allow_copy, at least as part of this fix.
It's likely that the vast majority of users will expect secret mode to act fully like a password box, including disabling the copy/cut ability. I think that if that behavior is separated out into allow_copy, it would more often than not be mis-used, and in my opinion even if allow_copy is added, secret should take precedence.

Also, there is one other thing I realized. I did not change the behavior when attempting to drag text out of the LineEdit, but also dragging text out simply doesn't work for me. It seems that drag-and-drop is broken at the moment. I can try to implement secret handling for drag-and-drop, but I'd have to way to verify it works properly.
If drag-and-drop if fixed in the future, it would need to add handling for secret mode.

Thanks, seems good to me as a first step.
Regarding dragging text, I'm not sure this was ever implemented.


Typo on wiki + Update composer package

On https://github.com/mgp25/Telegram-Bot-API/wiki/Available-methods#constructor
$tg = new TelegramBot($token);

should be
$tg = new telegramBot($token); // small T

it can confuse a newbie like me :blush:
also could you please update the composer package? thanks! :+1:

@gojigeje fixed typo + composer package auto update it.
Regards

maybe you should check it again:
$ composer require mgp25/telegram-bot-api

my Telegram.php has no getFile() method from cedda6aa90b7eb001572a5695bf8108b66bed9ec.
CMIIW, I'm new to composer..

@gojigeje now
Regards


Objective / to do sidebar

I'm currently tracking my objectives, goals and other to do's in the notes tab. However that gets messy and un-organized quickly. Would love to have a object/to do list in the sidebar when I can easily track and organise everything. If it can track skill/quest goals directly from in game that would make it even better.

Are you asking for essentially a notepad that you can then make an outline of sorts that you can then 'check off' goals as you go? @RickertdeH

If this were a simple checklist with textual goals then it wouldn't be that difficult to implement. If it were a goal list that supports different goals (skills/quests/diaries/music unlocks/ ...) and extracts progress/completed state from the game then we're on a whole other level of amount of work required to make this work.
Could also be a simple checklist at first and later be improved with dynamic goals in a v2 (only a Sith deals in absolutes, so...)
Either way, I do like the idea!

I built something similar to this for a private client a long time ago. I know stuff such as quests and music unlocks are trivial to track. What other sort of goals would we expect to track bar diaries, levels and drops?

A number of list/task tracking plugins exist on the plugin hub. I recommend searching for them there. (a search for "task" yields 8 results for instance)