Improve Google Assistant support for climate operation modes

Description:
Corrects climate.STATE_OFF to climate.STATE_IDLE, adds some missing states, and refactors the mapping code between Google and HA modes to match the Alexa component.
Example entry for configuration.yaml (if applicable):
google_assistant:
  exposed_domains:
    - climate

Checklist:

[x] The code change is tested and works locally.
[x] Local tests pass with tox. Your PR cannot be merged unless tests pass
[x] Tests have been added to verify that the new code works.

By any chance will this fix #13158 ?

By any chance will this fix #13158 ?

No, the zwave component needs to be changed to report standard climate.STATE_* values for its climate.ATTR_OPERATION_MODE or else it can't integrate with any other services.

This PR seems to have gone stale. Closing it.


Offline Installation

Hi ,
I would like to know if there is a way to install Finatra in systems without internet access. Is there like an installable. I would like to install finatra in a private network which does not have Internet connectivity. On trying out with sbt , it is failing to download the dependencies from the internet.
Thanks in advance

One way is to download all dependencies in a computer with internet access and the copy them (usually at ~/.ivy2/).
Another way is to build your system in a computer with internet access and build a fat-jar using something like sbt-assembly (there are examples of this in finatra examples folder).

+1 for fatjar

@loss2profit there is no installable for the current version of Finatra. It is expected to be added as a set of binary dependencies for use and is available in a public repository, Maven Central.
As others have pointed out, there are many different ways to build an application that has all of its binary dependencies included and how to proceed depends on what system you are using to build your software. Thanks.


New Kernel Timeout API

New Kernel Timeout API
Opaque timeout type
A new type will be added, k_timeout_t, which represents an abstracted expiration time interpreted by the kernel.  This will not have user-visible fields.  It is intended to be initialized only via a new macro API.

The data type stored in the timeout will be exposed to the user as an unsigned k_ticks_t typedef.   The size of this type (and thus the internal precision of the kernel timeout tracking) will be selectable via a CONFIG_SYS_TIMEOUT_64BIT kconfig.  Systems with long uptimes and rapid tick rates will be able to select a 64 timeout type to prevent rollover.

K_TIMEOUT_{MS,US,NS,CYC,TICKS}(val) macros will be added which evaluate to a static initializer for a k_timeout_t representing an expiration in the relevant units from the current tick.

K_NO_WAIT and K_FOREVER will become values of type k_timeout_t, but otherwise retain their current behavior.  They will no longer be usable as arithmetic rvalues, even to test them for equality with other timeouts.

K_TIMEOUT_EQ(a, b) will be added as a macro predicate to compare the values of two k_timeout_t objects for equality.

API use of new timeouts
The following public functions, which currently take a numeric delay in milliseconds, will have that argument modified to accept a k_timeout_t instead.

k_delayed_work_submit()
k_delayed_work_submit_to_queue()
k_fifo_get()
k_futex_wait()
k_lifo_get()
k_mbox_data_block_get()
k_mbox_get()
k_mbox_put()
k_mem_pool_alloc()
k_mem_slab_alloc()
k_msgq_get()
k_msgq_put()
k_mutex_lock()
k_pipe_get()
k_pipe_put()
k_poll()
k_queue_get()
k_sem_take()
k_sleep()
k_stack_pop()
k_timer_start()
k_thread_create()
sys_mutex_lock()
sys_sem_take()

New APIs
New APIs are added to permit the inspection of the expiration time of running timeout handles in tick units (to allow sophisticated applications to minimize unit conversion error) and as an absolute/uptime value (to avoid race conditions).

k_delayed_work_end_ticks() - end time in ticks of a delayed work item
k_delayed_work_remaining_ticks() - time remaining in ticks of a delayed work item
k_thread_timeout_end_ticks() - end time in ticks of a sleeping/pending thread
k_thread_timeout_remaining_ticks() - time remaining in ticks of a sleeping/pending thread
k_timer_remaining_ticks() - time remaining in ticks of a running timer

Also some convenience additions:

k_msleep() - Identical to current k_sleep(), takes s32_t count of milliseconds
k_uptime_ticks() - Exposes the internal tick counter to users who need it

Legacy Mode
These changes represent source-incompatible changes to public APIs.  For apps requiring source compatibility, a "legacy" mode is provided by the CONFIG_SYS_TIMEOUT_LEGACY_API kconfig.  In this mode, both k_ticks_t and k_timeout_t become typedefs for a 32 bit integer and are interpreted by all kernels APIs as a count of milliseconds, with the K_NO_WAIT and K_FOREVER tokens having the values they do in current code.  Legacy mode is, obviously, not compatible with 64 bit timeouts.
Legacy will be the default in the initial version.  It is not expected that all subsystems will work with new timeouts immediately.
Absolute Timeout Expiration
The ability will be added to set a timeout to expire at an absolute time value, in the same space as k_uptime_get().  That is, a timeout specified at an uptime of "1234 ms" will expire on the tick after the internal tick counter passes 1234 ms.

K_TIMEOUT_ABSOLUTE_{TICKS,CYC,MS,US,NS}(val) macros will be added which evaluate to a static initializer for a k_timeout_t representing an expiration in the relevant units when the system uptime reaches the specified value.

Static Thread Delay Argument
K_THREAD_DEFINE() has a final argument that currently takes a delay in milliseconds, but cannot use the new timeout mechanism for technical reasons (it has to be precomputed by the compiler and can't be the result of an inlined C function, even one with constant arguments).  Existing code will typically pass K_NO_WAIT and K_FOREVER as values for this argument, and that will have to change as timeouts are non-integral values.  Instead, a new K_THREAD_NO_START token will be defined to allow for the behavior currently captured by K_FOREVER.  Existing usage of K_NO_WAIT can simply specify zero milliseconds without ambiguity.
Obviously, apps built in legacy mode will continue to work with the existing tokens without change.
Note: Longer term, it would be nicer to evolved the k_thread_create() API to remove the delay parameter (which is very rarely used, and somewhat odd when compared with other OSes) in favor of encouraging apps to use a k_timer to do this themselves.  Then "no start" could simply be a flag passed in the options parameter.  This would be a good opportunity to remove two of the three parameter words, which again is an odd API and almost entirely unused.  But that's for a different pull request.

OK, as promised, here's a more formal RFC for the timeout changes that were submitted back in July.  There are no surprises here, it's exactly the same stuff.
I've tried to make it as minimal as possible to preserve the fundamental simplicity of what is happening, detailing just the API changes themselves and not the internals or (especially) the form of the patch series.

The data type stored in the timeout will be exposed to the user as a k_ticks_t typedef

I think it's worth mentioning that 32 bit type will be unsigned.
What about k_timer_start? As one of the goals of this change is to get higher precision timeouts then k_timer is a primary goal.
During one of the reviews comment was raised that k_timeout_t name is not always precise. I was wondering then if it shouldn't get other name (for example k_time_t since it is a representation of time as understand by the kernel).

K_TIMEOUT_EQ(a, b) will be added

there might be a need for K_TIMEOUT_LESS(a,b) and K_TIMEOUT_LEQ(a,b) as well
It would be also good that we settle our goals regarding switch to opaque struct as default instead of having legacy mode. Imo, this should happen as soon as tree gets stabilized after initial structure introduction gets in (ideally before 2.2).

What about k_timer_start?

Added (it was, of course, in the pull request from back in July).  Also k_thread_create() was missing, and I added entries for k_fifo/lifo_get(), which are macros defined in terms of k_queue_get() but were historically functions and act like separate APIs.
Also added the unsigned note.

During one of the reviews comment was raised that k_timeout_t name is not always precise. I was wondering then if it shouldn't get other name (for example k_time_t since it is a representation of time as understand by the kernel).

It's not, really.  That's what k_ticks_t is for.  k_timeout_t is a representation of the requested time a timeout will expire.  It's deliberately not an arithmetic type, because it can be expressed in different spaces.  That's the same reason we don't do comparison on it -- if the user wants to do math in arithmetic units, they can.  The reason for K_TIMEOUT_EQ() is that we have special, non-arithmetic tokens like K_FOREVER and K_NO_WAIT that existing code tests vs. timeouts already.

settle our goals regarding switch to opaque struct as default

No.  My blind and naive acquiescence to "make legacy default" last time is the closest thing to a technical reason for this PR having failed.  I'm going to submit a minimal change with just the core subsystems first, and we can do subsystems one by one over time (ideally collaboratively).  It is abundantly clear that the project will never accept a change from me of the size the last PR grew to, and I'm out of patience to try.
And note that legacy mode is a firm requirement anyway.  Without it, we're making source-incompatible changes to existing APIs, which is forbidden.

Once absolute timeouts are added there might be a need for functions returning target or deadline, something like: k_ticks_t k_timer_target().

They're in there, under the "New APIs" section.  User-visible objects that include timeouts are k_timer and k_delayed_work, both of which currently have "remaining" predicates (which return ms) but in this scheme get new "end" predicates returning an absolute time in ticks (note that this works regardless of how the timeout was registered).  And threads that are pended on a timeout (e.g. in sleep, or in a IPC call that takes a timeout) now have remaining and get predicates too.

right, missed as an absolute/uptime value part there. good.

@andyross can you also clarify what happens with K_THREAD_DEFINE delay argument? If it is staying as   milliseconds then it cannot accept K_NO_WAIT anymore.

Excellent point.  Added a section at the bottom about that macro.

@andyross thanks for adding section about delay in thread starting.

Note: Longer term, it would be nicer to evolved the k_thread_create() API to remove the delay parameter

Agree, it can be one of the steps. It isn't widely used.

@andyross from my side RFC looks ok and i see no other issues.

Note: Longer term, it would be nicer to evolved the k_thread_create() API to remove the delay parameter

I had been using the delay parameter for some things related to user mode. Typically:

Create a thread, but set K_FOREVER as the delay. The thread object is now in an initialized state, but not yet running.
Assign the thread to memory domains or adjust its permissions to other kernel objects.
Call k_thread_start() to start it.

Assignment of kernel object permissions to threads works even if the object isn't initialized, but not memory domains. If we decide to drop the delay parameter we should take this under consideration -- in essence, user mode has additional knobs to twiddle for threads, and since we don't have these directly in the k_thread_create() API the current method is to start it with K_FOREVER and then make additional configuration. I haven't thought of alternatives but I'm sure we can come up with something.
I haven't been following the timeout discussions nearly as much as others, but the RFC looks good to me +1.

@andyross The new API looks nice.
I ran into a minor issue today with sys pm policy:
enum power_states sys_pm_policy_next_state(s32_t ticks)

Should the type of the argument for this function now be k_ticks_t instead of s32_t?

@sslupsky (you might want to ask this in a separate issue instead of here in a closed PR): what is the code in question?  The API for manipulating timeouts has changed a little, but if I'm reading correctly that code was never correct to begin with -- timeouts were always milliseconds, so comparing it to K_FOREVER implies that you're doing something other than a kernel timeout.  K_FOREVER is now an opaque type and can't be used like that.

Editting: OK, I see now you're in a suspend handler.  The integer token for "forever" passed to timer drivers and system suspend handlers is now K_TICKS_FOREVER.  This was actually an API abuse internal to the kernel (as mentioned, K_FOREVER is supposed to be milliseconds, not ticks) that got corrected as part of this PR.  Drivers have their own constant.
I'm a little worried this didn't get caught in CI, though.  We apparently don't have good coverage for PM stuff.

The kernel side of things is done. There's still a discussion ongoing about how best to convert the subsystems, but this issue doesn't cover that.


DC Warning about Signed to Unsigned Assignment

gn 'RecFNToRecFN_3'. (HDL-193)
Warning:  /scratch/palmer.dabbelt/work/plsi-nda-aspire-saed32/plsi/obj/soc-DefaultConfig-default/TestHarness.v:41451: signed to unsigned assignment occurs. (VER-318)
Warning:  /scratch/palmer.dabbelt/work/plsi-nda-aspire-saed32/plsi/obj/soc-DefaultConfig-default/TestHarness.v:41464: signed to unsigned assignment occurs. (VER-318)
Presto compilation completed successfully.
Information: Building the design 'DivSqrtRecF64_mulAddZ31'. (HDL-193)
Warning:  /scratch/palmer.dabbelt/work/plsi-nda-aspire-saed32/plsi/obj/soc-DefaultConfig-default/TestHarness.v:44166: signed to unsigned assignment occurs. (VER-318)

Here's a snippit (with line numbers) of the generated Verilog
 41432   assign T_8 = T_4[11:10];
 41433   assign T_10 = T_8 == 2'h3;
 41434   assign T_18_sign = T_25;
 41435   assign T_18_isNaN = T_27;
 41436   assign T_18_isInf = T_31;
 41437   assign T_18_isZero = T_7;
 41438   assign T_18_sExp = T_32;
 41439   assign T_18_sig = T_40;
 41440   assign T_25 = io_in[64];
 41441   assign T_26 = T_4[9];
 41442   assign T_27 = T_10 & T_26;
 41443   assign T_30 = T_26 == 1'h0;
 41444   assign T_31 = T_10 & T_30;
 41445   assign T_32 = {1'b0,$signed(T_4)};
 41446   assign T_35 = T_7 == 1'h0;
 41447   assign T_36 = io_in[51:0];
 41448   assign T_38 = {T_36,2'h0};
 41449   assign T_39 = {1'h0,T_35};
 41450   assign T_40 = {T_39,T_38};
 41451   assign T_42 = $signed(T_18_sExp) + $signed(13'sh1900);
 41452   assign outRawFloat_sign = T_18_sign;
 41453   assign outRawFloat_isNaN = T_18_isNaN;
 41454   assign outRawFloat_isInf = T_18_isInf;
 41455   assign outRawFloat_isZero = T_18_isZero;
 41456   assign outRawFloat_sExp = T_71;
 41457   assign outRawFloat_sig = T_76;
 41458   assign T_57 = $signed(T_42) < $signed(14'sh0);
 41459   assign T_58 = T_42[12:9];
 41460   assign T_60 = T_58 != 4'h0;
 41461   assign T_68 = T_42[8:0];
 41462   assign T_69 = T_60 ? 9'h1fc : T_68;
 41463   assign T_70 = {T_57,T_69};
 41464   assign T_71 = $signed(T_70);
 41465   assign T_72 = T_18_sig[55:30];
 41466   assign T_73 = T_18_sig[29:0];
 41467   assign T_75 = T_73 != 30'h0;
 41468   assign T_76 = {T_72,T_75};
 41469   assign T_77 = outRawFloat_sig[24];
 41470   assign T_79 = T_77 == 1'h0;
 41471   assign invalidExc = outRawFloat_isNaN & T_79;
 41472   assign RoundRawFNToRecFN_1_clk = clk;
 41473   assign RoundRawFNToRecFN_1_reset = reset;
 41474   assign RoundRawFNToRecFN_1_io_invalidExc = invalidExc;
 41475   assign RoundRawFNToRecFN_1_io_infiniteExc = 1'h0;
 41476   assign RoundRawFNToRecFN_1_io_in_sign = outRawFloat_sign;
 41477   assign RoundRawFNToRecFN_1_io_in_isNaN = outRawFloat_isNaN;
 41478   assign RoundRawFNToRecFN_1_io_in_isInf = outRawFloat_isInf;
 41479   assign RoundRawFNToRecFN_1_io_in_isZero = outRawFloat_isZero;
 41480   assign RoundRawFNToRecFN_1_io_in_sExp = outRawFloat_sExp;
 41481   assign RoundRawFNToRecFN_1_io_in_sig = outRawFloat_sig;
 41482   assign RoundRawFNToRecFN_1_io_roundingMode = io_roundingMode;

and here's a relevant-looking declaration of
 41378   wire [13:0] T_42;

@albert-magyar I haven'd read the Verilog LRM, but I'm assuming something like
-41451   assign T_42 = $signed(T_18_sExp) + $signed(13'sh1900);
+41451   assign T_42 = $unsigned($signed(T_18_sExp) + $signed(13'sh1900));

would fix the problem?  Note that this is DC, so it could just be flat-out wrong.

This isn't a bug, but I agree we should strive to generate lint-free code.
Curiously, VCS is fine with this; I guess Presto is more persnickety.  I
believe wrapping the result of signed expressions with $unsigned() is a
correct workaround.
On Wed, Sep 21, 2016 at 10:50 PM, Palmer Dabbelt<EMAIL_ADDRESS>wrote:

gn 'RecFNToRecFN_3'. (HDL-193)
Warning:  /scratch/palmer.dabbelt/work/plsi-nda-aspire-saed32/plsi/obj/soc-DefaultConfig-default/TestHarness.v:41451: signed to unsigned assignment occurs. (VER-318)
Warning:  /scratch/palmer.dabbelt/work/plsi-nda-aspire-saed32/plsi/obj/soc-DefaultConfig-default/TestHarness.v:41464: signed to unsigned assignment occurs. (VER-318)
Presto compilation completed successfully.
Information: Building the design 'DivSqrtRecF64_mulAddZ31'. (HDL-193)
Warning:  /scratch/palmer.dabbelt/work/plsi-nda-aspire-saed32/plsi/obj/soc-DefaultConfig-default/TestHarness.v:44166: signed to unsigned assignment occurs. (VER-318)
Here's a snippit (with line numbers) of the generated Verilog
41432   assign T_8 = T_4[11:10];
41433   assign T_10 = T_8 == 2'h3;
41434   assign T_18_sign = T_25;
41435   assign T_18_isNaN = T_27;
41436   assign T_18_isInf = T_31;
41437   assign T_18_isZero = T_7;
41438   assign T_18_sExp = T_32;
41439   assign T_18_sig = T_40;
41440   assign T_25 = io_in[64];
41441   assign T_26 = T_4[9];
41442   assign T_27 = T_10 & T_26;
41443   assign T_30 = T_26 == 1'h0;
41444   assign T_31 = T_10 & T_30;
41445   assign T_32 = {1'b0,$signed(T_4)};
41446   assign T_35 = T_7 == 1'h0;
41447   assign T_36 = io_in[51:0];
41448   assign T_38 = {T_36,2'h0};
41449   assign T_39 = {1'h0,T_35};
41450   assign T_40 = {T_39,T_38};
41451   assign T_42 = $signed(T_18_sExp) + $signed(13'sh1900);
41452   assign outRawFloat_sign = T_18_sign;
41453   assign outRawFloat_isNaN = T_18_isNaN;
41454   assign outRawFloat_isInf = T_18_isInf;
41455   assign outRawFloat_isZero = T_18_isZero;
41456   assign outRawFloat_sExp = T_71;
41457   assign outRawFloat_sig = T_76;
41458   assign T_57 = $signed(T_42) < $signed(14'sh0);
41459   assign T_58 = T_42[12:9];
41460   assign T_60 = T_58 != 4'h0;
41461   assign T_68 = T_42[8:0];
41462   assign T_69 = T_60 ? 9'h1fc : T_68;
41463   assign T_70 = {T_57,T_69};
41464   assign T_71 = $signed(T_70);
41465   assign T_72 = T_18_sig[55:30];
41466   assign T_73 = T_18_sig[29:0];
41467   assign T_75 = T_73 != 30'h0;
41468   assign T_76 = {T_72,T_75};
41469   assign T_77 = outRawFloat_sig[24];
41470   assign T_79 = T_77 == 1'h0;
41471   assign invalidExc = outRawFloat_isNaN & T_79;
41472   assign RoundRawFNToRecFN_1_clk = clk;
41473   assign RoundRawFNToRecFN_1_reset = reset;
41474   assign RoundRawFNToRecFN_1_io_invalidExc = invalidExc;
41475   assign RoundRawFNToRecFN_1_io_infiniteExc = 1'h0;
41476   assign RoundRawFNToRecFN_1_io_in_sign = outRawFloat_sign;
41477   assign RoundRawFNToRecFN_1_io_in_isNaN = outRawFloat_isNaN;
41478   assign RoundRawFNToRecFN_1_io_in_isInf = outRawFloat_isInf;
41479   assign RoundRawFNToRecFN_1_io_in_isZero = outRawFloat_isZero;
41480   assign RoundRawFNToRecFN_1_io_in_sExp = outRawFloat_sExp;
41481   assign RoundRawFNToRecFN_1_io_in_sig = outRawFloat_sig;
41482   assign RoundRawFNToRecFN_1_io_roundingMode = io_roundingMode;
and here's a relevant-looking declaration of
41378   wire [13:0] T_42;
@albert-magyar https://github.com/albert-magyar I haven'd read the
Verilog LRM, but I'm assuming something like
-41451   assign T_42 = $signed(T_18_sExp) + $signed(13'sh1900);
+41451   assign T_42 = $(unsigned ($signed(T_18_sExp) + $signed(13'sh1900)));
would fix the problem? Note that this is DC, so it could just be flat-out
wrong.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/ucb-bar/firrtl/issues/311, or mute the thread
https://github.com/notifications/unsubscribe-auth/AA-7wji8Rt39Pu9gVpJRMmkXEeY1a-1Mks5qshcNgaJpZM4KDjEt
.

Agree with @aswaterman about the fix.  And yes, Presto is stricter than VCS in syntax checking.

I'm assuming this issue has been resolved - please reopen if it hasn't.


ROX-15438: Create a welcome page to help users with instances creation/connection

Description
Create a welcome page to guide customers on how to create an ACS instance and connect to the secured cluster
Checklist (Definition of Done)

[ ] Unit and integration tests added
[ ] Added test description under Test manual
[ ] Documentation added if necessary
[ ] CI and all relevant tests are passing
[ ] Add the ticket number to the PR title if available, i.e. ROX-12345: ...
[ ] Discussed security and business related topics privately. Will move any security and business related topics that arise to private communication channel.

Test manual

Codecov Report
Patch coverage has no change and project coverage change: -2.36 :warning:

Comparison is base (4ef2686) 11.72% compared to head (40d5b5b) 9.36%.

:exclamation: Current head 40d5b5b differs from pull request most recent head 1d2303c. Consider uploading reports for the commit 1d2303c to get more accurate results

Additional details and impacted files
@@            Coverage Diff            @@
##             main     #81      +/-   ##
=========================================
- Coverage   11.72%   9.36%   -2.36%
=========================================
  Files          28      36       +8
  Lines         418     523     +105
  Branches       90     108      +18
=========================================
  Hits           49      49
- Misses        339     442     +103
- Partials       30      32       +2

Impacted Files
Coverage Δ

...rc/routes/GettingStartedPage/GettingStartedPage.js
0.00% <0.00%> (ø)

src/routes/GettingStartedPage/Wizard/Finish.js
0.00% <0.00%> (ø)

.../GettingStartedPage/Wizard/GettingStartedWizard.js
0.00% <0.00%> (ø)

...es/GettingStartedPage/Wizard/HeaderExternalLink.js
0.00% <0.00%> (ø)

...c/routes/GettingStartedPage/Wizard/InitialSetup.js
0.00% <0.00%> (ø)

...routes/GettingStartedPage/Wizard/InstallOptions.js
0.00% <0.00%> (ø)

...outes/GettingStartedPage/Wizard/InstallWithHelm.js
0.00% <0.00%> (ø)

...s/GettingStartedPage/Wizard/InstallWithOperator.js
0.00% <0.00%> (ø)

src/routes/OverviewPage/OverviewPage.js
0.00% <0.00%> (ø)

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


Add support for Amazon's "Verification Needed" page at login

In this case, a page with a button to send a confirmation e-mail
with a code pops up. We instruct the user to go to the Amazon
webpage and perform the verification step. This fixes #21.

I want you to merge this PR :-)

Hi @woopla , is this commit still working now? I've tried your fork but it didn't work for me 😢


Event Webhook duplicates

The docs state that it's possible to receive duplicate events. In reality, it is virtually guaranteed. I receive each event an average of 3 times, and some events I have received as many as 46 times over a 29 hour period.
A reasonable dev would assume possible means infrequently, and that you might receive an event twice, maybe three times. This has implications when designing an integration with this API. I believe this should be considered a bug, but that's a separate issue; at minimum, the docs should not try to downplay a detail that is relevant for devs integrating with this API.
https://sendgrid.com/docs/API_Reference/Webhooks/event.html#-Duplicate-Events

Hello @alexroussos,
This is definitely a bug. Please go ahead and contact our support team to report the bug. They also may be able to help you troubleshoot your specific use case. You can access support contact options by logging into https://support.sendgrid.com.
SendGrid Docs Team

Hi all,
Why is this closed when is not fixed?

me too - still seeing duplicates from my webhook...

Nope, this does not change anything. I do return 200 ok and still same thing.

Hmm, i wander if they can't understand  new OkResult() .What exactly did you return?

Hi @stotlyakov  any update on this. I am getting multiple events I have a requirement where I need to track click count  too showing 3 clicks instead of 1 means its an issue .

Yes, sorry for the late response. You have to ensure you return 200 ok to SendGrid
This is the response I give back. this ensures only one event and SendGrid will not try again.
return new OkObjectResult("Email progress logged.") or it could be just empty o 200Ok

@stotlyakov - not quite true. From my web api, I am returning new HttpResponseMessage(HttpStatusCode.OK), yet receiving multiple events for same status (i.e. Processed, Delivered, etc).


[FEATURE] Improve the scroll to top button

Description
Hey, @tamalCodes I want to improve the UI of scroll to top button. Please assign me this issue. Thank you!
Screenshots

🥦 Browser
Google Chrome
Checklist ✅

[X] I checked and didn't find similar issue
[X] I have read the Contributing Guidelines
[X] I am willing to work on this issue (blank for no)
[X] I am a GSSoC23 contributor (blank for no).

Hi there, the UI of the button looks alright to me , and it works fine too. Any small scale changes will be done by in #951 itself. Thanks for your concern, i'll be closing the issue.


error with nbdev_export

I reorganized notebooks in my repo and doing a nbdev_export just crashes. From the error visible right row, it is not possible to figure out which notebook is causing this error.
(base) devengqc@17-CN0065CL-1:~/git/projects/notebooks$ nbdev_export
Traceback (most recent call last):
  File "/home/devengqc/mambaforge/bin/nbdev_export", line 8, in <module>
    sys.exit(nbdev_export())
  File "/home/devengqc/mambaforge/lib/python3.9/site-packages/fastcore/script.py", line 119, in _f
    return tfunc(**merge(args, args_from_prog(func, xtra)))
  File "/home/devengqc/mambaforge/lib/python3.9/site-packages/nbdev/doclinks.py", line 136, in nbdev_export
    _build_modidx()
  File "/home/devengqc/mambaforge/lib/python3.9/site-packages/nbdev/doclinks.py", line 98, in _build_modidx
    res['syms'].update(_get_modidx((dest.parent/file).resolve(), code_root, nbs_path=nbs_path))
  File "/home/devengqc/mambaforge/lib/python3.9/site-packages/nbdev/doclinks.py", line 69, in _get_modidx
    for cell in _iter_py_cells(py_path):
  File "/home/devengqc/mambaforge/lib/python3.9/site-packages/nbdev/doclinks.py", line 52, in _iter_py_cells
    nb,idx = top.split()
ValueError: too many values to unpack (expected 2)

Can you please provide us with a minimally reproducible example of this error?

I suspect this is the same issue as #1153. @deven-gqc could you please check if your Python file has comments like # %% or  # %% [markdown] or anything except the format created by nbdev which only has two items e.g. # %% ../nbs/api/doclinks.ipynb 9

@seeM  The py file does not have any of those comments. Also, a thing to note in that case is that running ’nbdev_export’ deletes the _modidx.py

Got it. I've just made a PR (#1211) to print more a helpful error message. Will close this when it's merged.


iOS mobile: keyboard up/down and scrolling behaviour not working

Issue summary
Exploring all the possible examples, even the last one https://terminal.jcubic.pl/android.php, the behaviour on iOS mobile is not working: virtual keyboard going on and off doesn't get the last line (the prompt) scrolling up and down so that's never covered when keyboard is up.
Expected behavior
The bottom of the terminal, where terminal is, should always be automatically attached to the bottom of the visible view, without or without keyboard.
Actual behavior
Keyboard going up (once the screen is full of lines and after has been up and down once), covers the terminal. The terminal should always automatically scroll to the bottom, be attached to the keyboard popping up/down, and keep like that while typing a command (or prompt in focus) or when executing a command.
Steps to reproduce
Simply loading the latest demo https://terminal.jcubic.pl/android.php on iOS, making the screen full of commands so it scrolls down, keyboard up and down and then up again, it covers the bottom of the terminal/view.
Browser and OS
Latest iOS, Safari or Firefox (both using WebKit anyway).
Additional notes

For now my nearest solution is:
const scrollToCmd = () => {
	let element = document.querySelector(".cmd");
	element.scrollIntoView();
}

and this listener
$(document).ready(function () {
	visualViewport.addEventListener("resize", () => {
		scrollToCmd();
	});
});

And in theory it seems to work. Problem is that when typing a command it scrolls up automatically as there seems to be something else bringing up the scroll to a point where is not aware of the virtual keyboard.
I tried this to mitigate:
		onCommandChange : function () {
			scrollToCmd();
		},

And it shows clearly that is fighting something else that brings the scroll up to to where it would be without the virtual keyboard: typing letters slowly, the focus/scroll goes briefly up and is then dragged down again by the scrollToCmd().
If we could get rid of whatever is fighting this scrollToCmd(), this solution I believe could work.

There's an additional bug happening once you have a long terminal and keyboard up/down a few times and scrolling etc.
A part of the body background colour is showing "behind" (or at the bottom) of the terminal.
Images of keyboard covering the content:

And the black terminal showing the body behind (white):

Yes, this is a known issue see #707.
The problem is that on iOS the keyboard doesn't affect the layout size inside CSS. In the recent version of Chrome, they duplicated the "broken" behavior of Safari. So now for every mobile browser you need to use JavaScript to detect the virtual keyboard and it's not easy. See #859.
There is also a long-standing bug in mobile Safari with white space below the HTML, and I don't see a way to fix this. I think that the new Chrome added that bug to their implementation.
See this question on StackOverflow: White space outside HTML on mobile Safari when the keyboard is open
So the problem are bugs in the browsers that now become the standard.
I will try to attempt to fix this issue again. I need to find the code I was using to hack the new Chrome behavior, maybe it will work for iOS.
On Chrome you only need to add a special viewport meta tag. But on Safari I'm afraid this is default behavior and I don't think they will ever fix this.
If you know how to fix broken mobile browsers I'm all ears.

I will check how your Scrolling into view behaves.

Thank you. I confirm that the white space (in my case the background colour of body in place of background image) happens only in Safari, not Chrome (or it's hidden more quickly).
Thanks for checking those code snippets...they solve the problem of the keyboard up/down and bottom of the terminal (cmd) following it, so the keyboard does not cover anymore. It works on Chrome and Safari.
But the up/down remains, so there's something somewhere else that tries to scroll: if you can find where that is and try to disable it and see it that fixes it, maybe that could be a solution if it doesn't break anything else.
Thanks, much appreciated.

The problem with scrolling up the content is that the page height is the full height of the phone and if you open the keyboard, the thing that makes the keyboard open is at the bottom of the page. Even if the height is 100% the page is bigger than the size of the available area. This is a broken behavior of Safari that is now duplicated by Chrome, which is really bad.
I've reported this two times to the Chrome team they said this is how it should work. Because they do the same what Safari is doing.
I can only do hacks in JavaScript to fix broken behavior.
The reason why they think it's okay is because no one needs a full-height mobile app like the one I need for jQuery Terminal. They only care about normal websites where this works fine.

Ok, I was able to run the Dev Tools on browser Stack. And I think I have working PoC of the code:
https://terminal.jcubic.pl/android.php
Can you check if it works for you? The code is not yet in the repository.

Do you have link to the code so we can experiment with it? Did this require internal changes to the terminal itself or did you just use the public API/CSS?

The code is on top of the library inside the HTML file. I don't remember if I changed something in the source files but I don't see any uncommitted code and there is nothing in the git stash. So everything has to be inside the HTML.

I may have spoken too soon. It works at first, but seems to get into a weird state if I click away the keyboard and then refocus it. And randomly on some page loads, I can’t focus the text area at all to bring up the virtual keyboard.
The blur-refocus issue also isn’t deterministic, so I’m not sure what’s causing it. It actually seems to work most of the time for me.

That's what I was afraid of, that it doesn't work all the time. Will keep iterating over this idea and try to fix the issue. It may take time and may never get fixed. iOS is difficult to work with.

A fix to this bug would be very welcome here too :)

So for me the code works fine, the only problem is when you blur and focus again the cursor line is not visible.
I'm going to push this code, after adding the fix to the focus. And close this issue. Any bugs in iOS would have to be added separately with clear reproduction.

I was too fast, my solution doesn't work 100% correctly.

Can anybody check on a real iOS?
Same link https://terminal.jcubic.pl/android.php
I've made few changes, I hope it will work now.

The fix solve the problem with jumping, but you can't scroll anymore.

Ok, I think I got this. You should be able to test now:
Same link https://terminal.jcubic.pl/android.php

@Shev3k thanks for testing, I need to revisit this. I also merged the changed, and they got released with 2.29.1 by accident. I should create a separated branch with the changes to mobile.

Just fixed the height issue, I didn't realize that missing CSS variable don't cancel the CSS property. Now it should work again on Desktop.


Adding user context for RQ doesn't seem to work when having multiple integrations

I assume that it should be possible to define multiple integrations like so?
sentry_sdk.init(
        dsn='...',
        environment='...',
        integrations=[
            FlaskIntegration(), RqIntegration()
        ]
)

This do work when exceptions occur in RQ, but none of the data that we set through configure_scope() like this are sent:
with configure_scope() as scope:
    scope.user = {'email'<EMAIL_ADDRESS>
We use gevent and Flask-RQ. I debugged the scope inside the RQ process before the exception occurr and the scope has _name = 'flask'...
The user context is sent if I don't specify multiple integrations during setup. The code is like this then, but this can't be the way it should be?
sentry_sdk.init(
        dsn='...',
        environment='...',
        integrations=[
            FlaskIntegration() if 'rq' not in sys.argv else RqIntegration()
        ]
)

Hi! I have a lot of questions, I'm sorry for putting it into a list like that:

Yes, the first codeblock is how it's supposed to be initialized
In which context are you using gevent? Do you use a special kind of worker with RQ? We only tested with the default forking one. We don't have support for using gunicorn with gevent/eventlet.
rq does not set a scope name so _name == 'flask' is not necessarily unexpected. This was just a dirty hack I did to debug a different issue.
Where do you call configure_scope()? Setting this inside the RQ job should work. But we don't transfer the scope from the request handler into the RQ job.
What is your version of the SDK? Try upgrading to 0.6.3, it fixes a few concurrency issues with Flask.

Thanks for quick reply!

In which context are you using gevent? Do you use a special kind of worker with RQ? We only tested with the default forking one. We don't have support for using gunicorn with gevent/eventlet.

gevent is used on stblibs and psycopg. We don't use gunicorn.

Where do you call configure_scope()? Setting this inside the RQ job should work. But we don't transfer the scope from the request handler into the RQ job.

Yeah we use configure_scope() inside the job.

What is your version of the SDK? Try upgrading to 0.6.3, it fixes a few concurrency issues with Flask.

We've tested 0.6.2. So I have to update to the latest version then and test it out. I'll try to do that in this week..

@stianpr any update on this?

@untitaker I will post an update on it this week. Sorry for the delay =/

Closing due to inactivity.

I finally got some time to look at this again (with 0.9.0) and I still don't get it to work. We still have the same setup of the sentry SDK with the two integrations: Flask and RQ. We still use Flask-RQ2 to boot up the server with flask rq worker --sentry-dsn="". The initialization of sentry sdk is handled through flask when the app boots up.
So the issue is that: If I configure the scope inside the job to include the user context I don't get any of that data with the exception that is sent to Sentry. I also know that the RqIntegration is partially working because without it, no exception is sent at all (that is one of the things that it does). And the exception logged at sentry contains rq-job in additional data.
BUT I do get RqIntegration to fully work if I only specify one integration at the time like so: integrations=[RqIntegration()]. Is there any known issues with multiple integrations and the use of configure_scope?

Do you know when init is called? Could you enable debug=True and tell me if all the additional output for "enabling integration" happens at worker startup or when the first job runs?

I log right after the init  is called. You can see the line in the log:  [INFO]	<root>:  Sentry init called!.
So it seems that enabling integration is called on bootup and that is before the job is executed. I raise an exception inside the job to trigger sending the exception to Sentry.
[DEBUG]	<sentry_sdk.errors>:  Setting up integrations (with default = True)
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration argv
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration dedupe
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration rq
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration stdlib
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration excepthook
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration threading
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration modules
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration logging
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration flask
[DEBUG]	<sentry_sdk.errors>:  Setting up previously not enabled integration atexit
[DEBUG]	<sentry_sdk.errors>:  Enabling integration argv
[DEBUG]	<sentry_sdk.errors>:  Enabling integration dedupe
[DEBUG]	<sentry_sdk.errors>:  Enabling integration rq
[DEBUG]	<sentry_sdk.errors>:  Enabling integration stdlib
[DEBUG]	<sentry_sdk.errors>:  Enabling integration excepthook
[DEBUG]	<sentry_sdk.errors>:  Enabling integration threading
[DEBUG]	<sentry_sdk.errors>:  Enabling integration modules
[DEBUG]	<sentry_sdk.errors>:  Enabling integration logging
[DEBUG]	<sentry_sdk.errors>:  Enabling integration flask
[DEBUG]	<sentry_sdk.errors>:  Enabling integration atexit
[INFO]	<root>:  Sentry init called!
[WARNING]	<flask.app>:  Flask-SocketIO is Running under Werkzeug, WebSocket is not available.
[INFO]	<engineio.server>:  Server initialized for threading.
[DEBUG]	<rq.worker>:  Registering birth of worker 4679d4dc0ee9.1
[INFO]	<rq.worker>:  RQ worker 'rq:worker:4679d4dc0ee9.1' started, version 0.6.0
[INFO]	<rq.worker>:  Cleaning registries for queue: default
[INFO]	<rq.worker>:
[INFO]	<rq.worker>:  *** Listening on default...
[DEBUG]	<rq.worker>:  Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.

[INFO]	<rq.worker>:  default: <removed function here> (72d0529f-9070-48ee-9f8b-76b8da500939)
[DEBUG]	<rq.worker>:  Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.
[DEBUG]	<rq.worker>:  Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.
[DEBUG]	<sqlalchemy.pool.QueuePool>:  Created new connection <connection object at 0x7f4fc18d5af8; dsn: '<removed>, closed: 0>
[INFO]	<sqlalchemy.engine.base.Engine>:  select version()
[INFO]	<sqlalchemy.engine.base.Engine>:  {}
[INFO]	<sqlalchemy.engine.base.Engine>:  select current_schema()
[INFO]	<sqlalchemy.engine.base.Engine>:  {}
[INFO]	<sqlalchemy.engine.base.Engine>:  SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
[INFO]	<sqlalchemy.engine.base.Engine>:  {}
[INFO]	<sqlalchemy.engine.base.Engine>:  SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
[INFO]	<sqlalchemy.engine.base.Engine>:  {}
[INFO]	<sqlalchemy.engine.base.Engine>:  show standard_conforming_strings
[INFO]	<sqlalchemy.engine.base.Engine>:  {}
[DEBUG]	<sqlalchemy.pool.QueuePool>:  Connection <connection object at 0x7f4fc18d5af8; dsn: '<removed>, closed: 0> checked out from pool
[INFO]	<sqlalchemy.engine.base.Engine>:  BEGIN (implicit)
[INFO]	<sqlalchemy.engine.base.Engine>: <lots of SQL code>
[DEBUG]	<sqlalchemy.pool.QueuePool>:  Connection <connection object at 0x7f4fc18d5af8; dsn: '<removed>, closed: 0> being returned to pool
[DEBUG]	<sqlalchemy.pool.QueuePool>:  Connection <connection object at 0x7f4fc18d5af8; dsn: '<removed>, closed: 0> rollback-on-return, via agent
[INFO]	<sqlalchemy.engine.base.Engine>:  ROLLBACK
[ERROR]	<rq.worker>:  Exception: Testing RQ jobs with new Sentry SDK
Traceback (most recent call last):
    <removed stack trace code>
    raise Exception("Testing RQ jobs with new Sentry SDK")
Exception: Testing RQ jobs with new Sentry SDK
Traceback (most recent call last):
    <removed stack trace code>
    raise Exception("Testing RQ jobs with new Sentry SDK")
Exception: Testing RQ jobs with new Sentry SDK
[DEBUG]	<sentry_sdk.errors>:  Sending error event [5a222d4ca13a4a49b758c0117b7b9a58] to app.getsentry.com project:<id removed>
[DEBUG]	<urllib3.connectionpool>:  Starting new HTTPS connection (1): app.getsentry.com:443
[INFO]	<sentry_sdk.errors>:  event processor (<function DedupeIntegration.setup_once.<locals>.processor at 0x7ff736a1d8c8>) dropped event ({'tags': {'app': 'v3'}, 'breadcrumbs': [], 'event_id': '34249bd965f54e9eae47dab2c8c595e4', 'extra': {'queue': 'default', 'arguments': ('<removed username>',), 'func': '<removed func name>', 'stack_info': None, 'sys.argv': ['/usr/local/bin/flask', 'rq', 'worker', '--sentry-dsn='], 'kwargs': {}}, 'timestamp': datetime.datetime(2019, 6, 14, 9, 10, 40, 276752), 'exception': {'values': [{'type': 'Exception', 'stacktrace': {'frames': [{'vars': {'queue': Queue('default'), 'self': <flask_rq2.app.RQ.init_backends.<locals>.AppWorker object at 0x7ff73672a668>, 'pipeline': StrictPipeline<ConnectionPool<Connection<host=redis,port=6379,db=0>>>, 'job': Job('9b8d6305-da51-4702-9868-7b3a72e44ad7', enqueued_at=datetime.datetime(2019, 6, 14, 9, 10, 40)), 'started_job_registry': <rq.registry.StartedJobRegistry object at 0x7ff73672abe0>}, 'post_context': ['', '                # Pickle the result in the same try-except block since we need', '                # to use the same exc handling when pickling fails', '                job._result = rv', ''], 'function': 'perform_job', 'context_line': '                    rv = job.perform()', 'abs_path': '/usr/local/lib/python3.4/site-packages/rq/worker.py', 'module': 'rq.worker', 'filename': 'rq/worker.py', 'pre_context': ['        with self.connection._pipeline() as pipeline:', '            started_job_registry = StartedJobRegistry(job.origin, self.connection)', '', '            try:', '                with self.death_penalty_class(job.timeout or self.queue_class.DEFAULT_TIMEOUT):'], 'lineno': 588},
{'vars': {'AppJob': <class 'flask_rq2.app.RQ.init_backends.<locals>.AppJob'>, 'self': Job('9b8d6305-da51-4702-9868-7b3a72e44ad7', enqueued_at=datetime.datetime(2019, 6, 14, 9, 10, 40)), 'app': <Flask '<removed path>'>, '__class__': <class 'flask_rq2.app.RQ.init_backends.<locals>.AppJob'>}, 'post_context': ['', '        class AppQueue(BaseQueue):', '            job_class = AppJob', '', '        class AppWorker(BaseWorker):'], 'function': 'perform', 'context_line': '                    return super(AppJob, self).perform()', 'abs_path': '/usr/local/lib/python3.4/site-packages/flask_rq2/app.py', 'module': 'flask_rq2.app', 'filename': 'flask_rq2/app.py', 'pre_context': ['        BaseWorker = import_attribute(self.worker_path)', '', '        class AppJob(BaseJob):', '            def perform(self):', '                with app.app_context():'], 'lineno': 175}, {'vars': {'self': Job('9b8d6305-da51-4702-9868-7b3a72e44ad7', enqueued_at=datetime.datetime(2019, 6, 14, 9, 10, 40))}, 'post_context': ['        finally:', '            assert self.id == _job_stack.pop()', '        return self._result', '', '    def get_ttl(self, default_ttl=None):'], 'function': 'perform', 'context_line': '            self._result = self.func(*self.args, **self.kwargs)', 'abs_path': '/usr/local/lib/python3.4/site-packages/rq/job.py', 'module': 'rq.job', 'filename': 'rq/job.py', 'pre_context': ['        """Invokes the job function with the job arguments."""', '        self.connection.persist(self.key)', '        self.ttl = -1', '        _job_stack.push(self.id)', '        try:'], 'lineno': 498}, {'vars': {'f': <function <removed func name> at 0x7ff73b20c9d8>, 'args': ('<removed username>',), 'kwargs': {}}, 'post_context': ['', '    return decorated_function', '', '', 'def consumes(*content_types):'], 'function': 'decorated_function', 'context_line': '        return f(*args, **kwargs)', 'abs_path': '<removed file path>', 'module': '<removed module>', 'filename': '<removed filename>', 'pre_context': ['', "        g.username = kwargs.get('username') or args[0]", '', '        set_sentry_context()', ''], 'lineno': 34},
{'vars': {'username': '<removed username>', 'scope': <Scope id=0x7ff736729f78 name=flask>}, 'post_context': ['    connection = db.session.connection()', '    connection.execute(', "        '<remved sql code>'", '    )', '    connection.execute('], 'function': '<removed func name>', 'context_line': '    raise Exception("Testing RQ jobs with new Sentry SDK")', 'abs_path': '<removed abs_path>', 'module': '<removed module>', 'filename': '<removed filename>', 'pre_context': ['    """', '', '    with configure_scope() as scope:', "        scope.user = {'email'<EMAIL_ADDRESS>''], 'lineno': 26}]}, 'module': None, 'mechanism': {'handled': True, 'type': 'logging'}, 'value': 'Testing RQ jobs with new Sentry SDK'}]}, 'logentry': {'params': (), 'message': 'Exception: Testing RQ jobs with new Sentry SDK\nTraceback (most recent call last):\n  File "/usr/local/lib/python3.4/site-packages/rq/worker.py", line 588, in perform_job\n    rv = job.perform()\n  File "/usr/local/lib/python3.4/site-packages/flask_rq2/app.py", line 175, in perform\n    return super(AppJob, self).perform()\n  File "/usr/local/lib/python3.4/site-packages/rq/job.py", line 498, in perform\n    self._result = self.func(*self.args, **self.kwargs)\n  File "<remved file path>", line 34, in decorated_function\n    return f(*args, **kwargs)\n  File "<removed file path>", line 26, in <removed func name>\n    raise Exception("Testing RQ jobs with new Sentry SDK")\nException: Testing RQ jobs with new Sentry SDK\n'}, 'logger': 'rq.worker', 'level': 'error'})
[DEBUG]	<rq.worker>:  Invoking exception handler <bound method AppWorker.move_to_failed_queue of <flask_rq2.app.RQ.init_backends.<locals>.AppWorker object at 0x7f4fc16485f8>>
[WARNING]	<rq.worker>:  Moving job to 'failed' queue
[DEBUG]	<sentry_sdk.errors>:  Flushing HTTP transport
[DEBUG]	<sentry_sdk.errors>:  background worker got flush request
[DEBUG]	<sentry_sdk.errors>:  0 event(s) pending on flush
[DEBUG]	<urllib3.connectionpool>:  https://app.getsentry.com:443 "POST /api/<id removed>/store/ HTTP/1.1" 200 41
[DEBUG]	<sentry_sdk.errors>:  background worker flushed
[DEBUG]	<rq.worker>:  Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.
[INFO]	<rq.worker>:
[INFO]	<rq.worker>:  *** Listening on default...
[DEBUG]	<rq.worker>:  Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.

Does this give you anything?

Sorry, I can't make anything out of this. Could you share an issue that is missing user context and also paste the code of that job?

@untitaker I'll make a pull request instead. It might be easier for everyone that I use a fork and try to debug to find the issue.
I think the issue might have something to do with how "shared" scope works between the different integrations. Hopefully I will find out by the end of this week. I'll let you know of any updates.

Ok I managed to debug some more now and I added a _name_ on the scope that the RqIntegration uses to see that I'm not accessing the correct scope when calling configure_scope()  inside the job.
This is a dump of the scope i get from within configure_scope() context inside the job:
<Scope id=0x7fbee96c1168 name=flask>

This is a dump of the scope stack within configure_scope() context inside the same job:
[
(<sentry_sdk.client._Client object at 0x7fbee9754c50>, <Scope id=0x7fbef4a11f78 name=None>),
(<sentry_sdk.client._Client object at 0x7fbee9754c50>, <Scope id=0x7fbef697a948 name=flask>),
(<sentry_sdk.client._Client object at 0x7fbee9754c50>, <Scope id=0x7fbee9707678 name=rq>),
(<sentry_sdk.client._Client object at 0x7fbee9754c50>, <Scope id=0x7fbee96c1168 name=flask>)
]

If I then set scope.user = {'id': 'username'} inside this context, I get this output from the scope class:
From line 98 in scope.py
SETTING USER <Scope id=0x7fbee96c1168 name=flask> {'id': 'username'}

When the job is executing and failing due to an exception I log accessing the scope to retrieve the user:
From line 200 in scope.py:
ACCESSING USER <Scope id=0x7fbee9707678 name=rq> None None

So it's clear that it doesn't find a user before it is sending the log to Sentry.
So my question to you @untitaker is:

How are multiple scopes suppose to work?
I see that RqIntegration uses push_scope() is that correct and how can I access that scope inside the job to be able to set the user? Isn't configure_scope suppose to work this out?

I'm willing to make a patch, but I need to understand how the scopes should work first.

@stianpr it works exactly how you assumed it works before you started to investigate this :) configure_scope should use the last item in the scope list, but that list item seems to be completely wrong in your case.
Could you try upgrading to 0.9.1? I think this comment might be relevant: https://github.com/getsentry/sentry-python/commit/f2d563798eb002ca2d22ee6e44467b943298d223
But even then I have no idea why your (gunicorn web workers?) affects your RQ workers. Do your RQ workers use gevent as well?

Could you try upgrading to 0.9.1? I think this comment might be relevant: f2d5637

I'm already on 0.9.2 now while testing.

But even then I have no idea why your (gunicorn web workers?) affects your RQ workers. Do your RQ workers use gevent as well?

We use gevent there also yeah. Could that be the case? I can try to disable it and see.

Are you using a different RQ worker class than the default one? We ran zero
tests with any other package that is out there.
On Fri, Jun 28, 2019 at 11:45 AM Stian Prestholdt<EMAIL_ADDRESS>wrote:

Could you try upgrading to 0.9.1? I think this comment might be relevant:
f2d5637
https://github.com/getsentry/sentry-python/commit/f2d563798eb002ca2d22ee6e44467b943298d223
I'm already on 0.9.2 now while testing.
But even then I have no idea why your (gunicorn web workers?) affects your
RQ workers. Do your RQ workers use gevent as well?
We use gevent there also yeah. Could that be the case? I can try to
disable it and see.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/getsentry/sentry-python/issues/219?email_source=notifications&email_token=AAGMPRLNGGP275QMXHDMAEDP4XMTNA5CNFSM4GLJXLR2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYZTZLY#issuecomment-506674351,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAGMPRKOJHCH4NBYKCNWNQ3P4XMTNANCNFSM4GLJXLRQ
.

Are you using a different RQ worker class than the default one? We ran zero tests with any other package that is out there.

We're using the default that  Flask-RQ2 is providing, and that is rq.worker.Worker.

Okay, that worker class sounds fine. Could you still try to disable
gevent/eventlet everywhere and see if it fixes any of the issues?
On Fri, Jun 28, 2019 at 12:01 PM Stian Prestholdt<EMAIL_ADDRESS>wrote:

Are you using a different RQ worker class than the default one? We ran
zero tests with any other package that is out there.
We're using the default that Flask-RQ2
https://github.com/rq/Flask-RQ2/blob/17.0/src/flask_rq2/app.py#L49 is
providing, and that is rq.worker.Worker.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/getsentry/sentry-python/issues/219?email_source=notifications&email_token=AAGMPROXYVRUURRJJPSFJKLP4XON5A5CNFSM4GLJXLR2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYZU5EQ#issuecomment-506678930,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAGMPRKEK4FNLIFUHWAGOYLP4XON5ANCNFSM4GLJXLRQ
.

@untitaker sorry for the huge delay. I'm trying out the new version now 0.13.4. I'll report back with status on this issue.

I'm closing this again as the investigation along this is going very slowly and we're on 0.19 by now.


Sqlsmith: Enable general gen_from for materialized view

Currently requires some workarounds for unsupported executors (nested-loop-join, stream values).

gen_from for mview must have at least one table to choose from, it can't generate on values since there's no stream values executor.
gen_equijoin_clause cannot be used within mview due to #4083
stream nested loop join not supported. See: https://buildkite.com/risingwavelabs/pull-request/builds/9074#018368d3-9a37-4aca-bf7c-7bb4aeac6978.

Non-critical, probably won't fix in near future.


[@mui/codemod] date-pickers-moved-to-x renames imports it shouldn't

Duplicates

[X] I have searched the existing issues

Latest version

[X] I have tested the latest version

Current behavior 😯
When running npx @mui/codemod v5.0.0/date-pickers-moved-to-x . with the following in your app.jsx:
import LocalizationProvider from '@mui/lab/LocalizationProvider'
import AdapterDayjs from '@mui/lab/AdapterDayjs'

The codemod incorrectly transforms it to:
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';

Expected behavior 🤔
The codemod should not transform these lines
Steps to reproduce 🕹
Steps:
Codesandbox: https://codesandbox.io/s/sleepy-sanne-5ceklu?file=/src/index.tsx

Copy this code into a file
run npx @mui/codemod v5.0.0/date-pickers-moved-to-x . in the path of the file
Observe the lines are transformed

Context 🔦
No response
Your environment 🌎
No response

Why shouldn't it rename those imports ?

I am so sorry, it was not clear to me that they have also been moved to @mui/x-date-pickers.
After lookin through the @mui/lab code here this is clear to me now.
Thanks for your quick response.

@oliviertassinari could you give context about this reopening ?

@flaviendelangle we're making sure all the issues are closed with a proper label (i.e. not needs triage)


Add documentation links to extension summary

ping @l3pp4rd

very good idea, thanks, could you rebase? sorry for the late response

done :+1:

thanks ;)

No problem, time for a new release soon?

just made one ;)


support servers with paths relative to another path

OpenAPI version
3
Is your feature request related to a problem? Please describe.
i'm testing an api with different environments at different paths, like so:

http://example.com/dev
http://example.com/test
http://example.com/prod

and the schema hosted at http://example.com/dev/openApi be like:
{
    "servers": [
        {
            "url": "/api"
        }
    ]
}

meaning that the full path to the server is http://example.com/dev/api, but the validator fails because it expects http://example.com/api
Describe the solution you'd like
according to the openAPI specification, a server url "MAY be relative, to indicate that the host location is relative to the location where the OpenAPI document is being served"
so perhaps something like the jestOpenAPI function can be updated to also support passing a url where the schema is hosted, ie:
jestOpenAPI('http://example.com/dev/openApi')

this way, the validator is aware of the relative location of the servers (ie. /dev/api)
Describe alternatives you've considered
something like
const jestOpenApiFromUrl = async (url: string) => {
    const schema: OpenAPIV3.Document = (await axios.get(url)).data
    const relativePath = dropRight(new URL(url).pathname.split('/')).join('/')
    if (typeof relativePath !== 'undefined')
        schema.servers?.forEach((server) => (server.url = path.join(relativePath, server.url)))
    jestOpenAPI(schema)
}

Additional context
Add any other context or screenshots about the feature request here.
Are you going to resolve the issue?

Thanks @DetachHead! Sounds like a good enhancement. I don't have time to fix this myself now but anyone who wants this please submit a PR (I can provide support or suggestions). Or upvote this issue so we know how popular it is 🙂
Workaround
Would this work for your use case?
beforeAll(async () => {
  const schema: OpenAPIV3.Document = (await axios.get('http://example.com/dev/openApi')).data;
  schema.servers?.forEach((server) => {
    if (server.url.startsWith('/') { // we only want to change relative server URLs, not absolute ones
      server.url = new URL('/openApi', server.url).href; // prefer this to `path.join` because https://stackoverflow.com/a/16301947/9864252
    }
  }
  jestOpenAPI(schema);
});

Solution
The jestOpenAPI function does not support passing a url where the schema is hosted because fetching the schema from the url would make jestOpenAPI async, and users would have to await it in a beforeAll. That complexity was previously not worth it because one can easily fetch the schema themselves. However your use case would benefit from us providing an async jestOpenAPIFromUrl.
The implementation could be as you've written, or we could do jestOpenAPI(schema, { documentLocation: url }) and handle it internally. That might make it easier to handle OpenAPI 2 documents, which have schema.basePath rather than schema.servers.
We should test the new jestOpenAPI flag similar to existing setup tests and using it with an openapi document, similar to these tests.


Add MWL status to card zoom page

This is intended to address #14 . What it does:

Display if the card is restricted
Display if the card is banned (with flexible wording in case it's needed)

What it doesn't do:

Display rotation status

Questions I have:

formatting - I think it's terrible right now, but I'm not sure what will look better. Should I just play around with it a bit more, or are there guidelines I should apply?
Ban wording - would it make more sense to just say "banned" instead of worrying about the specific deck limit? That would be an easy change
i18n - Is there some framework for this I should be tapping into?

Screenshots:

I'd simply use the vocabulary from the MWL document: "restricted" and "removed". Also, it's probably useful to include the MWL version number.

New screenshots:

I still feel like there's got to be a better formatting option, maybe more similar to Rulings.

Yeah, I feel much better about this. Please let me know what you think.

I like it a lot, thank you.

deployed!

Not sure if it's a server-side caching issue, but I only see info up to MWL 1.2.


Assertion on pseudolabel

When I use "pseudolabel" which does not require a strong_transform, the assertion appears:
AssertionError: alg pseudolabel requires strong augmentation

I wonder if there is something wrong in https://github.com/microsoft/Semi-supervised-learning/blob/6cf697e6968f9f77040a9e0162306436a91a00dc/semilearn/datasets/cv_datasets/datasetbase.py#L59, which should be
assert self.alg in ['fullysupervised', 'supervised', 'pseudolabel', 'vat', 'pimodel', 'meanteacher', 'mixmatch',], f"alg {self.alg} requires strong augmentation"

Maybe "refixmatch" also requires a strong augmentation.

Thanks for pointing that out. Would you like to open a PR for making this change?


snapshot: Separate tests using root from non-root

This is a follow-up to #422 that makes new targets in the Makefile specifically for running tests that require root.  I've added a build flag root to files where tests exist that require root and renamed those files to be _root_test.go instead of _test.go.  Travis shows most of the tests running successfully without root and that the tests that require root are still running as well (compare [no test files] with time and coverage output for the snapshot, btrfs, and naive packages.

Overlay still has one test that requires root, can we split just that test out for overlay
--- SKIP: TestOverlayOverlayRead (0.00s)
	overlay_test.go:130: not running as root

@dmcgowan Yep, looks like I missed that one.  I'll split out that single test.

@dmcgowan Fixed.  Thanks for finding that. :smile:

LGTM

@stevvooe Updated to use a flag.  Had to change the Makefile target to only invoke packages that use that flag so that other, unrelated tests don't fail due to an unknown flag.

LGTM

LGTM


Add support for server-side rendering

We need to get SSR working for the homepage and profile pages at minimum. I can't remember how to best do this with Firebase Functions, nor can I remember how to make it conditional for SOME of the pages. We'll also want to implement some sort of caching strategy for this. I know that Firebase has some solutions around this already.
Search for this issue's url in the codebase to find where it should be done.

Moving to Next.js.

Moving to Next.js.


Argument of type '"long"' is not assignable to parameter of type 'duration'.

Hi,
I tried to create a long Toast (as shown on the example page):
Toast.makeText("Hello World", "long").show();
However, I get an error, when compiling it:
error TS2345: Argument of type '"long"' is not assignable to parameter of type 'duration'.
I'm using Nativescript 2.5 (and newest TNS Android). I think there's something wrong with the declaration of the parameter 'duration'...

Encountering this too


Windows: Opens camera but doesn't read QR Codes.

Good Day, I am working on a desktop application that scans a QR Code using your plugin. The camera launches but it doesn't give any results. Nothing happens, the camera just opens. I was wondering how to solve this.

Hi @jojoneku, Please share the detail steps and device or model that you are using. If you are getting any info, error in log. share that as well.

Image is not so sharp in reading code. Also detection window is quite small. I have 4k resolution. If i scale windows size, reading windows will go wider, height is not affected. And in more narrow windows size, reading box width goes to zero.


Curations for direct conan dependency are not being applied (but for transitive dependencies they are working)

Describe the bug
We have some conan dependencies in conanfile.py files that specify invalid licenses - so a curation with a declared_license_mapping is required to fix these issues. While this is working perfectly fine for transitive dependencies, we can not get it working for direct dependencies.

Conan dependencies
test/conan/CoAwaitLib/conanfile.py
from conans import ConanFile
from conans import tools
import os

class CoAwaitLibConan(ConanFile):
  name        = "CoAwaitLib"
  version     = "2021-01-22"
  license     = "MIT"
  author      = "Copyright (c) 2020 Ludger Sprenker"
  description = "co::await at any point of your code with stackfull coroutines (C++14)"
  homepage    = "https://github.com/mrpi/CoAwaitLib"
  url         = "https://github.com/mrpi/CoAwaitLib"
  git_commit  = "374990809ffb588453c8b9c8ab623d1e04b3ccf0"
  requires    = "boost/1.85.0"

  no_copy_source = True

  def source(self):
      cmd_clone = "git clone %s ./%s" % (self.url,self.name)
      cmd_cd = "cd ./%s" % self.name
      cmd_reset = "git reset --hard %s" % self.git_commit
      cmd = "%s && %s && %s" % (cmd_clone,cmd_cd,cmd_reset)

      self.run(cmd)

  def package(self):
      self.copy("LICENSE", "licenses")
      self.copy("*.hpp")

  def package_id(self):
      self.info.header_only()

  def package_info(self):
      self.cpp_info.includedirs = ["CoAwaitLib/include"]

# https://docs.conan.io/en/latest/reference/conanfile/methods.html#package-info

test/conan/range-v3/conanfile.py
# Range v3 library
#
#  Copyright Luis Martinez de Bartolome Izquierdo 2016
#
#  Use, modification and distribution is subject to the
#  Boost Software License, Version 1.0. (See accompanying
#  file LICENSE_1_0.txt or copy at
#  http://www.boost.org/LICENSE_1_0.txt)
#
# Project home: https://github.com/ericniebler/range-v3
#

from conans import ConanFile

class Rangev3Conan(ConanFile):
  name = "range-v3"
  version = "0.11.0"
  license = "Boost Software License - Version 1.0 - August 17th, 2003"
  description = "Provides the range library for C++11/14/17."
  url = "https://github.com/ericniebler/range-v3" # test with it!
  git_commit = "4989f3e9ff2efee1852942bb9328ef121369ba02"
  exports = "*"

  def source(self):
      # this will create a liquidpp subfolder, take it into account
      self.run("git clone https://github.com/ericniebler/range-v3.git ./%s && cd ./%s && git reset --hard %s" % (self.name, self.name, self.git_commit))

  def package(self):
      self.copy("*.hpp", src="range-v3/include", dst="include", keep_path=True)

Tested curations
.ort/config/curations/Conan/_/bzip2.yml (working as expected)
- id: "Conan::bzip2"
  curations:
    comment: >-
      https://sourceware.org/bzip2/ contains bzip2-1.0.6
    declared_license_mapping:
      "bzip2-1.0.8": "bzip2-1.0.6"

.ort/config/curations/Conan/_/CoAwaitLib.yml (not working)
- id: "Conan::CoAwaitLib:2021-01-22"
  curations:
    comment: >-
      Just for the sake of testing, let's configure 'Apache-2.0' as the license for this package.
    declared_license_mapping:
      "MIT": "Apache-2.0"

.ort/config/curations/Conan/_/range-v3.yml (not working)
- id: "Conan::range-v3:0.11.0"
  curations:
    comment: >-
      https://github.com/ericniebler/range-v3?tab=License-1-ov-file#readme contains Boost Software License - Version 1.0
    concluded_license: "BSL-1.0"
    declared_license_mapping:
      "Boost Software License - Version 1.0 - August 17th, 2003": "BSL-1.0"

.ort/config/curations/Conan/_/range-v3.yml (without version identifier - still not working)
- id: "Conan::range-v3"
  curations:
    comment: >-
      https://github.com/ericniebler/range-v3?tab=License-1-ov-file#readme contains Boost Software License - Version 1.0
    concluded_license: "BSL-1.0"
    declared_license_mapping:
      "Boost Software License - Version 1.0 - August 17th, 2003": "BSL-1.0"

.ort.yml (not working)
curations:
packages:
- id: "Conan::CoAwaitLib:2021-01-22"
  curations:
    comment: >-
      Just for the sake of testing, let's configure 'Apache-2.0' as the license for this package.
    declared_license_mapping:
      "MIT": "Apache-2.0"
- id: "Conan::range-v3:0.11.0"
  curations:
    comment: >-
      https://github.com/ericniebler/range-v3?tab=License-1-ov-file#readme contains Boost Software License - Version 1.0
    declared_license_mapping:
      "Boost Software License - Version 1.0 - August 17th, 2003": "BSL-1.0"

For the transitive dependency Conan::bzip2 the curation is working:
Effective SPDX: bzip2-1.0.6
Declared: bzip2-1.0.8
Declared (SPDX): bzip2-1.0.6

For both the direct dependencies Conan::CoAwaitLib:2021-01-22 and Conan::range-v3:0.11.0 they are not working:
# CoAwaitLib
Declared: MIT
Declared (SPDX): MIT

# range-v3
Declared: Boost Software License - Version 1.0 - August 17th, 2003
Declared (non-SPDX): Boost Software License - Version 1.0 - August 17th, 2003

We tested global package curations and repository curations (range-v3.yml and .ort.yml), tried with and without version matchers and enabled DEBUG logging - but no success in getting the UNHANDLED_DECLARED_LICENSE issue fixed.
To Reproduce
Steps to reproduce the behavior:

Create both conanfile.py files locally (see above)
Create the curations (either in .ort.yml or the default curations directory)
Run ort (analyze + evaluate + report) on the files

Expected behavior
The curation should be applied to the package - and the UNMAPPED_DECLARED_LICENSE issue resolved.
Console / log output
 ______________________________
/        \_______   \__    ___/ The OSS Review Toolkit, version 22.5.0,
|    |   | |       _/ |    |    built with JDK 11.0.23+9, running under Java 17
|    |   | |    |   \ |    |    Executing 'evaluate' as 'ort' on Linux
\________/ |____|___/ |____|    with 8 CPUs and a maximum of 8192 MiB of memory

Environment variables:
ORT_CONFIG_DIR = /home/ort/.ort/config
ORT_DATA_DIR = /builds/my-group/my-app/.ort
HOME = /home/ort
JAVA_HOME = /opt/java/openjdk
ANDROID_HOME = /opt/android-sdk

Looking for ORT configuration in the following file:
        /home/ort/.ort/config/config.yml
Looking for evaluator-specific configuration in the following files, directories and resources:
        /home/ort/.ort/config/copyright-garbage.yml
        /home/ort/.ort/config/license-classifications.yml
        /home/ort/.ort/config/evaluator.rules.kts
The following 10 rule violations have been found:
WARNING: UNMAPPED_DECLARED_LICENSE - Conan::range-v3:0.11.0 - The declared license 'Boost Software License - Version 1.0 - August 17th, 2003' could not be mapped to a valid license or parsed as an SPDX expression. The license was found in package Conan::range-v3:0.11.0.

Environment

ORT version: 22.5.0
Java version: 17
OS: Linux (Docker)

We are running the public docker image:
ghcr.io/oss-review-toolkit/ort:22.5.0@sha256:9796531277a0b1536c36a41461995db3042293b069a7845a268328cb2e6dd6b0

And specify (relevant parts of) your ORT configuration (config.yml):

config.yml
ort:
  addAuthorsToCopyrights: true
  enableRepositoryPackageCurations: true
  enableRepositoryPackageConfigurations: true

  # Based on https://github.com/oss-review-toolkit/ort/blob/21c260ed10433e1abd4cfe3145409950467aaa30/utils/common/src/main/kotlin/EnvironmentVariableFilter.kt
  deniedProcessEnvironmentVariablesSubstrings:
    # Default
    - KEY
    - PASS
    - SECRET
    - TOKEN
    - USER
  allowedProcessEnvironmentVariableNames:
    # Default
    - CARGO_HTTP_USER_AGENT
    - COMPOSER_ALLOW_SUPERUSER
    - CONAN_LOGIN_ENCRYPTION_KEY
    - CONAN_LOGIN_USERNAME
    - CONAN_PASSWORD
    - CONAN_USERNAME
    - CONAN_USER_HOME
    - CONAN_USER_HOME_SHORT
    - DOTNET_CLI_CONTEXT_ANSI_PASS_THRU
    - GIT_ASKPASS
    - GIT_HTTP_USER_AGENT
    - GRADLE_USER_HOME
    - HACKAGE_USERNAME
    - HACKAGE_PASSWORD
    - HACKAGE_KEY
    - PWD
    - USER
    - USERPROFILE
  analyzer:
    allowDynamicVersions: true

    package_managers:
      NuGet:
        options:
          nugetConfigFile: "${NUGET_CONFIG_DIR}/nuget.config"

  scanner:
    skipConcluded: true

    archive:
      enabled: true

      postgresStorage:
        connection:
          url: 'jdbc:postgresql://postgres.company.local:5432/postgres'
          schema: public
          username: ${POSTGRES_USERNAME}
          password: ${POSTGRES_PASSWORD}
          sslmode: require

    createMissingArchives: true

    config:
    # A map from scanner plugin types to the plugin configuration.
      ScanCode:
        options:
          commandLine: ${ORT_SCANCODE_COMMANDLINE}

    storages:
      artifactoryStorage:
        type: "PROVENANCE_BASED"
        backend:
          httpFileStorage:
            url: 'https://artifactory.company.local/artifactory/scan-results/provenance_based'
            headers:
              X-JFrog-Art-Api: ${ARTIFACTORY_API_TOKEN}

    storageReaders: [artifactoryStorage]

    storageWriters: [artifactoryStorage]

    provenanceStorage:
      postgresStorage:
        connection:
          url: 'jdbc:postgresql://postgres.company.local:5432/postgres'
          schema: public
          username: ${POSTGRES_USERNAME}
          password: ${POSTGRES_PASSWORD}
          sslmode: require

Additional context
Add any other context about the problem here.

IIUC, you're not trying to apply curations to direct dependencies, but to the (test) projects themselves. Applying curations is only supported for packages / dependencies, not for projects; the reason is that project are assumed to be under your control, so you are in a position to fix the metadata in your own source code directly, instead of relying on curations.

Hey @sschuberth, thanks for the reply!

Applying curations is only supported for packages / dependencies, not for projects; the reason is that project are assumed to be under your control, so you are in a position to fix the metadata in your own source code directly, instead of relying on curations.

Makes sense!
I checked with a few colleagues that are actively working with the project and its dependencies. These conanfile.py configurations refer to upstream packages that are sometimes being patched during our build process - that is why we need to have projects for each of them.
But as it turns out we can customize the license field in these local conanfile.py files to use valid SPDX expressions. I assumed that the metadata was auto-generated - but it is not. 🤦
So we can just fix our issues inside the conanfile.py files without using any curations after all:
from conans import ConanFile

class Rangev3Conan(ConanFile):
  name = "range-v3"
  version = "0.11.0"
  license = "BSL-1.0" # <= Use a valid SDPX expression
  description = "Provides the range library for C++11/14/17."
  url = "https://github.com/ericniebler/range-v3"
  git_commit = "4989f3e9ff2efee1852942bb9328ef121369ba02"
  exports = "*"

I will go ahead and close this issue - it is working like expected.
Thanks!


#23 Support using the library in a non-springboot project

splitted the project in three maven modules: one core library without any spring or third party tool dependency, one spring boot starter and one, that ties them all together

wohoo, build is green \o/

:+1:

Should we get a new section into the README like "how to use with non-springboot projects"?

Would not add this now, maybe later when we have more experiences. Until then, i would consider it undocumented and experimental.

fixed the comment

:+1:

:+1:

:+1:

:+1:


Some Columns are not unloaded serverside

Some empty columns that appear outside of the view radius do not get unloaded

This happens without the dependeny system being engaged at all.

After some debugging, it turns out I probably got Column.enqueueRelightChecks wrong and it causes new columns to be loaded.

It looks like these chunks are also getting loaded in vanilla, but they are somehow getting unloaded after some time. And the cycle repeats.

Fixed in 3a6b9e991fe6cef6a72a1d10383b968722ae92d2


Fix urllib3.util.ssl_.DEFAULT_CIPHERS import

Description
urllib3 2.0 was released on 2023-04-26. One of the changes was the removal of urllib3.util.ssl_.DEFAULT_CIPHERS. urllib3 now detects and uses the default ciphers configured by the system (https://github.com/urllib3/urllib3/issues/2168, https://github.com/urllib3/urllib3/pull/2705).
Requests currently allows urllib3>=1.21.1,<3. HTTPie has an indirect dependency on urllib3 (through Requests), and currently imports the DEFAULT_CIPHERS constant and uses it to populate CLI help text for the --ciphers flag.
https://github.com/httpie/httpie/blob/47e9b99ba19b2a9d3e0098726fff4469b9dd6bb0/httpie/ssl_.py#L6-L12
https://github.com/httpie/httpie/blob/47e9b99ba19b2a9d3e0098726fff4469b9dd6bb0/httpie/cli/definition.py#L830-L837
This means that users who install HTTPie with urllib3>=2 will see an ImportError (httpie/httpie#1499).
Changes
This PR will update HTTPie to catch the ImportError and assemble a list of default ciphers in the OpenSSL cipher list format.
Please note that GitHub Actions workflow runs appear to be failing because of pre-existing errors, not necessarily because of the changes in this PR.
Longer-term, it would be prudent to avoid importing from private modules in indirect dependencies.
If it is going to take some time to support urllib3 2.0, it could also be helpful to declare a direct dependency on urllib3>1,<2 in setup.py.
Related

Closes httpie/httpie#1499
urllib3 changelog
urllib3 2.0 migration guide
https://github.com/httpie/httpie/issues/870
https://github.com/urllib3/urllib3/issues/2168
https://github.com/urllib3/urllib3/pull/2705
https://github.com/boto/botocore/issues/2921
https://github.com/boto/botocore/pull/2924

@br3ndonland thanks for the PR! I didn’t notice it until merging another one, but then updated the code with your approach. Fixed in v3.2.2.


FreeText_through_navigation is broken

Also FreeText_through_navigation_with_language_terms and Contains_through_navigation

System.InvalidOperationException : The LINQ expression 'LastOrDefault(Select<TransparentIdentifier<Employee, Employee>, Employee>(
source: Where<TransparentIdentifier<Employee, Employee>>(
source: LeftJoin<Employee, Employee, Nullable, TransparentIdentifier<Employee, Employee>>(
outer: DbSet,
inner: DbSet,
outerKeySelector: (e) => Property<Nullable>(e, "ReportsTo"),
innerKeySelector: (e0) => Property<Nullable>(e0, "EmployeeID"),
resultSelector: (o, i) => new TransparentIdentifier<Employee, Employee>(
Outer = o,
Inner = i
)),
predicate: (e) => FreeText(
_: (Unhandled parameter: __Functions_0),
propertyReference: e.Inner.Title,
freeText: "President") && FreeText(
_: (Unhandled parameter: __Functions_0),
propertyReference: e.Outer.Title,
freeText: "Inside") && e.Outer.FirstName.Contains("Lau")),
selector: (e) => e.Outer))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

No idea, probably new query pipeline

@ajcvickers Enabled it in aca49588a691c3b617502dcd8d67e5eb4b284558, but it was probably still broken

The test is doing LastOrDefault with order by so exception. New query pipeline identified badly written tests. :trollface:


[backend] It's not possible to edit Service chart values/settings

Related issue: #252
Service/edit APIs to be provided.

@torchiaf is there an issue over in epinio/epinio for this?

Moved to epinio repository: https://github.com/epinio/epinio/issues/2518


Input (screen presses) via command line?

Hello,
It's not listed as a feature but please can you tell me if it's possible to register touches via the command line. By this I mean in specific locations, not just the home or back button for example.
I understand this to be a feature of ADB using the following command, however I was just curious if it's possible since the following code feels a little sluggish:
adb.exe -s XXXXXXXX shell input tap 350 1000
Alternatively if that's not a feature and you have an idea on how I can speed this up, I'd be super intrigued to hear.
Many thanks

Just a quick follow up, I've read comment 231: https://github.com/Genymobile/scrcpy/issues/231#issuecomment-414111753
Which explains why it's much quicker however I am still left wondering if it's possible to use Scrcpy for input events as explained above.
Furthermore, if its not possible is there as easy method for me to speed this up (I've quite a novice).

Definitely interested in this as well! I'm still looking for a way to use this together with some sort of mapping feature. Would be wonderful to map wasd to a onscreen joypad in a game (with touch coordinates) for example.

Yeah, I remain hopeful that's it's a feature which may be added

Hi there! I have solved the similar problem using scrcpy i.e sending command line touch inputs to your android phone.
You can check out this helpful repository
https://github.com/imneonizer/How-to-mirror-you-android-screen-with-opencv/blob/master/README.md

Definitely interested in this as well! I'm still looking for a way to use this together with some sort of mapping feature. Would be wonderful to map wasd to a onscreen joypad in a game (with touch coordinates) for example.

you can use keymapper like 'octopus' or 'panda keymaper', to specify which area to press with some sort of alphanumeric keymapping between your phone and computer and when you press that button on your computer keyboard, that area will be touched simulated on your phone.

Hi there! I have solved the similar problem using scrcpy i.e sending command line touch inputs to your android phone.
You can check out this helpful repository
https://github.com/imneonizer/How-to-mirror-you-android-screen-with-opencv/blob/master/README.md

Hey, thanks for your response. I'll take a look tonight but I am still interested in finding a solution to my problem. Perhaps this will help.

Definitely interested in this as well! I'm still looking for a way to use this together with some sort of mapping feature. Would be wonderful to map wasd to a onscreen joypad in a game (with touch coordinates) for example.

you can use keymapper like 'octopus' or 'panda keymaper', to specify which area to press with some sort of alphanumeric keymapping between your phone and computer and when you press that button on your computer keyboard, that area will be touched simulated on your phone.

Thanks, but I absolutely dont trust octopus or panda keymapper.
Thanks for your github link, I will definitely check it out!
I also found this, maybe it can be useful? https://github.com/Shyri/TouchMapper
Unfortunately the dev isn't working on the project anymore.

Screen presses without scrcpy working is possible by individually opening the mapper module of guiscrcpy. https://github.com/srevinsaju/guiscrcpy/issues/13
https://github.com/srevinsaju/guiscrcpy


Add missing setting control

Fixes #369

I did not realize I forgot to add the setting. Thanks for opening a PR for this.


Configuration of apt / yum repository

Please make this optional. The user should be able to configure its own repository.
https://github.com/n1tr0g/golja-influxdb/blob/master/manifests/server/install.pp#L17

Did you try to use the manage_install parameter to ignore the module installation or you want to have an way that inside this module you can provide custom repo's ?

I just need an additional parameter to enable/disable the include of class repo.pp. In some cases the user might be interested in using its local mirror instead of the public mirror of InfluxData.

agreed, it would be great if the module could be configurable to simply install the influxdb package.  In my case I use Foreman to manage local repo mirrors (as the influx servers don't have access to the interwebs)

+1 to make the upstream repo optional. I'd like to install from my own repository instead.

At my current assignment we manage local repo mirrors. I've made pull request #38 to make repo management optional.


fix: 25709 drop container does not add opacity to entire height of the drawer

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/25709
PROPOSAL: https://github.com/Expensify/App/issues/25709#issuecomment-1689836246
Tests

Go to the money request page
Select Scan tab
Drag file to this tab
Notice the green opacity does not cover entire height of drawer
Verify that the green opacity covers entire height of drawer same as desktop

[x] Verify that no errors appear in the JS console

Offline tests

Same as above
QA Steps

Go to the money request page
Select Scan tab
Drag file to this tab
Notice the green opacity does not cover entire height of drawer
Verify that the green opacity covers entire height of drawer same as desktop

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

https://github.com/Expensify/App/assets/113963320/ecddb277-7f0a-4072-bafa-8ef744f1d862

Mobile Web - Chrome

https://github.com/Expensify/App/assets/113963320/25c4ed21-3b6d-4c05-bc1b-80a5f009c350

Mobile Web - Safari

https://github.com/Expensify/App/assets/113963320/5d258e04-7a4e-4102-8f10-d4def585bb2a

Desktop

https://github.com/Expensify/App/assets/113963320/3dddd62c-6d6b-4f91-bb7a-0273f658fba5

iOS

Android

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/AndrewGable in version: 1.3.67-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/AndrewGable in version: 1.3.67-3 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

🚀 Deployed to staging by https://github.com/AndrewGable in version: 1.3.68-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/Julesssss in version: 1.3.68-17 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅


fix: Update readme format to the format expected by the release action.

:tada: This PR is included in version 1.0.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket: