Add retry to handle error in library

Apparently there is a race condition in the boto3 library that can cause key errors when trying to create a client in a multi-threaded environment.
This is close to how others are handling it. Thoughts?
#161
https://github.com/boto/boto3/issues/801

Codecov Report

Merging #162 (965badf) into master (3ce37e0) will decrease coverage by 0.24%.
The diff coverage is 57.14%.

@@            Coverage Diff             @@
##           master     #162      +/-   ##
==========================================
- Coverage   65.78%   65.54%   -0.25%
==========================================
  Files         119      119
  Lines       10125    10074      -51
==========================================
- Hits         6661     6603      -58
- Misses       3464     3471       +7

Impacted Files
Coverage Δ

assemblyline/filestore/transport/s3.py
76.47% <57.14%> (-1.41%)
:arrow_down:

assemblyline/filestore/transport/sftp.py
26.60% <0.00%> (-5.02%)
:arrow_down:

assemblyline/filestore/transport/ftp.py
18.47% <0.00%> (-3.96%)
:arrow_down:

assemblyline/odm/randomizer.py
93.85% <0.00%> (-2.20%)
:arrow_down:

assemblyline/datastore/__init__.py
62.81% <0.00%> (-1.51%)
:arrow_down:

assemblyline/datastore/helper.py
31.00% <0.00%> (-1.14%)
:arrow_down:

assemblyline/datasource/common.py
70.37% <0.00%> (-1.06%)
:arrow_down:

assemblyline/filestore/transport/http.py
64.55% <0.00%> (-0.45%)
:arrow_down:

assemblyline/run/cli.py
63.20% <0.00%> (-0.29%)
:arrow_down:

assemblyline/datastore/stores/es_store.py
67.03% <0.00%> (-0.19%)
:arrow_down:

... and 4 more

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 3ce37e0...965badf. Read the comment docs.

Session does look like a more proper solution

Merged into dev.


Regression in 0.7.0 due to type coercion from "string" to "large_string"

Apache Iceberg version
0.7.0
Please describe the bug 🐞
There is a regression in introduced in version 0.7.0 where arrow tables written with a "string" data type, get cast to "large_string" when read back from Iceberg.
The code below reproduces the bug. The assertion  succeeds in v0.6.1, but fails in 0.7.0 because the schema is being changed from "string" to "large_string".
from tempfile import TemporaryDirectory

import pyarrow
from pyiceberg.catalog.sql import SqlCatalog

def main():
    with TemporaryDirectory() as warehouse_path:
        catalog = SqlCatalog(
            "default",
            **{
                "uri": f"sqlite:///{warehouse_path}/pyiceberg_catalog.db",
                "warehouse": f"file://{warehouse_path}",
            },
        )

        catalog.create_namespace("default")

        schema = pyarrow.schema(
            [
                pyarrow.field("foo", pyarrow.string(), nullable=True),
            ]
        )

        df = pyarrow.table(data={"foo": ["bar"]}, schema=schema)

        table = catalog.create_table(
            "default.test_table",
            schema=df.schema,
        )

        table.append(df)

        # read arrow table back table from iceberg
        df2 = table.scan().to_arrow()

        # this assert succeeds with 0.6.1, but fails with 0.7.0 because the column type
        # has changed from "string" to "large_string"
        assert df.equals(df2)

if __name__ == "__main__":
    main()

The default was changed back to string in 0.7.1 (from large_string in 0.7.0)
Can you test the above again with 0.7.1?
See #887 for more info

To summarize, given a table created with string type schema and written to with string type data, reading the table back returns pyarrow dataframe with large_string type.
Expected: return pyarrow dataframe with string type, matching the table schema
Confirmed the above issue on main branch.

The issue above is was mentioned here https://github.com/apache/iceberg-python/pull/986#discussion_r1706662170
On read, pyarrow will use large type as default. It is controlled by this table property (courtesy of #986)
https://github.com/apache/iceberg-python/blob/9857107561d2267813b7ce150b01b4e6ac4b3e34/pyiceberg/io/pyarrow.py#L1365-L1371

As a workaround, you can manually set the table property to force the read path to use the string type
        from pyiceberg.io import PYARROW_USE_LARGE_TYPES_ON_READ
        table = catalog.create_table(
            "default.test_table",
            schema=df.schema,
            properties={PYARROW_USE_LARGE_TYPES_ON_READ: False}
        )

Thanks @kevinjqliu. I can confirm that the workaround resolves the problem when using latest main branch but not v0.7.0 or v0.7.1.
Setting PYARROW_USE_LARGE_TYPES_ON_READ=False will cause the test to fail the other way around, i.e a pyarrow table with a large_string will be read back with a string. I'm guess this is just a fundamental limitation in that Iceberg only has one string type.
I would be tempted to change the default value of PYARROW_USE_LARGE_TYPES_ON_READ to True, as I would consider pyarrow string to be the more commonly used type compared to large_string. This would also give backwards compatibility with pyiceberg <0.7.0.
A further improvement would be to write some kind of type hint into the iceberg metadata that would tell pyiceberg whether the string column was supposed to be interpreted as a pyarrow large_string.

I'm guess this is just a fundamental limitation in that Iceberg only has one string type.

Yea, there's a separation of Iceberg type and the Arrow/Parquet/on-disk type. Iceberg has one string type; Arrow has two.
On iceberg table write, an Iceberg string type can be written to disk as Arrow large type or normal type.
On iceberg table read, the Iceberg string type should read back as either Arrow large type or normal type based on the on-disk schema.
The problem here is that PYARROW_USE_LARGE_TYPES_ON_READ defaults to True, which for the scenario where an Iceberg string type is written as normal string type on disk, will read back as large string type.
Perhaps, instead of setting PYARROW_USE_LARGE_TYPES_ON_READ to True, we can leave it unset by default, which will then use the on-disk representation.
cc @sungwy / @Fokko
I think #929 will help resolve this issue (based on this comment https://github.com/apache/iceberg-python/pull/929#discussion_r1684298458)


Automatic Wifi STA connection at boot

Why this change

To support SSRP testing requirement (which thankfully does not need openThread)
To make it simpler for DUT testing, we make the wifi STA client auto-connect to a known ssid and password (testSSID / testPassword)
To make it simpler to get the status of the DUT, we extend the query command to show the ssid, mac-address, and ip-address
To give quidance we updated the help message of the example app

Envisioned use case

Setup Wifi Router with testSSID and testPassword
Boot the DUT and run query once connection is established, like this:

 ========================================================
 |       Steps to use this test program                   |
 |                                                        |
 |  1. Setup a Wifi Router with                           |
 |     ssid: testSSID
 |     pswd: testPassword
 |                                                        |
 |  2. Setup the DHCP server on router to assign          |
 |     a static IP for this device's Mac Address          |
 |                                                        |
 |  3. Device will auto connect to the specified SSID     |
 |     on boot as a Wifi Client                           |
 |                                                        |
 |  4. Device will also advertise as ESP-BLE-MESH on BT   |
 |                                                        |
 |  5. Print 'query' to see wifi connection status        |
 ==========================================================

Type 'help' to get the list of commands.
Use UP/DOWN arrows to navigate through command history.
Press TAB when typing command name to auto-complete.

Auto joining Wifi At: testSSID / testPassword
esp> I (6494) iperf: L2 connected
W (6506) wifi:<ba-add>idx:0 (ifx:0, 9c:53:22:61:b6:bb), tid:0, ssn:0, winSize:64
I (7419) esp_netif_handlers: sta ip: <IP_ADDRESS>, mask: <IP_ADDRESS>, gw: <IP_ADDRESS>
I (7421) iperf: got ip

[OK] (will retry if disconnected)

esp> query
I (11767) iperf: sta mode, connected
I (11768) iperf: ssid: testSSID
I (11768) iperf: mac : 10:97:bd:31:9c:10
I (11779) iperf: ip  : <IP_ADDRESS>

On the router's GUI setup a static IPv4 map on DHCPv4 server. Using D-Link DIR-605L as an example

DIR-605LManual_v1.00.pdf

Then on a PC that is connected on the same network, we can initiate ping -i 1 <ipv4-address> to send pings once per second

At the same time, on an Android Phone we can observe that ESP-BLE-MESH is being advertised

Dev Testing

I was able to Ping over Wifi connected BRD21 and observe the bluetooth device advertised on Android phone (Pixel 3 with Android 12 OS)

How to build and deploy

clone this repo and checkout this branch
run esp-idf install.sh to setup the required tool
run esp-idf export.sh to create a build environment
cd esp-idf/examples/bluetooth/esp_ble_mesh/ble_mesh_wifi_coexist
connect DUT to build PC
run idf.py build flash to build and flash the binary to the DUT.
connect a terminal (baud 115200-8N1) to see and interact with the DUT's console CLI

How to customize ssid and password

These can be customized using idf.py menuconfig, look for CONFIG_MMB_WIFI_STA_*

As mentioned by @TanvirKaz in BAVFW-1560, the state of this branch is working for him and can be merged. I am doing this now. Further follow up on power level adjustments can be worked on its own ticket.


Cargo order cooldown

About the PR
Added ability to set rate limiting on specific cargo orders. Demonstrated as a 10 minute cool-down on The Grand Lottery.
Why / Balance

Requested in Devlist: https://github.com/Goob-Station/Goob-Station/issues/306
Technical details
Order Prototypes now have an optional field "cooldown" which lists the time in seconds that must pass between orders.
For any orders placed with a non-zero cooldown, StationCargoOrderDatabaseComponent tracks the next time the order can be placed in ProductCooldownTime.
When an order with a cooldown is accepted via OnApproveOrderMessage, CargoSystem checks:

if the time is set and not yet reached
if the order quantity is larger than 1
and denies the order with an appropriate message if either are true.

Media

Message displayed if attempting to buy multiple:

Message displayed if attempting to buy too soon:

(changes to seconds left when less than 1 minute is remaining)
Requirements

[ X] I have read and am following the Pull Request and Changelog Guidelines.
[X ] I have added media to this PR or it does not require an ingame showcase.

Breaking changes

Changelog

:cl: procdox (pb_ozai)

add: cooldown implementation for cargo orders
add: cooldown on grand lottery

Summary by CodeRabbit
Release Notes

New Features

Introduced a cooldown system for cargo orders to manage order frequency and prevent rapid re-approval.
Added user notifications for active cooldowns and limits on order quantities.
Enhanced CargoOrderData to include a cooldown property for better order tracking.

Localization

Updated cargo console UI with new messages for cooldown-related restrictions.

Improvements

Implemented a cooldown for the FunCrateGambling product, setting a 10-minute delay before it can be ordered again.

Resolves #306

This has nothing to do with salvage. This just means cargo can't gamble all their money away and puts in place a nice timeout system that can be used in future for anything else.


Mopidy-PiDi displays Internet-retrieved album art instead of existing art

Heyo,
I've noticed that in some cases, while playing local media, the album art shown on the Pirate-Audio screen doesn't always match the art embedded in the playing file or present in Mopidy's database.
For example, when listening to Trance Nation 2, I see the following on Iris:

But I see the following on the Pirate-Audio screen:

Instead, I should be seeing something like this:

The musicbrainz album art lookup is a fallback in case Mopdiy's API doesn't return any album art, or returns files that are too small.
I guess we'd need to figure out what track.uri is being passed here, and what data the local library handler is returning:
https://github.com/pimoroni/mopidy-pidi/blob/03fc14f63965f4375059e8074470c839ff652f72/mopidy_pidi/frontend.py#L145
A little tweak to frontend.py will get this to spit out some basic info:
diff --git a/mopidy_pidi/frontend.py b/mopidy_pidi/frontend.py
index e7fb2a0..ff740ea 100644
--- a/mopidy_pidi/frontend.py
+++ b/mopidy_pidi/frontend.py
@@ -143,16 +143,20 @@ class PiDiFrontend(pykka.ThreadingActor, core.CoreListener):

         art = None
         track_images = self.core.library.get_images([track.uri]).get()
+        logger.info("{uri} returned {img} images".format(uri=track.uri, img=len(track_images)))
         if track.uri in track_images:
             track_images = track_images[track.uri]
             if len(track_images) == 1:
                 art = track_images[0].uri
+                logger.info("Using track_image uri: {uri}".format(uri=art))
             else:
                 for image in track_images:
+                    logger.info("Checking image {uri}, dimensions: {w}x{h}".format(uri=image.uri, w=image.width, h=image.height))
                     if image.width is None or image.height is None:
                         continue
                     if image.height >= 240 and image.width >= 240:
                         art = image.uri
+                        logger.info("Using >=240x240 track_image uri: {uri}".format(uri=art))

         self.display.update_album_art(art=art)

A quick not very comprehensive test (I don't really have curated offline music) with Mopidy Local suggests it's finding my cover.png files:
Sep 13 10:43:29 bullseye mopidy[2880]: INFO     [PiDiFrontend-10] mopidy_pidi.frontend local:track:TRUTHR%20-%20TRUTHR/TRUTHR%20-%20TRUTHR%20-%2003%20Paradise%20500.mp3 returned 1 images
Sep 13 10:43:29 bullseye mopidy[2880]: INFO     [PiDiFrontend-10] mopidy_pidi.frontend Checking image /local/a9a917137027121b19d53ce8430aaaa6-700x700.jpeg, dimensions: 700x700
Sep 13 10:43:29 bullseye mopidy[2880]: INFO     [PiDiFrontend-10] mopidy_pidi.frontend Using >=240x240 track_image uri: /local/a9a917137027121b19d53ce8430aaaa6-700x700.jpeg
Sep 13 10:43:29 bullseye mopidy[2880]: INFO     [PiDiFrontend-10] mopidy_pidi.frontend Checking image /local/fc1a6d449e628f644943734f0d5fdeca-1400x1400.png, dimensions: 1400x1400
Sep 13 10:43:29 bullseye mopidy[2880]: INFO     [PiDiFrontend-10] mopidy_pidi.frontend Using >=240x240 track_image uri: /local/fc1a6d449e628f644943734f0d5fdeca-1400x1400.png

You can either dig into the guts of Python and edit this debug waffle into frontend.py directly, or clone this repository and use sudo python3 setup.py develop. Maybe this will help track down what's going wrong and where.

FYI: https://github.com/pimoroni/mopidy-pidi/pull/28


Switch to built-in SWIFT_PACKAGE flag

Remove NO_SWIFTPM - SwiftPM already defines a flag for its builds, we don't need to make the user specify their own.
Jazzy and its dependencies just... broke with the version of Ruby installed on my box.  Somebody else will need to re-run it to update the docs.

YES.

LLVM Apt endpoints are 404'ing.  Not sure what to do.

⛵


Cleaner external API for ml_croissant.Dataset.

Now you can access all the JSON-LD properties via the API:
dataset = Dataset.from_file()
metadata = dataset.metadata
for record_set in metadata.record_sets:
  print(record_set)

Fixes: https://github.com/mlcommons/croissant/issues/114
Fixes: https://github.com/mlcommons/croissant/issues/164
Fixes: https://github.com/mlcommons/croissant/issues/81

Thanks for the long review, @ccl-core!


Alternative registration/login system

I have nearly completed a log-in/registration system with all_auth, which seems a lot more sophisticated than social_auth, do you want to substitute that in for the existing demo given the security issue with social_auth?

@typonaut Yes, that would be awesome.
Please create PR.

I have this functional, I just have to sort out some style issues.

Have initiated pull request, couldn’t link to this issue.
https://github.com/slyapustin/django-classified-demo/pull/99


Not enough tests!

SOme useful checks:

Check against a binary with a known analytic solution
Check the energy is the same after a timestep
Check that the position of the particles for a simple system matches the output at the current commit (by copy-pasting output from a terminal).

Tip for making tests:

Ask chatgpt to generate a test case


How to use APK Expansion for video?

It seems like this library supports APK Expansion. Can anyone share example when developing an app?
Thank you.

I have a PR for this - see https://github.com/brentvatne/react-native-video/pull/142

Thank you. I'll try that.


Not able to load ui calendar getting error as calendar.fullCalendar is not a function

Hi,
I'm trying to use ui-calendar load some static events, I did following steps.
bower install angular-ui-calendar
`

`
In UI inserted

Into application module injected ui.calendar component and in controller created config and dummy events.
var app = angular.module('myCalendarApp', ['ui.calendar'])
$scope.eventSources = []; $scope.uiConfig = {     calendar:{         height: 450,         editable: true,         header:{             left: 'month basicWeek basicDay agendaWeek agendaDay',             center: 'title',             right: 'today prev,next'         },         eventClick: $scope.eventClick     } };       $scope.eventClick = function(event){      alert("Clicked event === "+event.title); }; var events = [     {title: 'All Day Event',start: new Date('Sun Dec 17 2017 09:00:00 GMT+0530 (IST)')},     {title: 'Long Event',start: new Date('Thu Dec 21 2017 10:00:00 GMT+0530 (IST)'),end: new Date('Thu Dec 21 2017 17:00:00 GMT+0530 (IST)')},     {id: 999,title: 'Repeating Event',start: new Date('Mon Dec 4 2017 09:00:00 GMT+0530 (IST)'),allDay: false} ]; $scope.eventSources = [events];
When I open web page in browser getting following error:
TypeError: calendar.fullCalendar is not a function     at Scope.scope.initCalendar (calendar.js:286)     at Object.fn (calendar.js:358)     at Scope.$digest (angular.js:15896)     at Scope.$apply (angular.js:16160)     at WindowsCtrl.window.showDialog.$scope.showDialog (windows.controller.js:690)     at HTMLSpanElement.onclick (VM1059 windows:1)
Could any one please suggest me how to resolve above issue.

@peterver, @petebacondarwin  do you have any clue on the above issue

Did you find the solution for your problem?

@Pablodotnet, The point where I injected 'ui.calendar' component was wrong, injected from proper application module resolved the issue for me.


AttributeCache should cache data versions and use them in subsequent Read/Subscribe requests

Problem
When issuing reads/subscribes, most folks aren't actually using data versions, resulting in a fairly large number of reports sent during subscription priming as well as reads. While we have API support in ReadClient to express these data versions, the actual management and storage of those data versions across transactions is not very easily achieved today.
Proposal
AttributeCache provides a great solution to cache attribute state that can be re-used across multiple read/subscribe interactions. Extending it to cache data versions that can then be used to populate subsequent read/subscribe requests transparently without application involvement would make this feature a lot more usable.
Client-side specifics:

Extend AttributeCache to also store the data version alongside other attribute state. Would be worthwhile reserving an attribute ID to track data versions to normalize this.
Provide a means to retrieve the data version through the ReadClient::Callback so that it gets routed to the AttributeCache at the time the Subscribe/Read request is getting formed. An option should be added to ReadPrepareParams to signal this modality of retrieval, which would circumvent the typical approach of retrieving the version list from the params itself.
There's a strong chance we cannot fit every single data version filter path in the Read/Subscribe request. Structure the logic such that it's a 'best-effort' semantic, such that it'll try to stuff as many of the paths as it can in the request, but if it cannot fit them all, to correctly roll back and safely close out the Read/Subscribe request.
To prioritize the right paths in the limited space available in the packet, sort the attributes by cluster by size in the cache, and form version filter paths in descending order of largest cluster in the cache to smallest.

Server-side specifics:

We need to change the logic such that we allocate a separate pool for the data version filter list (see related #16242 )
Structure the read/subscribe parsing logic to not fail if we cannot allocate any more out of the data version filter pool. This just means we'll be sub-optimal, but we shouldn't have to fail the request. This necessitates a spec change as well.
We should free up the pool once we establish a subscription, so that we can release it for use with other subscriptions.

When further thinking about the implementation, for 4.  wildcard attribute path, it seems to include wildcard endpointId, wildcard clusterId, we need to expand it to cluster instances, however, in client side, we don't have ember so we don't know emberAfEndpointCount and cannot do such expanding.


Branch refactor

Codecov Report

Merging #450 (e20835b) into master (1ef0cb3) will not change coverage.
The diff coverage is 75.00%.

@@            Coverage Diff            @@
##             master     #450   +/-   ##
=========================================
  Coverage     79.89%   79.89%
  Complexity     1069     1069
=========================================
  Files           136      136
  Lines          3208     3208
  Branches        430      430
=========================================
  Hits           2563     2563
  Misses          573      573
  Partials         72       72

Impacted Files
Coverage Δ

src/main/java/seedu/awe/MainApp.java
0.00% <0.00%> (ø)

src/main/java/seedu/awe/model/Model.java
100.00% <ø> (ø)

src/main/java/seedu/awe/model/ModelManager.java
90.35% <100.00%> (ø)

src/main/java/seedu/awe/model/UserPrefs.java
96.66% <100.00%> (ø)

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 1ef0cb3...e20835b. Read the comment docs.


Provide typings for ESM (TS error when using moduleResolution node16 or nodenext)

Hey there,
first of all I'm exited to use this Plugin after seeing the presentation on VueJS Amsterdam this week. :)
I think this Plugin has a similar issue as mentioned in https://github.com/vitejs/vite/issues/10481 because I get the same error TS2349: This expression is not callable.   Type 'typeof import("<...>/node_modules/unplugin-vue-router/dist/vite")' has no call signatures.
A current workaround is declaring the correct typings myself
declare module 'unplugin-vue-router/vite' {
    import { type Plugin } from 'vite';
    import { type Options } from 'unplugin-vue-router/options';

    const plugin: (options?: Options) => Plugin;
    export default plugin;
}

My Project files:
// tsconfig.json
{
  "compilerOptions": {
    "target": "esnext",
    "module": "nodenext",
    "moduleResolution": "nodenext",
    "outDir": "build/js",
    "noUnusedLocals": true
  }
}

// package.json
{
  "name": "my-project",
  "version": "0.0.1",
  "type": "module",
  "packageManager"<EMAIL_ADDRESS>  "scripts": {...},
  "dependencies": {
    "vue": "3.2.47",
    "vue-router": "4.1.6"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "4.0.0",
    "@vue/test-utils": "2.2.10",
    "jsdom": "21.1.0",
    "typescript": "4.9.5",
    "unplugin-vue-router": "0.3.2",
    "vite": "4.1.1",
    "vitest": "0.28.4"
  }
}

Also getting multiple errors when I try to compile my project after generating the typed routes:

I really can't get my head wrapped around the TypeScript-Node-ESM-CJS stuff so maybe it's just the state of all those frameworks/libraries (not) working together.

Try add "type": "module" to your package.json.

Try adding "type": "module" to your package.json.

It's already in there ;)
I will try to make use of TS 5.0 new "moduleResolution": "bundler". And also compiling the dependencies is not the best idea, I will try out skipLibChecks.


Adding default outputPath

ng build -w does not work #2409
Setting the default option for outputPath to the outDir property of angular.cli

Issue:
ng build -w does not work #2409

I signed it!

Fixed in https://github.com/angular/angular-cli/pull/2158


ci: simplify code coverage generation

This PR simplifies the generation of code coverage reports in the CI workflow using dart run coverage.

Codecov Report
Patch and project coverage have no change.

Comparison is base (05dddcb) 81.88% compared to head (d5b17ca) 81.88%.

:exclamation: Current head d5b17ca differs from pull request most recent head d0ed2be. Consider uploading reports for the commit d0ed2be to get more accurate results

Additional details and impacted files
@@           Coverage Diff           @@
##             main      #58   +/-   ##
=======================================
  Coverage   81.88%   81.88%
=======================================
  Files          10       10
  Lines         668      668
=======================================
  Hits          547      547
  Misses        121      121

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Fix HTML local storage block issue

Danny Edwards wasn't able to open Mailman due to Chrome blocking HTML local storage. I have to figure out a way to request access from users.

Fixed with Rich Text mailman, which uses a new browser window and window.postMessage rather than the chrome addon dialog boxes with localstorage for communication


How to Integrate with messenger ChatBot?

Hey,
I got chatterbot awesome and I think it's the coolest chatbot ever. Now I want to create an AI chatbot for messenger and wanna experiment on that. So, how can I do this? Anyone does this before?

These xamples section will guide you https://github.com/gunthercox/ChatterBot/tree/master/examples


Detecting extra keys being provided to BaseModel

Question
Hey,
First of all, thanks for the awesome work you've done with Pydantic. We have been slowly adopting Pydantic on all our projects across my team and loving it so far.
Our biggest issue so far is that we couldn't find a simple way to throw an error when erroneous keywords are passed into the BaseModel __init__ . When working with project with very large and nested configurations it is extremely easy to make a typo when creating this configuration and this error gets silently ignored.
Is there any simple way of doing this that I am unaware of?
 pydantic version: 1.4
            pydantic compiled: False
                 install path: /Users/miguelvera/env/miniconda2/envs/mirta/lib/python3.7/site-packages/pydantic
               python version: 3.7.8 | packaged by conda-forge | (default, Jul 23 2020, 03:39:37)  [Clang 10.0.0 ]
                     platform: Darwin-19.4.0-x86_64-i386-64bit
     optional deps. installed: ['typing-extensions']

Small example:
import pydantic

class Configuration(BaseModel):
    input: FilePath = 'input'
    output: FilePath = 'output'

if __name__ == '__main__':
   args_dict = {
                        "input"  :  '/mnt/mypath/inputs',
                        "outptu" :  '/myotherpath/output',
   }
   # How can I make this throw an error for receiving a keyword that does not exist? (outptu)
   Configuration(**args_dict)

Thanks in advance!

There is a model config Option called extra. By default is is set to 'ignore', but you can set it to 'forbid' to throw a validation error when an unknown attribute is included.
Would this suffice for your use case?

@philipp-sontag-by is right.
from pydantic import BaseModel, Extra, FilePath

class Configuration(BaseModel):
    input: FilePath = 'input'
    output: FilePath = 'output'

    class Config:
        extra = Extra.forbid  # or just 'forbid'

and you will have a validation error
pydantic.error_wrappers.ValidationError: 1 validation error for Configuration
outptu
  extra fields not permitted (type=value_error.extra)

Sorry for the late response.
This is exactly what I was looking for, thanks!

Hi, how to handle the duplicate keys in the request payload, I trying to raise the error if there are multiple keys with the same name
{"input" : "input", "input":"input","output":"output"}
class Configuration(BaseModel):
input: FilePath = 'input'
output: FilePath = 'output'

Please format your example code, see my answer on #4995.


missing id in castObjectToRegistration function

Hello together,
is it possible that it should have also a handler for the id property in the castObjectToRegistration function in the file "U2F.php" ? So it will also return the id of the matching key, which will be good for database storing. Or i'm handling that wrong?
Thank you and best regards,
Maisen20

Okay i try to explain what i mean.
In the PDO example on line 186 there's following code:
$reg = $u2f->doAuthenticate(json_decode($_SESSION['authReq']), getRegs($user->id), json_decode($_POST['authenticate2']));
And on the next line there is the code:
updateReg($reg);
And the update function:
function updateReg($reg) {     global $pdo;     $upd = $pdo->prepare("update registrations set counter = ? where id = ?");     $upd->execute(array($reg->counter, $reg->id)); }
The function updateReg will update the entry in the database and set the counter to the same value like the yubikey has. But the $reg parameter, which will be used in the updateReg function, has/gets no id-property from the doAuthenticate function.
I hope you understand what i mean... So that's only a "issue" on the example, or isn't it?

Ah, I see what you mean. The example code is a bit outdated and will have to use the keyHandle to find it's way in that table.


Websocket.Client.Exceptions.WebsocketException: Failed to start Websocket client, error: 'Unable to connect to the remote server'

Hi, I am getting this error 'Unable to connect to the remote server'
below full log
Websocket.Client.Exceptions.WebsocketException: Failed to start Websocket client, error: 'Unable to connect to the remote server' ---> System.Net.WebSockets.WebSocketException: Unable to connect to the remote server
  at System.Net.WebSockets.WebSocketHandle.ParseAndValidateConnectResponseAsync (System.IO.Stream stream, System.Net.WebSockets.ClientWebSocketOptions options, System.String expectedSecWebSocketAccept, System.Threading.CancellationToken cancellationToken) [0x00100] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs:337
  at System.Net.WebSockets.WebSocketHandle.ConnectAsyncCore (System.Uri uri, System.Threading.CancellationToken cancellationToken, System.Net.WebSockets.ClientWebSocketOptions options) [0x00383] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs:148
  at System.Net.WebSockets.ClientWebSocket.ConnectAsyncCore (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x000d1] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.WebSockets.Client/src/System/Net/WebSockets/ClientWebSocket.cs:157
  at Websocket.Client.WebsocketClient+<>c.<.ctor>b__17_0 (System.Uri uri, System.Threading.CancellationToken token) [0x00094] in <2b50a17598de47ed81cba7c1da265155>:0
  at Websocket.Client.WebsocketClient.StartClient (System.Uri uri, System.Threading.CancellationToken token, Websocket.Client.ReconnectionType type, System.Boolean failFast) [0x000a0] in <2b50a17598de47ed81cba7c1da265155>:0
  --- End of inner exception stack trace ---
  at Websocket.Client.WebsocketClient.StartClient (System.Uri uri, System.Threading.CancellationToken token, Websocket.Client.ReconnectionType type, System.Boolean failFast) [0x001be] in <2b50a17598de47ed81cba7c1da265155>:0
  at Websocket.Client.WebsocketClient.StartInternal (System.Boolean failFast) [0x000f3] in <2b50a17598de47ed81cba7c1da265155>:0
  at Socket.Io.Client.Core.SocketIoClient.StartSocketAsync () [0x000fc] in <341c2fa490384af5b3ab61da0d70f46d>:0
  at Socket.Io.Client.Core.SocketIoClient.OpenAsync (System.Uri uri, Socket.Io.Client.Core.Model.SocketIoOpenOptions options) [0x001b6] in <341c2fa490384af5b3ab61da0d70f46d>:0
  at DialogEvent.Droid.Service.VideoMeeting.Signalling2.Start (System.Action`1[T] callback) [0x00103] in /Users/dinomov/projects/dialogevent/DialogEvent/DialogEvent.Droid/Service/VideoMeeting/Signalling2.cs:252
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021
  at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in /Users/builder/azdo/_work/278/s/xamarin-android/src/Mono.Android/Android.App/SyncContext.cs:36
  at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in /Users/builder/azdo/_work/278/s/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:36
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in /Users/builder/azdo/_work/278/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-29/mcw/Java.Lang.IRunnable.cs:84
  at at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.21(intptr,intptr)

This looks like you are trying to run it on Xamarin, is that correct? Are you able to connect to the server from standard .NET Core console application? Also are you able to access the socket.io server to see some logs there?
This looks like a generic error when either server is not running or not accessible.

I haven't tested the library on Xamarin at all so I can't really help with that. However if you have an access to server then it could help with debugging. For example in this library I am not doing a standard socket.io protocol resolution and go straight for websocket connection (no long polling support). I had no issues connecting like that to socket.io servers but you could check whether your server supports websockets.

please see attached sample console application, it give following error even such package is added
src.zip
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Websocket.Client, Version=<IP_ADDRESS>, Culture=neutral,

Sorry for the delay, but when I test your code on Windows it runs fine except it doesn't connect to remote server with this error:

However I was not able to connect to your server even from javascript client so I would recommend to first verify that it works from JS.


Fix a potential variable misuse bug

Hi,
This pull request is a fix to a potential variable misuse bug at Src/StdLib/Lib/test/test_functools.py. Please check the changes.
Best,
Jingxuan

@LostBenjamin Thanks for the PR. This code comes from the standard CPython library so I have no idea what the intent of the test is. May be worth filing an issue on https://github.com/python/cpython to see if it is indeed a bug...

Thanks!


Mitmproxy can't resolve .local hostnames

Problem Description
If you try to search for a .local hostname (I assume that this occurs for any mdns hostname), mitmproxy will error with
[Errno -2] Name or service not known

Steps to reproduce the behavior:

Setup avahi/bonjour and see if you can connect to <your system's hostname>.local
Try to connect to  hostname.local through mitmproxy
See error

System Information
Paste the output of "mitmproxy --version" here.
Mitmproxy: 7.0.4
Python:    3.10.4
OpenSSL:   OpenSSL 1.1.1l  24 Aug 2021
Platform:  Linux-5.18.1-1-aarch64-ARCH-aarch64-with-glibc2.32

Mitmproxy: 7.0.4

Please try with the latest 8.1.1 release. I can access http://example.local/ that I've added to my /etc/hosts as <IP_ADDRESS> example.local. If it doesn't work with 8.1.1 for you we need more information. What exactly does " .local hostname that exists" mean?

Oh, I meant one that is accessible with avahi, not one in hosts.

I've never heard of avahi and I'm not familiar with the semantics of .local. Can you please explain your setup? Your "Steps to reproduce the behavior:" clearly miss a couple of steps.

I have avahi setup so I can access MDNS hostnames, which is the error.

It works if I don't use mitmproxy, so there's nothing wrong with the setup.

It works if I don't use mitmproxy, so there's nothing wrong with the setup.

As @mhils already stated, name resolution in mitmproxy boils down to getaddrinfo, which on Linux uses NSS resolution. You are correct in pointing out that there are native solutions for Python that query mDNS directly, however, that's not implemented in mitmproxy. (And I doubt it will.)
Please run the following code in python: (replacing msdn-hostname with the appropriate name)
import socket
print(socket.getaddrinfo("msdn-hostname.local", 80, proto=socket.IPPROTO_TCP))

If that returns an IP, there might be something wrong with mitmproxy.
If not, it's your local NSS configuration and there is nothing mitmproxy can do. In that case the question is, how does your nsswitch.conf look like? Did you configure avahi to respond to more than just the hostname? Check with the nss-mdns documentation for further guidance.


Replace GraphiQL with GraphQL Playground

GraphiQL, the interactive API playground that comes bundled with graphql.js does not support setting HTTP headers. This limits the playground functionality to read-only queries. Any mutations that require user authentication cannot be performed using GraphiQL.
The web version of GraphQL Playground on the other hand supports customizing HTTP headers as well as many additional features like tabbed interface and color schemes for the interface.
I've replaced mentions of GraphiQL in the wiki.

You might wanna update the README too


Checkout Dialog too small.

I think we can increase the size of the Checkout Dialog by using a fulscreen dialog instead.

@jerryOkafor The actual reason why I went for a centred non-fullscreen dialog was an attempt to replicate the design of the official Paystack checkout UI.
Please, why do you think we should make it fullscreen?

@jerryOkafor The actual reason why we went for a centred non-fullscreen dialog was an attempt to replicate the design of the Paystack web checkout UI.
You have a point though. PCs and mobile phone don't have the same screen real-estate.
Maybe we should add an optional fullscreen dialog. The configuration parameter can be passed to the checkout function. What do think about this?

That would be nice. I was working on something before now, first choice was a dialog but it did not give me all I wanted and I made it a fullscreen. I am sure fullscreen would be nice.


Usage Documentation and helper functions

While informative, the current README.md does not explain much about using the SDK. https://github.com/perun-network/erdstall-ts-sdk/blob/main/src/e2e/sdk_actions.ts does explain most of the things below, but it is not linked from the README.md and not in an easy-to-find place, thus I have not found it while looking how to implement an ETH deposit.

The creation and initialization of a Client is shown, but not how a Session object can be created (or even what type it is or how/where to import it.
Reading just the README.md and github pages it is hard to figure out how to correctly make a ETH/ERC20 deposit and wait for it to be done. This might be worth putting into the README.md, especially since waiting for the deposit to finish is not intuitive. The current README.md does not explain how to make an asset list for depositing ETH or how to correctly wait for the deposit to finish, for example. Perhaps it would even be useful to have a helper function for depositing a single token (like the deposit function used below)
Checking the balance of an account - This is a pretty basic function that is (probably) needed by almost all projects. As such it might be worth adding a helper function client.getBalanceOf(address, token) or a function on the Account, that returns the balance as a bigint (or at least describe how to do it, see below how I implemented it, for example). Needing two .values and having to convert the token to a string first isn't intuitive. That would allow something like the following: client.getAccount(address).balance(token)

async function balanceOf(erdstall, address, token) {
        let accountData = await erdstall.getAccount(address)
        let amount = accountData.values.values.get(token.toString())
        if (amount === undefined)
                return 0
        else
                return amount.value
}

A different point, but it might be useful to (in addition to client.on and client.once) have the ability to just delay execution until an event happened, instead of having to use a callback with client.once: let receipt = await client.waitForEvent("receipt"). As shown in the example below this is possible but not as nice to use/must be implemented if needed. Maybe even add an optional callback that is called to see if the given event value/object is what the user is waiting for. This would make chaining multiple calls (e.g. an offChainTransfer and getAccount calls) using async/await easier. (it could also be that waiting for the receipt is not needed here, I'm not sure)
// await erdstallEvent(erdstall, "receipt")
async function erdstallEvent(erdstall, name) {
        return new Promise((resolve, reject) => {
                try {
                        erdstall.once(name, x => {
                                resolve(x)
                        })
                } catch (error) {
                        reject(error)
                }
        })
}

// Example usage
async function run(erdstall) {
        await deposit(erdstall, ETH_TOKEN, BigInt(100))
        await printBalanceOf(erdstall, address, ETH_TOKEN, "WEI")
        await printBalanceOf(erdstall, address2, ETH_TOKEN, "WEI")

        // Make an off-chain transaction, waiting for offChainTransferTo (erdstall.transferTo) to finish, i.e. getting the receipt does not wait long enough for the upcomming printBalanceOf calls to get the new balances. Though waiting on any receipt probably isn't a good solution.
        await offChainTransferTo(erdstall, address2, ETH_TOKEN, 50)
        await erdstallEvent(erdstall, "receipt")

        // Print balances again
        await printBalanceOf(erdstall, address, ETH_TOKEN, "WEI")
        await printBalanceOf(erdstall, address2, ETH_TOKEN, "WEI")
}

async function offChainTransferTo(erdstall, toAddress, token, amount) {
        const assets = new Assets({
                token: token,
                asset: new Amount(amount)
        })
        const receipt = await (erdstall.transferTo(assets, toAddress)).receipt
        return receipt
}

Await events via await client.next("event-name").


freq and read calculations done together

plus various bug fixes

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/mango-prb/61/
Test PASSed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/mango-prb/62/
Test PASSed.


Data race in NIOCore.ByteBuffer._Storage.reallocStorage

I'm seeing a data race condition in NIOCore.ByteBuffer._Storage.reallocStorage when running multiple requests at the same time using Swift concurrency. I'm using async-http-client to perform the requests, but since the issue seems to be inside NIOCore, opened it here.  See log bellow.
WARNING: ThreadSanitizer: data race (pid=41722)
  Write of size 8 at 0x000106946a18 by thread T1:
    #0 ByteBuffer._Storage.reallocStorage(capacity:) <null>:4382952 (PROJECT_NAME:arm64+0x624d20)
    #1 ByteBuffer._ensureAvailableCapacity(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x626784)
    #2 ByteBuffer._setBytes(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x627670)
    #3 ByteBuffer.setBytes(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x62d7bc)
    #4 closure #1 in ByteBuffer.setBuffer(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x61be18)
    #5 partial apply for closure #1 in ByteBuffer.setBuffer(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x61beb0)
    #6 ByteBuffer.withUnsafeReadableBytes<A>(_:) <null>:4382952 (PROJECT_NAME:arm64+0x62a800)
    #7 ByteBuffer.setBuffer(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x61bd10)
    #8 ByteBuffer.writeBuffer(_:) <null>:4382952 (PROJECT_NAME:arm64+0x61c0e8)
    #9 ByteBuffer.writeImmutableBuffer(_:) <null>:4382952 (PROJECT_NAME:arm64+0x61d394)
    #10 HTTP2FrameDecoder.AccumulatingPayloadParserState.accumulate(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa77584)
    #11 closure #4 in HTTP2FrameDecoder.append(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa80dec)
    #12 partial apply for closure #4 in HTTP2FrameDecoder.append(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa9302c)
    #13 HTTP2FrameDecoder.avoidingParserCoW<A>(_:) <null>:4382952 (PROJECT_NAME:arm64+0xa803ec)
    #14 HTTP2FrameDecoder.append(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa7f70c)
    #15 NIOHTTP2Handler.channelRead(context:data:) <null>:4382952 (PROJECT_NAME:arm64+0xa1f088)
    #16 protocol witness for _ChannelInboundHandler.channelRead(context:data:) in conformance NIOHTTP2Handler <null>:4382952 (PROJECT_NAME:arm64+0xa21124)
    #17 ChannelHandlerContext.invokeChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d0d7c)
    #18 ChannelHandlerContext.fireChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d8a3c)
    #19 _ChannelInboundHandler.channelRead(context:data:) <null>:4382952 (PROJECT_NAME:arm64+0x6b3b7c)
    #20 protocol witness for _ChannelInboundHandler.channelRead(context:data:) in conformance NWWaitingHandler<A> <null>:4382952 (PROJECT_NAME:arm64+0x4b6990)
    #21 ChannelHandlerContext.invokeChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d0d7c)
    #22 ChannelHandlerContext.fireChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d8a3c)
    #23 _ChannelInboundHandler.channelRead(context:data:) <null>:4382952 (PROJECT_NAME:arm64+0x6b3b7c)
    #24 protocol witness for _ChannelInboundHandler.channelRead(context:data:) in conformance HTTPClient.NWErrorHandler <null>:4382952 (PROJECT_NAME:arm64+0x4b50b8)
    #25 ChannelHandlerContext.invokeChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d0d7c)
    #26 ChannelPipeline.fireChannelRead0(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6cba9c)
    #27 ChannelPipeline.fireChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6cb8dc)
    #28 NIOTSConnectionChannel.dataReceivedHandler(content:context:isComplete:error:) <null>:4382952 (PROJECT_NAME:arm64+0xee5e90)
    #29 implicit closure #4 in implicit closure #3 in NIOTSConnectionChannel.read0() <null>:4382952 (PROJECT_NAME:arm64+0xee59d8)
    #30 partial apply for implicit closure #4 in implicit closure #3 in NIOTSConnectionChannel.read0() <null>:4382952 (PROJECT_NAME:arm64+0xeeb978)
    #31 closure #1 in NWConnection.receiveMessage(completion:) <null>:4382952 (libswiftNetwork.dylib:arm64e+0x16c88)
    #32 _dispatch_client_callout <null>:4382952 (libdispatch.dylib:arm64e+0x4500)

  Previous read of size 8 at 0x000106946a18 by thread T2:
    #0 ByteBuffer._slicedStorageBuffer.getter <null>:4382952 (PROJECT_NAME:arm64+0x627a00)
    #1 ByteBuffer.withUnsafeReadableBytes<A>(_:) <null>:4382952 (PROJECT_NAME:arm64+0x62a790)
    #2 ByteBuffer.setBuffer(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x61bd10)
    #3 ByteBuffer.writeBuffer(_:) <null>:4382952 (PROJECT_NAME:arm64+0x61c0e8)
    #4 Request.getBodyData() <null>:4382952 (PROJECT_NAME:arm64+0x117a6c8)
    #5 swift::runJobInEstablishedExecutorContext(swift::Job*) <null>:4382952 (libswift_Concurrency.dylib:arm64e+0x404c0)

  Location is heap block of size 64 at 0x000106946a00 allocated by thread T2:
    #0 __sanitizer_mz_malloc <null>:4382952 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x5c29c)
    #1 _malloc_zone_malloc_instrumented_or_legacy <null>:4382952 (libsystem_malloc.dylib:arm64e+0x20cfc)
    #2 ByteBuffer._Storage.allocateStorage(capacity:) <null>:4382952 (PROJECT_NAME:arm64+0x6245a0)
    #3 ByteBuffer._Storage.reallocSlice(_:capacity:) <null>:4382952 (PROJECT_NAME:arm64+0x624890)
    #4 ByteBuffer._copyStorageAndRebase(capacity:resetIndices:) <null>:4382952 (PROJECT_NAME:arm64+0x625b40)
    #5 ByteBuffer._copyStorageAndRebase(extraCapacity:resetIndices:) <null>:4382952 (PROJECT_NAME:arm64+0x6263bc)
    #6 ByteBuffer._setBytes(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x6275e4)
    #7 ByteBuffer.setBytes(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x62d7bc)
    #8 closure #1 in ByteBuffer.setBuffer(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x61be18)
    #9 partial apply for closure #1 in ByteBuffer.setBuffer(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x61beb0)
    #10 ByteBuffer.withUnsafeReadableBytes<A>(_:) <null>:4382952 (PROJECT_NAME:arm64+0x62a800)
    #11 ByteBuffer.setBuffer(_:at:) <null>:4382952 (PROJECT_NAME:arm64+0x61bd10)
    #12 ByteBuffer.writeBuffer(_:) <null>:4382952 (PROJECT_NAME:arm64+0x61c0e8)
    #13 ByteBuffer.writeImmutableBuffer(_:) <null>:4382952 (PROJECT_NAME:arm64+0x61d394)
    #14 HTTP2FrameDecoder.SimulatingDataFramesParserState.accumulate(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa794fc)
    #15 closure #5 in HTTP2FrameDecoder.append(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa812a8)
    #16 partial apply for closure #5 in HTTP2FrameDecoder.append(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa92f58)
    #17 HTTP2FrameDecoder.avoidingParserCoW<A>(_:) <null>:4382952 (PROJECT_NAME:arm64+0xa803ec)
    #18 HTTP2FrameDecoder.append(bytes:) <null>:4382952 (PROJECT_NAME:arm64+0xa7f848)
    #19 NIOHTTP2Handler.channelRead(context:data:) <null>:4382952 (PROJECT_NAME:arm64+0xa1f088)
    #20 protocol witness for _ChannelInboundHandler.channelRead(context:data:) in conformance NIOHTTP2Handler <null>:4382952 (PROJECT_NAME:arm64+0xa21124)
    #21 ChannelHandlerContext.invokeChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d0d7c)
    #22 ChannelHandlerContext.fireChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d8a3c)
    #23 _ChannelInboundHandler.channelRead(context:data:) <null>:4382952 (PROJECT_NAME:arm64+0x6b3b7c)
    #24 protocol witness for _ChannelInboundHandler.channelRead(context:data:) in conformance NWWaitingHandler<A> <null>:4382952 (PROJECT_NAME:arm64+0x4b6990)
    #25 ChannelHandlerContext.invokeChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d0d7c)
    #26 ChannelHandlerContext.fireChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d8a3c)
    #27 _ChannelInboundHandler.channelRead(context:data:) <null>:4382952 (PROJECT_NAME:arm64+0x6b3b7c)
    #28 protocol witness for _ChannelInboundHandler.channelRead(context:data:) in conformance HTTPClient.NWErrorHandler <null>:4382952 (PROJECT_NAME:arm64+0x4b50b8)
    #29 ChannelHandlerContext.invokeChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6d0d7c)
    #30 ChannelPipeline.fireChannelRead0(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6cba9c)
    #31 ChannelPipeline.fireChannelRead(_:) <null>:4382952 (PROJECT_NAME:arm64+0x6cb8dc)
    #32 NIOTSConnectionChannel.dataReceivedHandler(content:context:isComplete:error:) <null>:4382952 (PROJECT_NAME:arm64+0xee5e90)
    #33 implicit closure #4 in implicit closure #3 in NIOTSConnectionChannel.read0() <null>:4382952 (PROJECT_NAME:arm64+0xee59d8)
    #34 partial apply for implicit closure #4 in implicit closure #3 in NIOTSConnectionChannel.read0() <null>:4382952 (PROJECT_NAME:arm64+0xeeb978)
    #35 closure #1 in NWConnection.receiveMessage(completion:) <null>:4382952 (libswiftNetwork.dylib:arm64e+0x16c88)
    #36 _dispatch_client_callout <null>:4382952 (libdispatch.dylib:arm64e+0x4500)

  Thread T1 (tid=15888682, running) is a GCD worker thread

  Thread T2 (tid=15888683, running) is a GCD worker thread

SUMMARY: ThreadSanitizer: data race (PROJECT_NAME:arm64+0x624d20) in ByteBuffer._Storage.reallocStorage(capacity:)+0x280

Please let me know if more info is needed.

This looks to me like a bug in TSAN's support of Swift concurrency: ByteBuffer is a copy-on-write type, and so there isn't a data race here. Here's the implementation of _setBytes (on the write stack):
https://github.com/apple/swift-nio/blob/16b5b2b793e9da4331874ee2e34aae4435428791/Sources/NIOCore/ByteBuffer-core.swift#L434-L445
As you can see on line 438, we implement a CoW check before we get to _ensureAvailableCapacity on line 442. This means we know the backing storage is uniquely referenced.
The prior read is therefore clearly not conflicting with this write: you cannot possibly be holding the same variable as the one we wrote through. This smells like TSAN not knowing enough about Swift Concurrency, which has been a long-standing issue.

Hm... got it! That means I can ignore this?
Thanks for the quick response!

Yes, I believe so.


Add Test Your Might by Techno Syndrome

Song Name
Test Your Might
Artist Name
Techno Syndrome
Source
Youtube
Youtube Link
EAwWPadFsOA
Direct File Link
No response
Song ID
576033
Start Offset [ms]
0
Extra
Created from Auto Nong.
Created for level: 3590128
Downloaded: No

accept

Принять

принять


[backport] Support ChainerX in PTB gentxt example

Backport of #7314

[automatic post] Jenkins, test this please.

Jenkins CI test (for commit 71cfa76680cecb432361ea694c94ee5e197480c7, target branch v6) succeeded!

LGTM!


Update readme for packagingVersion 3.0

New Table of Contents
New Action based subsections

Publish a Package
Repository Consumption

Fix a few broken links and inaccuracies that are no longer valid for v3
repos.

@tamarrow @jsancio @cruhland Please review. It's probably easier to read the updated readme rather than trying to read the diff.

Content of the document matches my understanding of how Universe v3 works, so once my comments on syntax are addressed, I'd say :ship: it.


fix link to thermorawfileparser

it is case sensitive

Hi @martenson I cherry picked your commit to there https://github.com/galaxyproteomics/tools-galaxyp/pull/560


Android ImageView should resize network images

I'm writing an app that is heavy on network images of unbounded size that are not under my control, and I'm running into OOM issues. My guess is that ReactImageView.java shouldResize() should at least let the caller ask for resizing if not default to resizing any network image. Any hope of getting this added/fixed? Thanks!

@facebook-github-bot label android

This would be a question for Fresco. Can you post there please? https://github.com/facebook/fresco

I'm not sure that's true. shouldResize() in ReactImageView.java implies
that react code is making this decision?
On Sun, Mar 20, 2016, 12:12 PM Martin Konicek<EMAIL_ADDRESS>wrote:

This would be a question for Fresco. Can you post there please?
https://github.com/facebook/fresco
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/facebook/react-native/issues/6514#issuecomment-198994011


Pr/61

when running this on my side it seems as if prices has been bugged in your end catalog shows prices as $999 , $1024 etc how prices is populated seems broken now

disregard


Scum

Game Title
Scum
Game Website
https://scumgame.com
Anti-Cheat Software
Easy Anti-Cheat
Status of the Anti-Cheat
❔ Unconfirmed
Proof of Mention
N/A

I got an email response from SCUM devs regarding enabling anticheat when I reached out;

Hello Matty Wyett-Simmonds,
The anti-cheat upgrade has nothing to do with the compatibility with the Linux operating system, the game is not compatible with Linux as of now and we do not have an ETA as to when it will be.
Unfortunately, we would still need to spend a significant amount of time to enable the game on Linux and that is not something that we have time for at the moment, hopefully in the future, we will be able to enable it.
Hopefully, we will be able to enable Linux to be supported for SCUM, unfortunately, at the moment, we are dealing with some higher-priority stuff so we don't have time to investigate the process to get it enabled, once we cover high-priority stuff this should be easier to do.
Good luck with your project as well, and it's nice to hear others from the industry like our game. :)
Best regards,
xKiCkx


Code suggestion in axaml is not working

Describe the bug
Hi everyone!
@prashantvc after updating the extension to version 0.0.27, I discovered that the snippets were no longer displayed.
The picture looks like this:

After confirming the action, the following entries appear in the logs:
2024-01-18 23:43:02.210 [info] [EXT - INFO] Solution data path path: C:\Users\Sobirjon\AppData\Local\Temp\selfscale2.sln.json
2024-01-18 23:43:02.297 [info] parser process args: C:\Windows\system32\cmd.exe,/d,/s,/c,"dotnet "c:\Users\Sobirjon\.vscode\extensions\avaloniateam.vscode-avalonia-0.0.27\solutionParserTool\SolutionParser.dll" "c:\Users\Sobirjon\Desktop\Projects\selfscale2\selfscale2.sln" --sdk 7.0"
2024-01-18 23:43:02.514 [info] parser process exited<PHONE_NUMBER>

The target platform of this project is .net 8.0, but in the logs it seems to me that .net 7.0 is used.
To Reproduce
Open .axaml file and write some code.
Avalonia for VS Code
0.0.27
Avalonia version
11.0.7
VS Code version
1.85.1
Relevant log output
2024-01-18 23:25:30.323 [info] [Trace - 11:25:30 PM] Received notification 'window/logMessage'.
2024-01-18 23:25:30.323 [info] [Info  - 11:25:30 PM] AvaloniaLanguageServer.Handlers.TextDocumentSyncHandler: ** DidOpenText: file:///c:/Users/Sobirjon/Desktop/Projects/selfscale2/SelfScale/Views/PrintPieceStickerWindow.axaml | Uri='file:///c:/Users/Sobirjon/Desktop/Projects/selfscale2/SelfScale/Views/PrintPieceStickerWindow.axaml'
2024-01-18 23:25:36.336 [info] [Trace - 11:25:36 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:37.604 [info] [Trace - 11:25:37 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:37.608 [info] [Trace - 11:25:37 PM] Sending request 'textDocument/completion - (1)'.
2024-01-18 23:25:37.664 [info] [Trace - 11:25:37 PM] Received response 'textDocument/completion - (1)' in 56ms.
2024-01-18 23:25:37.682 [info] [Trace - 11:25:37 PM] Sending request 'completionItem/resolve - (2)'.
2024-01-18 23:25:37.695 [info] [Trace - 11:25:37 PM] Received response 'completionItem/resolve - (2)' in 13ms.
2024-01-18 23:25:39.296 [info] [Trace - 11:25:39 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:39.398 [info] [EXT - INFO] Solution data path path: C:\Users\Sobirjon\AppData\Local\Temp\selfscale2.sln.json
2024-01-18 23:25:39.463 [info] parser process args: C:\Windows\system32\cmd.exe,/d,/s,/c,"dotnet "c:\Users\Sobirjon\.vscode\extensions\avaloniateam.vscode-avalonia-0.0.27\solutionParserTool\SolutionParser.dll" "c:\Users\Sobirjon\Desktop\Projects\selfscale2\selfscale2.sln" --sdk 7.0"
2024-01-18 23:25:40.444 [info] [Trace - 11:25:40 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:41.442 [info] [Trace - 11:25:41 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:41.836 [info] [Trace - 11:25:41 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:41.986 [info] [Trace - 11:25:41 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:42.012 [info] parser process exited<PHONE_NUMBER>
2024-01-18 23:25:42.237 [info] [Trace - 11:25:42 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:42.481 [info] [Trace - 11:25:42 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:42.696 [info] [Trace - 11:25:42 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:42.867 [info] [Trace - 11:25:42 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:43.038 [info] [Trace - 11:25:43 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:43.548 [info] [Trace - 11:25:43 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:44.499 [info] [Trace - 11:25:44 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:44.501 [info] [Trace - 11:25:44 PM] Sending request 'textDocument/completion - (3)'.
2024-01-18 23:25:44.515 [info] [Trace - 11:25:44 PM] Received response 'textDocument/completion - (3)' in 14ms.
2024-01-18 23:25:44.520 [info] [Trace - 11:25:44 PM] Sending request 'completionItem/resolve - (4)'.
2024-01-18 23:25:44.525 [info] [Trace - 11:25:44 PM] Received response 'completionItem/resolve - (4)' in 5ms.
2024-01-18 23:25:49.485 [info] [Trace - 11:25:49 PM] Sending notification 'textDocument/didChange'.
2024-01-18 23:25:49.541 [info] [EXT - INFO] Solution data path path: C:\Users\Sobirjon\AppData\Local\Temp\selfscale2.sln.json
2024-01-18 23:25:49.614 [info] parser process args: C:\Windows\system32\cmd.exe,/d,/s,/c,"dotnet "c:\Users\Sobirjon\.vscode\extensions\avaloniateam.vscode-avalonia-0.0.27\solutionParserTool\SolutionParser.dll" "c:\Users\Sobirjon\Desktop\Projects\selfscale2\selfscale2.sln" --sdk 7.0"
2024-01-18 23:25:49.828 [info] parser process exited<PHONE_NUMBER>

Additional context
No response

That's rather strange, I removed the use of dotnet 7.0! Let me figure this out

@SignalMQ Could you try this build, see if you still hit the issue
https://github.com/AvaloniaUI/AvaloniaVSCode/releases/tag/v0.0.28

@SignalMQ Could you try this build, see if you still hit the issue https://github.com/AvaloniaUI/AvaloniaVSCode/releases/tag/v0.0.28

https://github.com/AvaloniaUI/AvaloniaVSCode/assets/77734001/d3b79cfa-6ecf-476f-b3b6-2179c9e2071c

@SignalMQ Is it possible to share the sample project? I am not able to reproduce it

Hi Prashant, I send my project to you via email in your profile.

yes please, send it to the email listed in the profile

@SignalMQ I believe this is project specific
Could you upload the sample project here
https://www.dropbox.com/request/34mjgEhk2uelmHGlzYRP

@SignalMQ I believe this is project specific Could you upload the sample project here https://www.dropbox.com/request/34mjgEhk2uelmHGlzYRP

done

Hi. Have same problem. I'm using .net 6.0 and neither preview or auro-completion does not work. Problem is gone after installing .net 8.0 runtime. Should .NET Install Tools (VS Code extension) install 8.0 runtime for me locally?

This is was issue with NewLine character, for some reason Environment.NewLine was incorrect in Windows
Anyway could you try this release
https://github.com/AvaloniaUI/AvaloniaVSCode/releases/tag/v0.0.30
Let me know if you still hit the issue

logs.log
https://github.com/AvaloniaUI/AvaloniaVSCode/assets/77734001/2dd26f95-46b0-4ce5-8311-31a6925dff95
Hello @prashantvc.
I'm having some problems with the new extension. The description of this problem will be long, so I decided to make a video of it. I apologize for the quality of the video, due to GitHub limitations I had to lower it.


/api/v2/users/username return 503

Describe the bug
When login with GitLab, the UI is always rendering. And /api/v2/users/username return 503.
{
    "code": 14,
    "message": "connection error: desc = \"error reading server preface: EOF\"",
    "details": []
}

Steps to reproduce

Login with GitLab
UI crashed

Screenshots or additional context
No response

At last, I found the root cause is the HTTP_PROXY/HTTPS_PROXY environment variable.
It looks like the server architecture changed, there're some local RPC requests go to the proxy by mistake.
Hi @boojack , how can I use the solution described in https://github.com/orgs/usememos/discussions/1893 for v0.15.0?I've added http://<IP_ADDRESS> and http://localhost to NO_PROXY, but it didn't work.

@sudoexec I cannot reproduce in demo site. https://demo.usememos.com/api/v2/users/demohero

Hi @boojack, Look here:

At last, I found the root cause is the HTTP_PROXY/HTTPS_PROXY environment variable.
It looks like the server architecture changed, there're some local RPC requests go to the proxy by mistake.
Hi @boojack , how can I use the solution described in https://github.com/orgs/usememos/discussions/1893 for v0.15.0?I've added http://<IP_ADDRESS> and http://localhost to NO_PROXY, but it didn't work.


Pydantic Warning Field "model_XXXX" has conflict with protected namespace "model_".

I have some graphql schema that have fields starting with model_ in my current example model_probability, this cause the following warning at runtime:
lib/python3.9/site-packages/pydantic/_internal/fields.py:127: UserWarning: Field "model_probability" has conflict with protected namespace "model".
You may be able to resolve this warning by setting model_config['protected_namespaces'] = ().
warnings.warn(
the following pydantic webpage (https://docs.pydantic.dev/latest/usage/model_config/#protected-namespaces) seems to suggest that fields beginning with model_ need to be added to an override list or the ConfigDict in the code can have
model_config = ConfigDict(protected_namespaces=())
set, maybe added the protected_namespaces=() to the generated code is the easiest fix.

Hey, we're already taking care of actual collisions with existing attributes (those that produce exceptions not warnings #196). It looks like you're right, and protected_namespaces=() will solve warnings produced by model_* fields.


Better error message for when alias isn't configured

The error that's raised here is vague. It'd help the usability of this library if a specific error could be raised - ideally, it'd be somewhere along these lines:

Could not read the policy's user. You may want to configure an alias, which you can do as follows:
Pundit::Matchers.configure do |config|
 config.user_alias = :account
end

At present, it looks like this:
     Failure/Error: it { is_expected.to permit_action(:create) }

     NoMethodError:
       undefined method `user' for #<SomePolicy:0x0000557180320888>
       Did you mean?  super
     # /bundle_cache/ruby/2.7.0/gems/pundit-matchers-1.6.0/lib/pundit/matchers.rb:196:in `public_send'
     # /bundle_cache/ruby/2.7.0/gems/pundit-matchers-1.6.0/lib/pundit/matchers.rb:196:in `block (2 levels) in <module:Pundit>'

Hi, I have a fix for this, but I think that this should be removed if we want to support multiple aliases (eg: Post policy has user while Message policy has account

It would be great to replace this with a solution that supports multiple aliases.

It can be an extra hash to look into
Like default_user_alias (symbol and fallback)
default_user_aliases: { 'Message' => :account }
This will be easy with the refactor that I'm doing


ee stack purge php

A little problem :)
root@test:~# ee --debug stack purge php
usage: ee (sub-commands ...) [options ...] {arguments ...}
ee: error: unrecognized arguments: php
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/ee-3.0-py3.4.egg/ee/cli/main.py", line 84, in main
app.run()
File "/usr/local/lib/python3.4/dist-packages/cement-2.4.0-py3.4.egg/cement/core/foundation.py", line 694, in run
self.controller._dispatch()
File "/usr/local/lib/python3.4/dist-packages/cement-2.4.0-py3.4.egg/cement/core/controller.py", line 455, in _dispatch
return func()
File "/usr/local/lib/python3.4/dist-packages/cement-2.4.0-py3.4.egg/cement/core/controller.py", line 458, in _dispatch
self._parse_args()
File "/usr/local/lib/python3.4/dist-packages/cement-2.4.0-py3.4.egg/cement/core/controller.py", line 435, in _parse_args
self.app._parse_args()
File "/usr/local/lib/python3.4/dist-packages/cement-2.4.0-py3.4.egg/cement/core/foundation.py", line 873, in _parse_args
self._parsed_args = self.args.parse(self.argv)
File "/usr/local/lib/python3.4/dist-packages/cement-2.4.0-py3.4.egg/cement/ext/ext_argparse.py", line 47, in parse
return self.parse_args(arg_list)
File "/usr/lib/python3.4/argparse.py", line 1729, in parse_args
self.error(msg % ' '.join(argv))
File "/usr/lib/python3.4/argparse.py", line 2384, in error
self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
File "/usr/lib/python3.4/argparse.py", line 2371, in exit
_sys.exit(status)
SystemExit: 2
root@test:~#

oh i figured out. i needed to  put --php at the end. sorry !


Replace sparkJava dependency with Spring boot

SparkJava has not been updated in some time (last commit to the repo was 2 years ago).
We want to

Avoid vulnerabilities
Allow for native compiling (with GraalVM) without any of the weirdness sparkjava produces

Tasks:

Remove the sparkjava from dependency from gradle and replace it with spring boot
Make sure, that all RestEndpoints (currently Servlet and AlgorithmTester) still work.
Make sure static file hosting here still works i.e. that the frontend can be started like this

Currently working:

Hosting of most GET methods
Serving of frontend

Current NOT working:

Pasting in a URL
Some get methods seem to be called with 'bad requests' - especially the methods where models are sent over


WebSocket API change to make room for other connection options (SSL pinning)

This is a simple groundwork PR to allow options to be passed to the WebSocket constructor. It represents a minor change to an undocumented part of the API, moving headers to within options.
This will be a BC for anyone manually specifying headers other than origin but a) that's not a common use case with WebSockets and b) it's not documented even in code and wouldn't currently pass a flow check.
NB: The third argument to the WebSocket constructor isn't part of the W3C spec, so I think this is a good place for RN-specific named parameters, better than adding a fourth argument. protocols needs to stay where it is, in line with the spec.
Motivation
If this goes through I'd like to build on it by adding an additional connection option for SSL certificate pinning, as already supported by the underlying okhttp and RCTSRWebSocket. It could later be expanded for various other uses.
Currently, there's no way for a WebSocket user to specify any connection options other than url, protocol and headers. The fact that WebSocket connects in its constructor means any options have to go in there.
Test Plan
Connect to a websocket server using iOS and Android, observe the connection headers:

Without specifying origin, the default header should be set
Specifying it in the old way new WebSocket(url, protocols, { origin: 'customorigin.com' })
Specifying it in the new way new WebSocket(url, protocols, { headers: { origin: 'customorigin.com' }}).

I've tested myself using the test app with iOS and Android.

Can you log a warning in the backwards compatibility codepath? That way, in a couple of release, we can remove it altogether.

@javache Done (after a brief fight with eslint!) - now 'origin' gets a deprecation warning, any other unrecognised option gets a warning and discarded.
Eg with:
new WebSocket(this.state.url, null, {
  origin: 'test',
  headers: {
    'X-Header': 'test'
  },
  'X-Header-2': 'Test'
});

options is resolved to
{
  headers: {
    'X-Header': 'test',
    origin: 'test'
  }
}

and we get warnings:


Add templating support for cloud-init in lima.yaml

To avoid inflating the numbers of the limayaml fields, can we consider to support templating cloud-init yaml in limayaml?

Originally posted by @AkihiroSuda in https://github.com/lima-vm/lima/pull/2119#discussion_r1446783563
I think we should consider it, but it may take a bit of an effort. Here is what I think is needed (just brainstorming; please correct if I'm missing something):

Import the cloud-init json schema
Do whatever is necessary to make sure it is OpenAPI compliant (if it isn't already)
Turn it into a Go package using swagger
Add cloudInit field to lima.yaml
Create additional validations for potential conflicts with settings managed by Lima
Modify cidata to merge our settings into the cloud-init data structure; we can no longer use Go templating, but need to encode the structs to YAML.
Update lima-init in alpine-lima to deal with potential formatting changes

If this works, then we should decide how we import the JSON schema into the lima repo, how we update it etc. I think it would be best to have a separate repo for this, that maybe uses git submodules to include upstream cloud-init, and then checks in the swagger output as a Go module. That way we don't need to require swagger for building Lima.

Can we just use map[string]interface{} ?

We could, although it makes updating fields a bit awkward when we are merging in the fields that Lima needs to control. Maybe we can use something like https://github.com/Jeffail/gabs?
Also, I haven't checked if encoding the data again as YAML will write out the fields with lowercase names. I guess it needs to, if it supports proper round-tripping.
But how do we validate the user-data part if we don't use the schema? Hope that the VM will still somehow boots up, and let people look at /var/log/cloud-init-output.log?


Mac/Chrome -  Image - Zoom is too poor

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: v9.0.78-5
Reproducible in staging?: Yes
Reproducible in production?: Yes
If this was caught during regression testing, add the test name, ID and link from TestRail: https://expensify.testrail.io/index.php?/tests/view/5345498
Email or phone of affected tester (no customers<EMAIL_ADDRESS>Issue reported by: Applause Internal Team
Device used: macOS Sequoia 15.1.1 / Desktop / Web
App Component: Chat Report View
Action Performed:

Open the Desktop app or go to: https://staging.new.expensify.com/
Go to 1:1 convo
Upload this large file (check the attachments)
Open the file
Click on the image to zoom in

Expected Result:
The user is able to zoom in and see the image clearly
Actual Result:
The user can zoom in, but the zoom is too poor compared to web zoom and other platforms.
Workaround:
Unknown
Platforms:

[ ] Android: Standalone
[ ] Android: HybridApp
[ ] Android: mWeb Chrome
[ ] iOS: Standalone
[ ] iOS: HybridApp
[ ] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos

https://github.com/user-attachments/assets/148ccdb2-8cad-46e8-bb0e-a79e17e7fc8d
View all open jobs on GitHub

I think this was introduced on purpose to improve performance in https://github.com/Expensify/App/issues/38180.