Refactoring of handleDriverContainer code

This PR refactors the code of handleDrivercontainer code, and as a result also refactors the moduleReconciler loop, garbage collector and status module updator The main points:

change the name of the module loader DS name creation. Now the name consists of
module.Name + hash(kernel version). This way we don't actually need a map of DS per
kernel version, we can allow CreateOrPatch function to do its work, since now DS name
is deterministic
as a result of 1), the API of handleDriverContainer, garbageCollector, statusUpdater
and reconcile loop has been change
DaemonSet interface now returns just a list of DS for module 4) the differintiation between device-plugin and module-loader DS
is now based on the role label
updating unit test

Part of 263

Codecov Report
Patch coverage: 90.62% and project coverage change: -0.20 :warning:

Comparison is base (a5ebe9b) 82.82% compared to head (afb1497) 82.63%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #332      +/-   ##
==========================================
- Coverage   82.82%   82.63%   -0.20%
==========================================
  Files          27       27
  Lines        2771     2752      -19
==========================================
- Hits         2295     2274      -21
  Misses        386      386
- Partials       90       92       +2

Impacted Files
Coverage Δ

controllers/module_reconciler.go
81.81% <81.25%> (-1.00%)
:arrow_down:

internal/daemonset/daemonset.go
98.08% <100.00%> (+0.19%)
:arrow_up:

internal/statusupdater/statusupdater.go
92.94% <100.00%> (ø)

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

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

@yevgeny-shnaidman the PR decreases the coverage, could you please fix that?

What is the benefit of dropping the map and relying on a hash? I originally went with that map to eliminate the risk of any collision.

What is the benefit of dropping the map and relying on a hash? I originally went with that map to eliminate the risk of any collision.

hash is safe enough, especially since we are talking about DaemonSets  per module per namespace. The benefit is simplifying the code, eliminating double code, since CreateOrPatch check for DS existance and knows to take the existent DS and patch it. In addition, when we will work with ModuleVersion, we don't need to maintain map per kernel version per module version - we can just code module version as part of DS name and the same code will work

In addition, when we will work with ModuleVersion, we don't need to maintain map per kernel version per module version

What is the cost of that? I think a struct with both the kernel and the module version can be a map key.

/lgtm


fix(Naming): rename library name

BREAKING CHANGE: OpenGeodeIOXXX -> IOXXX

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


Toolbar only says "ConnectBot" when being in the settings and when being on the edit host screen

Hello,
when being in the settings, the toolbar only says "ConnectBot".
But it should say "Settings".
Could you please fix it?
Regards

PS:
The same is also true for when being on the edit host screen.
When being on the edit host screen, the toolbar only says "ConnectBot".
But it should say "Edit host".
Regards

Already done in 3ee07166ee1aa584686b631341cb5dabc32359e5.


[question] ZWaveError: Failed to send the command after 3 attempts

Having a lot of issues with my z wave network. Frequently it will start up ok, and then after a while it will abruptly stop working, and I get this error. When this happens, nothing on the network will work in terms of commands. It still receives notifications from sensors, but it is unable to turn on any lights/fans/etc.
This is what I see in the debug window.
2021-07-01 12:30:49.249 ERROR ZWAVE-SERVER: Z-Wave error Failed to send the command after 3 attempts (Status Fail)
ZWaveError: Failed to send the command after 3 attempts (Status Fail)
at Driver.sendMessage (/usr/src/app/node_modules/zwave-js/src/lib/driver/Driver.ts:2271:23)
at Driver.sendCommand (/usr/src/app/node_modules/zwave-js/src/lib/driver/Driver.ts:2405:28)
at Driver.trySendCommandSupervised (/usr/src/app/node_modules/zwave-js/src/lib/driver/Driver.ts:2494:15)
at MultilevelSwitchCCAPI.set (/usr/src/app/node_modules/zwave-js/src/lib/commandclass/MultilevelSwitchCC.ts:172:47)
at Proxy.MultilevelSwitchCCAPI. (/usr/src/app/node_modules/zwave-js/src/lib/commandclass/MultilevelSwitchCC.ts:311:33)
at ZWaveNode.setValue (/usr/src/app/node_modules/zwave-js/src/lib/node/Node.ts:752:14)
at Function.handle (/usr/src/app/node_modules/@zwave-js/server/dist/lib/node/message_handler.js:19:44)
at Object.node (/usr/src/app/node_modules/@zwave-js/server/dist/lib/server.js:37:91)
at Client.receiveMessage (/usr/src/app/node_modules/@zwave-js/server/dist/lib/server.js:91:99)
at WebSocket. (/usr/src/app/node_modules/@zwave-js/server/dist/lib/server.js:44:45
I am running the zwavejs2mqtt docker on an unraid system. The usb stick is the zooz 700 stick.
A reboot will seem to fix the issue for a little bit, but I am frequently right back where I started. I have tried to heal the network, I have rebooted, unplugged the USB and plugged it back in. Sometimes the issue will go away on its own. Any ideas?

We need zwavejs logs in order to debug this


Bulk File Rename

Microsoft PowerToys version
Release v0.51.1
Running as admin

[ ] Yes

Area(s) with issue?
PowerRename
Steps to reproduce
I sent about 2hr researching this.
So if you have 50 images with a mixture of filename's but all jpg's in the same folder
You cannot rename them  to beach_1.jpg , beach_2.jpg etc counting up tp 50 ??
Jimmy
✔ Expected Behavior
No response
❌ Actual Behavior
No variable's to rename as described
Other Software
No response

you can enumerate but right now not 100% what you're asking as the format is static.
https://docs.microsoft.com/en-us/windows/powertoys/powerrename#options---enumerate-items

This would be dup'ed against either https://github.com/microsoft/PowerToys/issues/4929 or https://github.com/microsoft/PowerToys/issues/3814

Thanks did not see the dup's in my searches.
I will still have to use adobe bridge etc to bulk rename for different filenames
The way it is in powertoys now is not user friendly for the average person


Does not work in Amazon Linux 2018.03 OS version

In https://aws.amazon.com/blogs/compute/upcoming-updates-to-the-aws-lambda-execution-environment/ AWS announced an upgrade to the Lambda execution environment from Amazon Linux version 2017.03 to version 2018.03.
lambdalatex does not work in the newer environment 2018.03. The latexmk command in lambdalatex needs perl. However, /usr/bin/perl which was present in 2017.03 Lambda images is removed from 2018.03 images.
To use lambdalatex we need to come up with a way to make perl available in the Lambda function. I tried the layer mentioned in https://github.com/moznion/aws-lambda-perl5-layer
However, I got signal 11 while running latexmk. It is possible that that layer is built against 2017.03. I tried to build my own layer but got exit code 127 while invoking latexmk --version. I am not an expert in perl. Nor am I an expert in the texlive distribution. I am unable to make further progress.
Do you have any thoughts on how to make lambdalatex work on Amazon Linux 2018.03 OS version?

That may explain why I'm getting an error that "document.pdf" is not found.  The latexmk file may not be successful?
{
  "errorMessage": "[Errno 2] No such file or directory: 'document.pdf'",
  "errorType": "FileNotFoundError",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      47,
      "lambda_handler",
      "event['output_key'])"
    ],

Ran into the same issue. Previous Lambda Function works just fine. @suriya Were you able to figure out how to add perl supprt to the new env?

@wzard I have not made further progress.
On Tue, Jun 25, 2019, 2:47 AM Siddharth Kanungo<EMAIL_ADDRESS>wrote:

Ran into the same issue. Previous Lambda Function works just fine. @suriya
https://github.com/suriya Were you able to figure out how to add perl
supprt to the new env?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/samoconnor/lambdalatex/issues/3?email_source=notifications&email_token=AAAKS5R7NJJV567X6ZGQQNTP4E2X3A5CNFSM4HR4IEAKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYOIGTA#issuecomment-505185100,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAAKS5TKMQQWID2OLVWPV5TP4E2X3ANCNFSM4HR4IEAA
.

@wzard @suriya same problem here, but I think I am on the right track
I built a custom Perl Layer based of the linked perl layer that seems to work
here is my Dockerfile for it:
FROM lambci/lambda:build

ARG PERL_VERSION
RUN yum install -y zip curl
RUN curl -L https://raw.githubusercontent.com/tokuhirom/Perl-Build/master/perl-build > /tmp/perl-build
RUN perl /tmp/perl-build ${PERL_VERSION} /opt/ -des -Dcf_by="Red Hat, Inc." -Darchname=x86_64-linux-thread-multi -Dusethreads -Duseithreads -Dusesitecustomize

WORKDIR /opt

And then just build and package the stuff:
docker build --rm --build-arg PERL_VERSION=5.16.3 -t perllayer .
docker run --rm -it -v "YOUR OUTPUT DIRECTORY HERE":/var/host perllayer zip --symlinks -r -9 /var/host/PerlLayer.zip .

Tried some simple cases and it did the job, but needs some more testing after the weekend. Feel free to try it out.
Have a nice weekend

@samoconnor - thanks a lot for this - it was just what I needed. And thanks to @Karandaras for the comment above. I can confirm that adding the perl runtime in this way works. Layers would be better, but in the short term I just added the perl dependencies directly to the same zip file. My minor modifications:
Remove /man from the docker image to reduce the zip file size:
RUN rm -r /opt/man

and include the paths to the perl executable and libs in the script:
    os.environ['PATH'] += ":/var/task/bin/"
    os.environ['PATH'] += ":/var/task/texlive/2019/bin/x86_64-linux/"

    os.environ['PERL5LIB'] = '/var/task/lib/perl5/5.16.3/'
    os.environ['PERL5LIB'] += ":/var/task/texlive/2019/tlpkg/TeXLive/"

As an aside, the approach used in this project to install texlive does not pin to a version, so the user needs to be sure to update the path to texlive accordingly. In my version I'll plan to parameterize both this and the perl version.

Thanks @Karandaras, I was able to get my lambda function to work again.  Also thanks @nhoffman for the optimizations.
My lambda execution time was 7.6 seconds using 128mb for a simple latex document.  Not too shabby.

@Karandaras Worked for me as well. Thank you!

Thanks to all for this support in this area specifically. It took me about 3 hours to go from git clone to producing a PDF of my own in lambda/latex. The perl issue was certainly the toughest nut to crack, particularly because you can go about it in a number of ways (standalone layer, include in the latex lambda itself) but this guidance was very helpful.
Including both latex and perl in one lambda is difficult. I already had to strip down latex to NO extra packages, etc to get everything in under the 50MB limit. I'm thinking splitting this up into Perl in its own layer will ultimately be the way to go.
To anyone that wants to just get going with Latex/Perl together to prove out the concept, I'm attaching a Docker file below. It's can probably be optimized even more, but this "works":
Dockerfile
FROM lambci/lambda:build-python3.6

# Install Perl
ARG PERL_VERSION
RUN yum install -y zip curl
RUN curl -L https://raw.githubusercontent.com/tokuhirom/Perl-Build/master/perl-build > /tmp/perl-build
RUN perl /tmp/perl-build ${PERL_VERSION} /opt/ -des -Dcf_by="Red Hat, Inc." -Darchname=x86_64-linux-thread-multi -Dusethreads -Duseithreads -Dusesitecustomize

# The TeXLive installer needs md5 and wget.
RUN yum -y install perl-Digest-MD5 && \
    yum -y install wget

RUN mkdir /var/src
WORKDIR /var/src

# Download TeXLive installer.
ADD http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz /var/src/
#RUN pwd && ls -lah /var/src
#COPY install-tl-unx.tar.gz /var/src/

# Minimal TeXLive configuration profile.
COPY texlive.profile /var/src/

# Intstall base TeXLive system.
RUN tar xf install*.tar.gz
RUN cd install-tl-* && \
    ./install-tl --profile ../texlive.profile
    # --location http://ctan.mirror.norbert-ruehl.de/systems/texlive/tlnet

ENV PATH=/var/task/texlive/2017/bin/x86_64-linux/:$PATH

# Install extra packages.

RUN tlmgr install latexmk

# Remove LuaTeX.
RUN tlmgr remove --force luatex

# Remove large unneeded files.
RUN rm -rf /var/task/texlive/2017/tlpkg/texlive.tlpdb* \
           /var/task/texlive/2017/texmf-dist/source/latex/koma-script/doc \
           /var/task/texlive/2017/texmf-dist/doc

RUN mkdir -p /var/task/texlive/2017/tlpkg/TeXLive/Digest/ && \
    mkdir -p /var/task/texlive/2017/tlpkg/TeXLive/auto/Digest/MD5/ && \
    cp /usr/lib64/perl5/vendor_perl/Digest/MD5.pm \
      /var/task/texlive/2017/tlpkg/TeXLive/Digest/ && \
    cp /usr/lib64/perl5/vendor_perl/auto/Digest/MD5/MD5.so \
      /var/task/texlive/2017/tlpkg/TeXLive/auto/Digest/MD5

# Remove perl libraries that don't get used so we can get under the 50 MB limit
RUN rm -rf /opt/lib/perl5/5.16.3/x86_64-linux-thread-multi/auto/Encode/CN
RUN rm -rf /opt/lib/perl5/5.16.3/x86_64-linux-thread-multi/auto/Encode/JP
RUN rm -rf /opt/lib/perl5/5.16.3/x86_64-linux-thread-multi/auto/Encode/KR
RUN rm -rf /opt/lib/perl5/5.16.3/x86_64-linux-thread-multi/auto/Encode/TW

FROM lambci/lambda:build-python3.6

WORKDIR /var/task

ENV PATH=/var/task/texlive/2017/bin/x86_64-linux/:/opt/:$PATH
ENV PERL5LIB=/var/task/texlive/2017/tlpkg/TeXLive/

COPY --from=0 /var/task/ /var/task/
COPY --from=0 /opt/bin/perl /var/task/bin/
COPY --from=0 /opt/lib /var/task/lib
COPY lambda_function.py /var/task

RUN ls -lah /var/task

lambda_function.py
Mostly like the author's, but adding the extra PERL5LIB and PATH paths.
import os
import io
import shutil
import subprocess
import base64
import zipfile
import boto3

def lambda_handler(event, context):

    # Extract input ZIP file to /tmp/latex...
    shutil.rmtree("/tmp/latex", ignore_errors=True)
    os.mkdir("/tmp/latex")

    print(event)

    if 'input_bucket' in event:
        r = boto3.client('s3').get_object(Bucket=event['input_bucket'],
                                          Key=event['input_key'])
        bytes = r["Body"].read()
    else:
        bytes = base64.b64decode(event["input"])

    z = zipfile.ZipFile(io.BytesIO(bytes))
    z.extractall(path="/tmp/latex")

    os.environ['PATH'] += ":/var/task/bin"
    os.environ['PATH'] += ":/var/task/texlive/2017/bin/x86_64-linux/"
    os.environ['HOME'] = "/tmp/latex/"

    os.environ['PERL5LIB'] = "/var/task/lib/perl5/5.16.3/"
    os.environ['PERL5LIB'] += ":/var/task/texlive/2017/tlpkg/TeXLive/"

    os.chdir("/tmp/latex/")

    # Run pdflatex...
    r = subprocess.run(["latexmk",
                        "-verbose",
                        "-interaction=batchmode",
                        "-pdf",
                        "-output-directory=/tmp/latex",
                        "document.tex"],
                       stdout=subprocess.PIPE,
                       stderr=subprocess.STDOUT)
    print(r.stdout.decode('utf_8'))

    if "output_bucket" in event:
        boto3.client('s3').upload_file("document.pdf",
                                       event['output_bucket'],
                                       event['output_key'])
        return {
            "stdout": r.stdout.decode('utf_8')
        }

    else:
        # Read "document.pdf"...
        with open("document.pdf", "rb") as f:
            pdf = f.read()

        # Return base64 encoded pdf and stdout log from pdflaxex...
        return {
            "output": base64.b64encode(pdf).decode('ascii'),
            "stdout": r.stdout.decode('utf_8')
        }

Test Event: Once you've uploaded your lambda, in the lambda console, paste this into "Configure test event" panel.
{
  "input": "UEsDBBQACAAIAHM5JFEAAAAAAAAAAFgAAAAMACAAZG9jdW1lbnQudGV4VVQNAAfqIFJfOiNSX/5NUl91eAsAAQT1AQAABBQAAACLSclPLs1NzStJzkksLo42NCwo0clJLSlJLSpILEgtiq1OLCrJTM5JreWKSUpNz8yrhqmv5fJIzcnJVwjPL8pJUeSKSc1LQZLjAgBQSwcIlMFj5UsAAABYAAAAUEsBAhQDFAAIAAgAczkkUZTBY+VLAAAAWAAAAAwAIAAAAAAAAAAAAKSBAAAAAGRvY3VtZW50LnRleFVUDQAH6iBSXzojUl/+TVJfdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAABAAEAWgAAAKUAAAAAAA=="
}

I would like to point out a quicker solution:
Using the layer from ARN arn:aws:lambda:us-east-1:445285296882:layer:perl-5-34-runtime-al2-x86_64:4 (grabbed from here) works.
The input example of the repo took about 1 min to run, I don't know if it's the layer's fault or python but it worked.
I would like to also point out that this arn layer is from the internet and you shouldn't trust it blindly despite the fact that it works, please don't use it for sensitive documents and for a long-term solution, build your own perl layer.


Add more list-style type utilities

Hi all,
I was wondering if there was any interest in add more list-style-types like lower-alpha for an ordered list like:
a. Item 1
b. Item 2
c. Item 3
I was creating an ordered list inside an orderlist and I wanted to be able to differentiate the nesting level easily.
Right now I just added an inline style like: style="list-style-type: lower-alpha;". I know I can also add my own config, but I guess I was just wondering wether we could extend add these by default. Another one I thought could be useful is lower-roman.
Here's a list of all default list-style-types
If anyone has any other opinions I would like to hear them!
With kind regards,
Dani Tulp

I used to maintain a plugin that would add those classes but it was deprecated because core added support for them: https://tailwindcss.com/docs/list-style-type/#customizing

@hacknug
Yeah I know I can customize them, I was just thinking it could be useful to add a few more to the core. I might be biased though because I use <ol> and list-type a ton. I guess I was just wondering what other people thought about it.


[Request for External] codeunit 70 "Purch.-Calc.Discount" - Protected variables

Hello, we need the following currently global variable/-s to be set as protected. Can you please check this? Thank you!
protected var
   PurchLine: Record "Purchase Line"

Protected variables cannot be used in codeunits, see AS0676


fix: Get taskbar location on linux

fixes #123

Hey :)
how can we unfreeze this PR? We can test it on ubuntu, if that helps.

@evertonfraga Unfrozen. I'll spin up some linux VM this weekend to test thoroughly (the current changes are 100% untested).
If you test and want to create a fork before that, please do, and I'll close mine. It's really just empirically testing menubar location with one of these values.

Unfortunately this won't work because of https://github.com/electron/electron/issues/15003. I'm closing this, we'll always show the window in the top right corner for now.

screen.getCursorScreenPoint() to get screen click cursor pointer and use it instead of tray icon bounds


Cucumber 4.2.1 fails  due to the new "order" option, but 4.1.0 works

Hey, just installed the https://github.com/webdriverio/cucumber-boilerplate and it fails due to error

Expand stack trace
Type    at orderTestCases (/home/circleci/repo/node_modules/cucumber/src/cli/helpers.js:74:28)
    at Object.<anonymous> (/home/circleci/repo/node_modules/cucumber/src/cli/helpers.js:41:3)
    at Generator.next (<anonymous>)
    at Generator.tryCatcher (/home/circleci/repo/node_modules/bluebird/js/release/util.js:16:23)
    at PromiseSpawn._promiseFulfilled (/home/circleci/repo/node_modules/bluebird/js/release/generators.js:97:49)
    at Promise._settlePromise (/home/circleci/repo/node_modules/bluebird/js/release/promise.js:574:26)
    at Promise._settlePromise0 (/home/circleci/repo/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/home/circleci/repo/node_modules/bluebird/js/release/promise.js:693:18)
    at Async._drainQueue (/home/circleci/repo/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/home/circleci/repo/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/home/circleci/repo/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:794:20)
    at tryOnImmediate (timers.js:752:5)
    at processImmediate [as _immediateCallback] (timers.js:729:5)

If you check cucumber changelog for version 4.2.0 there is a new option order now required to pass into getTestCasesFromFilesystem which webdriver adapter not yet supports.
I had to lock down version to 4.1.0 to make tests work.
Looks like a small fix, thanks in advance!

@vladgolubev feel free to propose a PR

will take care of it

I overriden cucumber version in package-lock for a while:
"wdio-cucumber-framework": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/wdio-cucumber-framework/-/wdio-cucumber-framework-2.0.1.tgz",
      "integrity": "sha512-JpFiVJxLkEj7kNALVezFX87UZgDf2y4o7whO77+J8wtNsOoLs0vNlmAjZr1Kme5eb3jVZUoeQkVWXlE+Xw7Gkg==",
      "requires": {
        "babel-runtime": "6.26.0",
        "cucumber": "4.1.0",
        "glob": "7.1.2",
        "is-glob": "4.0.0",
        "mockery": "2.1.0",
        "wdio-sync": "0.7.1"
      },
      "dependencies": {
        "cucumber": {
          "version": "4.1.0",

For anyone looking for a temp workaround until this is accepted,
if you're using yarn, you can add this to the package.json
"resolutions": {
    "wdio-cucumber-framework": "https://github.com/swissmanu/wdio-cucumber-framework.git#order-option"
}

@christian-bromann can you release a new version with fix for this issue?

@BorisOsipov  Hi Boris, Sorry I didnt understand how to fix this issue
What should I do ?

Thanks for the quick reply @BorisOsipov
Do you know what version can I downgrade on "yarn.lock" so I can run my steps files while the error is being fixed in the released version ?

@RenanChagas  you can downgrade cucumber version to
"cucumber": "4.1.0"

@RenanChagas  for yarn use https://yarnpkg.com/en/docs/selective-version-resolutions#search

I deleted the "node_modules" and "yarn.lock" and it still getting the same error
package.json

{
"name": "my-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"chai": "^4.1.2",
"react": "^16.3.2",
"react-dom": "^16.3.2",
"react-scripts": "1.1.4",
"selenium-standalone": "^6.14.0",
"wdio-cucumber-framework": "2.0.1",
"webdriverio": "4.12.0",
"cucumber": "4.1.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"resolution": {
"cucumber": "4.1.0",
"cucumber-expressions": "5.0.13"
}
}

@RenanChagas you have a typo
It's resolutions not resolution

@vladgolubev thank you, but unfortunetely I'm still getting the same error :(
Can anyone help me ? I dont know what else can it be.
https://github.com/RenanChagas/my-app.git

@RenanChagas hmmm, now you downgraded to version 2, and when I try to run your repo locally I get this

Maybe you forgot to push some latest changes? Can you please update your example to make it run?

@RenanChagas update to wdio-cucumber-framework 2.1.0 - it fixes your issue.

Thank you @vladgolubev and @BorisOsipov !!!

@RenanChagas
for future reference, here's where you went wrong on the package json
Working package.json below
"resolutions": {
  "wdio-cucumber-framework/cucumber": "4.1.0"
}

as the issue was caused by the cucumber dependency in the wdio-cucumber-framework, we need to tell yarn to use version 4.1 when referenced by wdio-cucumber-framework

Thank you @Nibblesh


Connecting to localhost or UDS with gRPC client

I didn't investigate this in detail but I am having trouble connecting to localhost (with TLS) using the gRPC client.
UNKNOWN:failed to connect to all addresses; last error: UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed

with GRPC_VERBOSITY=debug and GRPC_TRACE=all
I0724 17:13:11.215147709  142847 handshaker.cc:100]                    handshake_manager 0x55580ce31150: error=OK shutdown=0 index=0, args={endpoint=(nil), args={grpc.client_channel_factory=0x55580ce086f0, grpc.default_authority=localhost:3593, grpc.internal.channel_credentials=0x55580ce09970, grpc.internal.event_engine=0x55580ccd4610, grpc.internal.security_connector=0x55580cc8daf0, grpc.internal.subchannel_pool=0x55580cd7dd50, grpc.internal.tcp_handshaker_bind_endpoint_to_pollset=1, grpc.internal.tcp_handshaker_resolved_address=ipv4:<IP_ADDRESS>:3593, grpc.primary_user_agent=grpc-python/1.56.2, grpc.resource_quota=0x55580ccea2a0, grpc.server_uri=dns:///localhost:3593}, read_buffer=0x55580c94ae80 (length=0), exit_early=0}
I0724 17:13:11.215155726  142847 handshaker.cc:146]                    handshake_manager 0x55580ce31150: calling handshaker tcp_connect [0x55580cc098e0] at index 0
I0724 17:13:11.215263179  142847 tcp_client_posix.cc:387]              CLIENT_CONNECT: ipv4:<IP_ADDRESS>:3593: asynchronously connecting fd 0x55580cc06f30
D0724 17:13:11.215267479  142847 timer_generic.cc:341]                 TIMER 0x7f8b64001410: SET 21784 now 1784 call 0x7f8b64001448[0x7f8b737cce00]
D0724 17:13:11.215270995  142847 timer_generic.cc:377]                   .. add to shard 11 with queue_deadline_cap=2782 => is_first_timer=false
I0724 17:13:11.215275498  142847 client_channel.cc:614]                chand=0x55580ce7d820: connectivity change for subchannel wrapper 0x55580cdf6aa0 subchannel 0x55580cd71cc0; hopping into work_serializer
I0724 17:13:11.215279227  142847 client_channel.cc:638]                chand=0x55580ce7d820: processing connectivity change in work serializer for subchannel wrapper 0x55580cdf6aa0 subchannel 0x55580cd71cc0 watcher=0x55580cd286b0 state=CONNECTING status=OK
I0724 17:13:11.215284657  142847 subchannel_list.h:259]                [PickFirstSubchannelList 0x55580c8e02f0] subchannel list 0x55580cd2fa70 index 1 of 2 (subchannel 0x55580cdf6aa0): connectivity changed: old_state=IDLE, new_state=CONNECTING, status=OK, shutting_down=0, pending_watcher=0x55580cd286b0
I0724 17:13:11.215289258  142847 client_channel.cc:922]                chand=0x55580ce7d820: update: state=CONNECTING status=(OK) picker=0x55580ce48750
I0724 17:13:11.215293178  142847 client_channel.cc:2555]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: removing from queued picks list
I0724 17:13:11.215298223  142847 tcp_client_posix.cc:182]              CLIENT_CONNECT: ipv4:<IP_ADDRESS>:3593: on_writable: error=OK
D0724 17:13:11.215301091  142847 timer_generic.cc:442]                 TIMER 0x7f8b64001410: CANCEL pending=true
I0724 17:13:11.215305789  142847 memory_quota.cc:450]                  Adding allocator 0x7f8b640053d0
I0724 17:13:11.215312588  142847 executor.cc:294]                      EXECUTOR (default-executor) try to schedule 0x55580cc099c0 (short) to thread 0
I0724 17:13:11.215315978  142847 client_channel.cc:2599]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: grabbing LB mutex to get picker
I0724 17:13:11.215319105  142847 client_channel.cc:2609]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: performing pick with picker=0x55580ce48750
I0724 17:13:11.215322189  142847 client_channel.cc:2701]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: LB pick queued
I0724 17:13:11.215325181  142847 client_channel.cc:2569]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: adding to queued picks list
I0724 17:13:11.215329207  142847 tcp_client_posix.cc:143]              CLIENT_CONNECT: ipv4:<IP_ADDRESS>:3593: on_alarm: error=CANCELLED
I0724 17:13:11.215333105  142847 client_channel.cc:3105]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: cancelling queued pick: error=OK self=0x55580ce2bc00 calld->pick_canceller=0x7f8b64004a30
I0724 17:13:11.215336457  142847 executor.cc:222]                      EXECUTOR (default-executor) [0]: step (sub_depth=1)
I0724 17:13:11.215338770  142847 executor.cc:243]                      EXECUTOR (default-executor) [0]: execute
I0724 17:13:11.215341203  142847 executor.cc:122]                      EXECUTOR (default-executor) run 0x55580cc099c0
I0724 17:13:11.215349638  142847 handshaker.cc:100]                    handshake_manager 0x55580ce31150: error=OK shutdown=0 index=1, args={endpoint=0x7f8b64004bb0, args={grpc.client_channel_factory=0x55580ce086f0, grpc.default_authority=localhost:3593, grpc.internal.channel_credentials=0x55580ce09970, grpc.internal.event_engine=0x55580ccd4610, grpc.internal.security_connector=0x55580cc8daf0, grpc.internal.subchannel_pool=0x55580cd7dd50, grpc.primary_user_agent=grpc-python/1.56.2, grpc.resource_quota=0x55580ccea2a0, grpc.server_uri=dns:///localhost:3593}, read_buffer=0x55580c94ae80 (length=0), exit_early=0}
I0724 17:13:11.215356050  142847 handshaker.cc:146]                    handshake_manager 0x55580ce31150: calling handshaker http_connect [0x7f8b64002be0] at index 1
I0724 17:13:11.215361480  142847 handshaker.cc:100]                    handshake_manager 0x55580ce31150: error=OK shutdown=0 index=2, args={endpoint=0x7f8b64004bb0, args={grpc.client_channel_factory=0x55580ce086f0, grpc.default_authority=localhost:3593, grpc.internal.channel_credentials=0x55580ce09970, grpc.internal.event_engine=0x55580ccd4610, grpc.internal.security_connector=0x55580cc8daf0, grpc.internal.subchannel_pool=0x55580cd7dd50, grpc.primary_user_agent=grpc-python/1.56.2, grpc.resource_quota=0x55580ccea2a0, grpc.server_uri=dns:///localhost:3593}, read_buffer=0x55580c94ae80 (length=0), exit_early=0}
I0724 17:13:11.215367847  142847 handshaker.cc:146]                    handshake_manager 0x55580ce31150: calling handshaker security [0x55580ce7da60] at index 2
I0724 17:13:11.215372399  142847 security_context.cc:270]              grpc_auth_context_add_cstring_property(ctx=0x7f8b640011f0, name=transport_security_type, value=insecure)
I0724 17:13:11.215376435  142847 security_context.cc:249]              grpc_auth_context_add_property(ctx=0x7f8b640011f0, name=security_level, value=TSI_SECURITY_NONE, value_length=17)
I0724 17:13:11.215379680  142847 security_context.cc:209]              grpc_auth_context_find_properties_by_name(ctx=0x7f8b640011f0, name=security_level)
I0724 17:13:11.215382488  142847 security_context.cc:183]              grpc_auth_property_iterator_next(it=0x7f8b727e9a40)
I0724 17:13:11.215390293  142847 handshaker.cc:100]                    handshake_manager 0x55580ce31150: error=OK shutdown=0 index=3, args={endpoint=0x7f8b64004bb0, args={grpc.auth_context=0x7f8b640011f0, grpc.client_channel_factory=0x55580ce086f0, grpc.default_authority=localhost:3593, grpc.internal.channel_credentials=0x55580ce09970, grpc.internal.event_engine=0x55580ccd4610, grpc.internal.security_connector=0x55580cc8daf0, grpc.internal.subchannel_pool=0x55580cd7dd50, grpc.primary_user_agent=grpc-python/1.56.2, grpc.resource_quota=0x55580ccea2a0, grpc.server_uri=dns:///localhost:3593}, read_buffer=0x55580c94ae80 (length=0), exit_early=0}
I0724 17:13:11.215400773  142847 handshaker.cc:132]                    handshake_manager 0x55580ce31150: handshaking complete -- scheduling on_handshake_done with error=OK
I0724 17:13:11.215410916  142847 init.cc:149]                          grpc_init(void)
I0724 17:13:11.215413891  142847 memory_quota.cc:450]                  Adding allocator 0x7f8b640056d0
I0724 17:13:11.215448971  142847 flow_control.cc:286]                  [flowctl] UPDATE SETTING INITIAL_WINDOW_SIZE from 65535 to 4194304
I0724 17:13:11.215452345  142847 flow_control.cc:286]                  [flowctl] UPDATE SETTING MAX_FRAME_SIZE from 16384 to 4194304
I0724 17:13:11.215456374  142847 chttp2_transport.cc:918]              W:0x7f8b64012b60 CLIENT [ipv4:<IP_ADDRESS>:3593] state IDLE -> WRITING [TRANSPORT_FLOW_CONTROL]
I0724 17:13:11.215459881  142847 chttp2_transport.cc:918]              W:0x7f8b64012b60 CLIENT [ipv4:<IP_ADDRESS>:3593] state WRITING -> WRITING+MORE [INITIAL_WRITE]
D0724 17:13:11.215464544  142847 posix_engine.cc:484]                  (event_engine) PosixEventEngine:0x55580cc5c7a0 scheduling callback:{140236654986496,3}
I0724 17:13:11.215470849  142847 chttp2_transport.cc:918]              W:0x7f8b64012b60 CLIENT [ipv4:<IP_ADDRESS>:3593] state WRITING+MORE -> WRITING [begin write in current thread]
I0724 17:13:11.215473881  142847 tcp_posix.cc:1804]                    WRITE 0x7f8b64004bb0 (peer=ipv4:<IP_ADDRESS>:3593)
D0724 17:13:11.215477299  142847 tcp_posix.cc:1808]                    WRITE DATA: 50 52 49 20 2a 20 48 54 54 50 2f 32 2e 30 0d 0a 0d 0a 53 4d 0d 0a 0d 0a 'PRI * HTTP/2.0....SM....'
I0724 17:13:11.215480205  142847 tcp_posix.cc:1804]                    WRITE 0x7f8b64004bb0 (peer=ipv4:<IP_ADDRESS>:3593)
D0724 17:13:11.215483720  142847 tcp_posix.cc:1808]                    WRITE DATA: 00 00 24 04 00 00 00 00 00 00 02 00 00 00 00 00 03 00 00 00 00 00 04 00 40 00 00 00 05 00 40 00 00 00 06 00 00 40 00 fe 03 00 00 00 01 '..$<EMAIL_ADDRESS>I0724 17:13:11.215487078  142847 tcp_posix.cc:1804]                    WRITE 0x7f8b64004bb0 (peer=ipv4:<IP_ADDRESS>:3593)
D0724 17:13:11.215489533  142847 tcp_posix.cc:1808]                    WRITE DATA: 00 00 04 08 00 00 00 00 00 00 3f 00 01 '..........?..'
I0724 17:13:11.215510782  142847 tcp_posix.cc:1852]                    write: OK
I0724 17:13:11.215514104  142847 chttp2_transport.cc:918]              W:0x7f8b64012b60 CLIENT [ipv4:<IP_ADDRESS>:3593] state WRITING -> IDLE [finish writing]
D0724 17:13:11.215518482  142847 posix_engine.cc:484]                  (event_engine) PosixEventEngine:0x55580cc5c7a0 scheduling callback:{140236654987264,4}
I0724 17:13:11.215523117  142847 chttp2_transport.cc:2958]             ipv4:<IP_ADDRESS>:3593: Keepalive ping cancelled. Resetting timer.
D0724 17:13:11.215526136  142847 posix_engine.cc:484]                  (event_engine) PosixEventEngine:0x55580cc5c7a0 scheduling callback:{140236654986496,5}
I0724 17:13:11.215529469  142847 tcp_posix.cc:670]                     TCP:0x7f8b64004bb0 notify_on_read
I0724 17:13:11.215532065  142847 executor.cc:222]                      EXECUTOR (default-executor) [0]: step (sub_depth=1)
I0724 17:13:11.215595082  142846 tcp_posix.cc:1086]                    TCP:0x7f8b64004bb0 got_read: OK
I0724 17:13:11.215600686  142846 tcp_posix.cc:876]                     TCP:0x7f8b64004bb0 do_read
I0724 17:13:11.215608438  142846 tcp_posix.cc:811]                     TCP:0x7f8b64004bb0 call_cb 0x7f8b64012cf0 0x7f8b73630030:0x7f8b64012b60
I0724 17:13:11.215614828  142846 tcp_posix.cc:813]                     READ 0x7f8b64004bb0 (peer=ipv4:<IP_ADDRESS>:3593) error=INTERNAL:Socket closed {target_address:"ipv4:<IP_ADDRESS>:3593", grpc_status:14, fd:5}
I0724 17:13:11.215638815  142846 chttp2_transport.cc:2980]             transport 0x7f8b64012b60 set connectivity_state=4
I0724 17:13:11.215641971  142846 connectivity_state.cc:160]            ConnectivityStateTracker client_transport[0x7f8b64012e50]: READY -> SHUTDOWN (close_transport, OK)
I0724 17:13:11.215695486  142846 subchannel.cc:707]                    subchannel 0x55580cd71cc0 {address=ipv4:<IP_ADDRESS>:3593, args={grpc.client_channel_factory=0x55580ce086f0, grpc.default_authority=localhost:3593, grpc.internal.channel_credentials=0x55580ce09970, grpc.internal.event_engine=0x55580ccd4610, grpc.internal.security_connector=0x55580cc8daf0, grpc.internal.subchannel_pool=0x55580cd7dd50, grpc.primary_user_agent=grpc-python/1.56.2, grpc.resource_quota=0x55580ccea2a0, grpc.server_uri=dns:///localhost:3593}}: connect failed (UNKNOWN:Endpoint read failed {occurred_during_write:0, created_time:"2023-07-24T17:13:11.215618718+01:00", children:[INTERNAL:Socket closed {target_address:"ipv4:<IP_ADDRESS>:3593", grpc_status:14, fd:5}]}), backing off for 1000 ms
D0724 17:13:11.215711676  142846 posix_engine.cc:484]                  (event_engine) PosixEventEngine:0x55580cc5c7a0 scheduling callback:{140236654987264,6}
I0724 17:13:11.215715096  142846 client_channel.cc:614]                chand=0x55580ce7d820: connectivity change for subchannel wrapper 0x55580cdf6aa0 subchannel 0x55580cd71cc0; hopping into work_serializer
I0724 17:13:11.215718555  142846 client_channel.cc:638]                chand=0x55580ce7d820: processing connectivity change in work serializer for subchannel wrapper 0x55580cdf6aa0 subchannel 0x55580cd71cc0 watcher=0x55580cd286b0 state=TRANSIENT_FAILURE status=UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed
I0724 17:13:11.215722909  142846 subchannel_list.h:259]                [PickFirstSubchannelList 0x55580c8e02f0] subchannel list 0x55580cd2fa70 index 1 of 2 (subchannel 0x55580cdf6aa0): connectivity changed: old_state=CONNECTING, new_state=TRANSIENT_FAILURE, status=UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed, shutting_down=0, pending_watcher=0x55580cd286b0
I0724 17:13:11.215726898  142846 pick_first.cc:412]                    Pick First 0x55580c8e02f0 subchannel list 0x55580cd2fa70 failed to connect to all subchannels
I0724 17:13:11.215729844  142846 child_policy_handler.cc:101]          [child_policy_handler 0x55580cc9bf40] started name re-resolving
I0724 17:13:11.215732563  142846 client_channel.cc:937]                chand=0x55580ce7d820: started name re-resolving
I0724 17:13:11.215735864  142846 polling_resolver.cc:245]              [polling resolver 0x55580cc08b00] in cooldown from last resolution (from 2 ms ago); will resolve again in 29998 ms
D0724 17:13:11.215739284  142846 posix_engine.cc:484]                  (event_engine) PosixEventEngine:0x55580cc5c7a0 scheduling callback:{140236654986496,7}
I0724 17:13:11.215743409  142846 client_channel.cc:922]                chand=0x55580ce7d820: update: state=TRANSIENT_FAILURE status=(UNAVAILABLE: failed to connect to all addresses; last error: UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed) picker=0x55580cca9cf0
I0724 17:13:11.215747544  142846 connectivity_state.cc:160]            ConnectivityStateTracker client_channel[0x55580ce7d918]: CONNECTING -> TRANSIENT_FAILURE (helper, UNAVAILABLE: failed to connect to all addresses; last error: UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed)
I0724 17:13:11.215751690  142846 client_channel.cc:2555]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: removing from queued picks list
I0724 17:13:11.215755605  142846 client_channel.cc:2599]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: grabbing LB mutex to get picker
I0724 17:13:11.215758534  142846 client_channel.cc:2609]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: performing pick with picker=0x55580cca9cf0
I0724 17:13:11.215761947  142846 client_channel.cc:2709]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: LB pick failed: UNAVAILABLE: failed to connect to all addresses; last error: UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed
I0724 17:13:11.215769625  142846 client_channel.cc:2638]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: failed to pick subchannel: error=UNKNOWN:failed to connect to all addresses; last error: UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed {grpc_status:14, created_time:"2023-07-24T17:13:11.215765125+01:00"}
I0724 17:13:11.215777313  142846 client_channel.cc:2829]               chand=0x55580ce7d820 lb_call=0x7f8b4c0026d0: failing 1 pending batches: UNKNOWN:failed to connect to all addresses; last error: UNAVAILABLE: ipv4:<IP_ADDRESS>:3593: Socket closed {grpc_status:14, created_time:"2023-07-24T17:13:11.215765125+01:00"}

It might be because we need to use https://grpc.github.io/grpc/python/grpc.html#grpc.local_channel_credentials?

Turns out it's because I was using a self-signed certificate and the CN didn't have localhost in it. It looks like that in order to connect with a different authority, we need to set grpc.ssl_target_name_override option when creating the channel.

Same for UDS. I think we need a way for the users to set channel options when creating the client.

Thanks for doing the digging. I'll figure out a way to pass them in 👍

Thanks! In case you weren't aware, you can run make dev-server on the Cerbos repo to start a server with a self-signed cert.


Pure verion examples

There are no examples given for the pure version of this widget and it seems that the pure version also requires mutable access to state object from fn view.
Is the pure version incomplete? An example would be much appreciated.

it's fixed, and an example is provided.


Add a save and load menu item

Fixes #421
This should now be ready to review. It has MVP features, I believe.
I suggest testing it with al_question_test.yml or a new file you make in the same playground.
Please try:

Saving an answer set via Menu | Save answer set
Loading an answer set
Deleting an answer set from the "Load" screen
Viewing an answer set from the "Load" screen
Renaming one (from the "view" screen)

* Going back after loading / saving is weird, you can end up saving more than once? Couldn't tell if it would break things though.

You shouldn't end up back on the "save" screen after you save. At least, that's not happening for me. Can you explain?
I am just realizing now that the "save" action only seems to happen the first time you use it in a given interview though--that's not the intent so I should try to fix that.

* we can discuss later since this is probably a UI issue, but there are some inconsistencies in the UX due to implementation details. Sometimes it's more like "answer appending" than it is loading from scratch, and other times, if you had only saved part of a person object, it will erase your current answers in the session about that person object.

It would be good to know more about those scenarios, actually. I am using set_variables() but if it's too confusing for the "load" step to merge your answers, we can try always creating a new session instead, or warning people more explicitly that it will merge the answers.

I just pulled the code to run a test. Got an error:
File "/usr/share/docassemble/local3.8/lib/python3.8/site-packages/docassemble/playground3TestAL/sessions.py", line 220, in <module>     user_id: Union[int, str] = None, NameError: name 'Union' is not defined

I just pulled the code to run a test. Got an error:
File "/usr/share/docassemble/local3.8/lib/python3.8/site-packages/docassemble/playground3TestAL/sessions.py", line 220, in <module> user_id: Union[int, str] = None, NameError: name 'Union' is not defined

I merged Bryce's suggestion which added this error. I'll push up a quick import to fix it.

You shouldn't end up back on the "save" screen after you save

Sorry that was unclear. I meant when I manually press the back button. You can end up on the same save screen and save it again. Probably no different than manually clicking "Save answer set" again.

@purplesky2016 it should let you pull it now

Saved a few times, all listed nicely on the "load answer set" screen.
However, when I tried to delete some from the table, I received an error:
Exception: user_interviews: you do not have sufficient privileges to access information about other users

Exception: user_interviews: you do not have sufficient privileges to access information about other users

Thanks @purplesky2016 looks like it might be a bug with the interview_list() function...I'll ask on Slack

A few random comments:

Maybe add a What is this? help button on the save screen? This will still keep the minimal text on the screen but will give you ample space to fully explain how this feature works with examples, and to specify restraints. If even we have so many questions about how this feature works, I dare say the general users would be happy to read the help text if they have questions.
The first default value for al_sessions_snapshot_label is user name. I feel title could be more useful, for the title can better remind the user what's in that interview than a mere user name. This will also keep the records on the "load" screen more distinguishable since it displays saved sets from different interviews.
Maybe add aback button on the answer set review screen (accessed via the load table) instead of using a new tab? Because A) docassemble has taught us well to not expect a new tab. B). Because of that habit, I didn't even notice it was a new tab so I used the back button in the header, but it cycled thru all the saved sets, which was confusing to me. If this is an intentional design, at least add some clue on that tab as to how to go back to the table.
I really like the Answer set button on My interviews screen, very convenient. When I clicked it, I expected to see the load table, but I saw this blank table:

When i clicked the saved set link on My interviews screen, it didn't open a new tab but neither with a back button. Again, the back button in the head cycled thru all the sets then the back button disappeared. Now when i went back to My interviews screen, the names of the saved set disappeared.

I feel this screen needs more discussion - what should be on it and how it would help users who are not a developer. This is the dish they ordered, so they expect to sink teeth into it.

Maybe add a What is this? help button on the save screen? This will still keep the minimal text on the screen but will give you ample space to fully explain how this feature works with examples, and to specify restraints. If even we have so many questions about how this feature works, I dare say the general users would be happy to read the help text if they have questions.

I'll consider that. I think we might need to learn more from at least our other legal aid users before we know what to put there, but I can always start with a small subset that it feels like people will want to know.

2. The first default value for `al_sessions_snapshot_label` is user name. I feel `title` could be more useful, for the title can better remind the user what's in that interview than a mere user name. This will also keep the records on the "load" screen more distinguishable since it displays saved sets from different interviews.

Because we already have a session feature that lets you resume your interview progress, I expect most people who use this to be working on multiple different forms. Most likely, advocates and attorneys will be the power users. For them, the name of the person is more important than the name of the form, since they will be using the information in a new form. The original form is also metadata that is displayed on the load interview list screen already.
But if the form has an opposing party, the default label will include the opposing party's name as well as the user's name.
I think this is the right default name for now, but happy to reevaluate based on more feedback from non-developers. I know we'll use this feature too, but in a different way than end users.

3. Maybe add a`back` button on the answer set review screen (accessed via the load table) instead of using a new tab? Because A) docassemble has taught us well to not expect a new tab. B). Because of that habit, I didn't even notice it was a new tab so I used the back button in the header, but it cycled thru all the saved sets, which was confusing to me. If this is an intentional design, at least add some clue on that tab as to how to go back to the table.

Good catch. I'll try to disable the back button on this screen and also add a "close" button. It isn't possible to keep it inside the same tab because of limits to how actions work in Docassemble.

4. I really like the `Answer set` button on `My interviews` screen, very convenient. When I clicked it, I expected to see the `load` table, but I saw this blank table:

Good catch, thank you. It looks like Docassemble doesn't like tags with a space in them. I'll replace with an underscore.

I feel this screen needs more discussion - what should be on it and how it would help users who are not a developer. This is the dish they ordered, so they expect to sink teeth into it.

Agreed, but I don't think it's in scope for this PR.
For example, we might want to include:

A full list of variables in the interview. But the JSON output isn't readable and making it readable is going to be a big lift. Worthwhile, but not simple.
A way to edit every variable. I tried working on that already, but it's also huge for many of the same reasons as #1.

While those would both be nice features, integrating and testing them doesn't feel like it should hold up the MVP feature. Especially because it's a feature that isn't highly discoverable yet.

@BryceStevenWilley @purplesky2016 maybe one more quick check to make sure my fixes didn't introduce any new errors? Thanks both--very helpful and I was able to incorporate a lot of feedback.

I like all the new changes in the latest code!
No new errors. Most old errors are fixed except "can't delete record from the table on the load screen".
The only oddity is that the close button works beautifully when I accessed the review screen from the load table because the review screen is on a new tab, but it does nothing when that screen was accessed from My interviews screen, because it's not on a new tab. The back arrow on the browser can bring me back to My interviews screen though.


[wip] Pr/smagnani96/ci ipsec upgrade leak v1.16

Manual backport tests for https://github.com/cilium/cilium/pull/36377#issuecomment-2541030533.
Removed Features tested after downgrade, since we don't have the ./.github/actions/feature-status script here yet.

/ci-ipsec-upgrade

/ci-ipsec-upgrade

run is 🟢


Let's move all Codecs do Cactoos and use them from there

Takes codecs are more related to Cactoos scope than Takes. So, let's move them to Cactoos and use from it, becasue Takes already depends of Cactoos. It's a good idea because:

It will eliminate code duplication (Hex and Base64 codes already there are in Cactoos)
It will improve Cactoos features (more codecs to Cactoos)
It will improve code reuse
It will reduce the Takes code and tests

@paulodamaso/z please, pay attention to this issue

@fabriciofx/z this project will fix the problem faster if you donate a few dollars to it; just click here and pay via Stripe, it's very fast, convenient and appreciated; thanks a lot!

@yegor256 What do y9ou think about it?

@fabriciofx @paulodamaso I agree, let's do this


Add jitter for database file operations

cc @robskillington @martin-mao

Coverage decreased (-0.2%) to 78.771% when pulling 719278492cc90f6dda743ad419cc8a2dafb674f3 on xichen-fs-jitter into 33cd3824545be38afc93ebb8706e721050df5e7a on master.

Perhaps we should add checking that this is less than block size to storage options as we discussed

Coverage decreased (-0.3%) to 78.662% when pulling ae513dc677ef4709d24f01c61ceb65c14c974ff1 on xichen-fs-jitter into 33cd3824545be38afc93ebb8706e721050df5e7a on master.


Feature request: Date range picker

I posted on Slack that I'd love a date range picker. I enjoy using Pluto to build quick little dashboards to help me with data exploration, and quite often I'll interactively construct some SQL query covering a range of dates. At present I need to use two individual date pickers for the start and end.
I think the input element doesn't support a date range, so I assume it's a harder than just adding a bare <input type=... > like in https://github.com/JuliaPluto/PlutoUI.jl/pull/182. So consider this a little feature request :)
I'll tackle a PR myself if I have time, but I know very little HTML/JS, so it will require some pre-reading of how the other widgets work first.

Hey @swt30 ! Happy to hear from you!
You could try making this with PlutoUI.combine and #176, similar to how ScrubbableMatrix was implemented using Scrubbable.


fix(v2): unbreak enhanced width of doc item wrapper

Motivation
After collapsing of doc sidebar,  doc content container width should increase slightly. This is not happening now, probably because of this change in Infima https://github.com/facebookincubator/infima/pull/62
Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
Try to collapse doc sidebar and make sure that width of doc content container has increased.
Related PRs
(If this PR adds or changes functionality, please take some time to update the docs at https://github.com/facebook/docusaurus, and link to your PR here.)

LGTM
Do you think it's worth it to add a 2nd case for very large screen somehow (ie handle --ifm-container-width-xl) ?

Perhaps yes, but I'm not sure if this is necessary. However if we do this, we can use width values from this article.


[EventRequest] TAB 472 - Job Queue Entry - OnAfterSetDefaultValues

Hello,
I'm requesting a new publisher "OnAfterSetDefaultValues" at the end of Function "SetDefaultValues" of Table 472 Job Queue Entry.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.


Fixed #6346 -- Set xframe options exempt on cached response

Backport https://github.com/divio/django-cms/pull/6368

Coverage remained the same at 82.794% when pulling 1fbf0263a78b8d3d6b77ea36a7f24620479859b4 on czpython:bp/3.4.x/6368 into 8c9473da89bb1c7f918a8717201299de6559a110 on divio:release/3.4.x.


Use explicit return type in data_snippets.cc

Part of the work for #2604.

This change is

Thanks! PTAL.


Add discovery unit test and update utils package

Coverage increased (+0.4%) to 38.837% when pulling f42eaad93dce35f52b5eb5232ce3df23513cefc5 on leonwanghui:discovery-test into 504e0ad007f5ab821dd1128a4084dac17408e894 on opensds:development.


[REQUEST] Tweak default colors for RichHandler

Hello, first of all, thank you for rich! I use it in pretty much all my projects.
I have a very minor suggestion regarding the default colors for logging levels.
I know we can customize them using themes (and I already do!).
I use mostly info/warning/error levels for logging, and depending on the terminal used, warnings and errors render almost identically.
When googling "Python colored logs", the top solutions (in my case) use yellow-ish for warnings and red for errors.
Granted, many of the top results use coloredlogs, but in any case I see:

stack overflow top answer
PyPI coloredlogs
a blog post
another blog post
PyPI colorlog

So I was wondering if you would be willing to tweak the default 'logging.level.warning' to something closer to yellow, to be more in line with this, and give a bit more distinction to warnings and errors.
Anyway, I am perfectly happy with customization through themes!

Sure. I would accept a PR for that...


CI: build arm-11 instead of arm-13 for macOS

to reduce the building time from ~50m to ~30m
Signed-off-by: Xiang Xiao<EMAIL_ADDRESS>

i chose arm-13 because it detected https://github.com/apache/incubator-nuttx-apps/pull/156
do you know why arm-11 is quicker than arm-13?

i chose arm-13 because it detected #156
do you know why arm-11 is quicker than arm-13?

Because arm-11 take 17m to finish on Ubuntu but arm-13 take 20m.

17m vs 20m seems far less drastic than ~30m vs ~50m. i wonder why.
i suspect 30m vs 50m involves cache miss/hit differences.
see also: https://github.com/actions/cache/issues/208

can you give me the link to the log of 50m?

can you give me the link to the log of 50m?

https://github.com/apache/incubator-nuttx/pull/772/checks?check_run_id=583218421

thank you.
i looked at the log. but i didn't notice anything obvious.
maybe the processing speed simply varies in the environment.
in the mean time, i'm fine with this patch.


Finish stack updates and planning

Needs a general cleanup and changeset integration so changes can be previewed and applied.

[x] create changeset
[x] show changes
[ ] apply changes
[ ] fix update progress bar panic
[ ] fix delete progress bar panic (when resources are removed, local template mismatch)
[ ] nicer formatting
[ ] nice error for when plan does not exist
[ ] nicer errors

Need to decide on the commands still, likely similar to Terraform:
# Alias of plan or status (apply would be dangerous)
$ up stack

# Preview changes
$ up stack plan

# Apply those changes
$ up stack apply

# Show the status and resources (maybe named list or something)
$ up stack status

# Output JSON representation when !isatty
$ up stack status | cat

$ Output for use with Terraform
$ up stack status --tfvars

Any preferences for what up stack should alias?

Is there a way to list the stack (resources) created and managed by up?

@tundrax up stack used to display it, but CloudFormation's IDs are really ugly and difficult to read so I removed it for now, might be nice to add something back though!


Add a method to disable a concrete middleware

Now, there is only one method to disable all middleware.
$this->withoutMiddleware();       // <-- This will prevent all middleware

$this->withoutMiddleware('web');  // <-- This is what I'm asking for

Thanks!

Sorry, no such method is possible.

Feel free to discuss in the correct place though, as per our contribution docs.


More components to implement

Can you add more components to you roadmap like SnackBar and Switch?
Thank you

Yeah, do you want to list some that you think would be nice to add within the next month?

There's many libraries that are trying to port Material Design to iOS, I'm excited about yours because it's fully in swift and for the level of support we get mainly :)
So it would be awesome if this library turned out to be a one stop shop for all material controls!
Here's the components that it would be awesome to add to complete the library, in my opinion this is the importance order:

SearchBarView
SearchBarViewController
TabView
TabViewController
Dialogs (regular, single choice, multiple choice)
Snackbar
ProgressBar (circular and horizontal)
DatePicker
TimePicker
So whatever can fit into your month would be awesome! Feeling a bit optimistic here :)

Great suggestions. We have a few additions to that internally that we have already prototyped, so let's aim to make this library that one stop shop :). Why we don't just launch so many components is to ensure that the quality of the rollout is high. So far we are happy with the feedback. We also don't just want to be components. We want to help in the journey when building applications, so we are looking to build solid foundations that will grow.
Thank you for your support.

@adamdahan Take a look at the list :)

Updated list with TextView addition

Yes, how did we forget that one :)

@sohayb @danieldahan list looks great :+1: I would add the UISwitchControl & Floating Menu too

Closing this, as the list is updated.

@sohayb When you say Snackbar, does that include Toasts?


noisy benchmarks

I regularly see 10% swings in performance. Typically if I run the benches 3 times, I'll see a spread of at least 10%.
Is anyone else seeing this? I haven't yet figured out why, but it renders the benchmarks nearly useless if you can't safely measure a 10% change in behavior.
P.S. I noticed this while trying to evaluate #37

Addendum:

bench encode: 1000 coordinates
                        time:   [55.068 µs 55.138 µs 55.227 µs]
                        change: [-0.7790% -0.4607% -0.1246%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 9 outliers among 100 measurements (9.00%)
  8 (8.00%) high mild
  1 (1.00%) high severe

bench decode: 21502 coordinates
                        time:   [180.43 µs 181.44 µs 182.45 µs]
                        change: [+0.5481% +1.3255% +2.1812%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe

bench polyline6 decoding
                        time:   [40.294 ns 40.948 ns 41.776 ns]
                        change: [+1.1613% +1.8216% +2.7833%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 7 outliers among 100 measurements (7.00%)
  4 (4.00%) high mild
  3 (3.00%) high severe

bench HUGE polyline6 decoding
                        time:   [25.830 µs 26.154 µs 26.484 µs]
                        change: [+9.1293% +12.938% +16.944%] (p = 0.00 < 0.05)
                        Performance has regressed.

The issue is mostly in the bench HUGE polyline6 decoding bench. Less so in the bench polyline6 decoding, and the other two benches actually seem acceptably stable.
We're interning the string, so we shouldn't be subject to any i/o fluctuations. It's a rather large (24kb) string, so maybe there's some edge case we're slamming against there.
And if there is, I wonder if it's some problem in our own handling, that we can fix up, or if it's something out of our hands, in which case I'd be in favor of shrinking the big file down until it behaves consistently.

I gave up on figuring out why they are so noisy and just simplified them a bit in: https://github.com/georust/polyline/issues/41

@mattiZed - as a sanity check, are you also seeing medium sized (+/- 10%) swings in the bench HUGE polyline6 decoding bench?


Unable to install on Mac Ventura 13.5.1

You also might need to check if the dmg really runs on Apple Silicon chips.

Needs an Apple Developer account to actually sign the code.

From version 1.2.3 until final confirmation all versions are just tests.


Fix gapic/ token to use "gapic package version"

This imitates the pattern used in Ruby

Codecov Report

Merging #1092 into master will increase coverage by <.01%.
The diff coverage is 100%.

@@             Coverage Diff              @@
##             master    #1092      +/-   ##
============================================
+ Coverage     85.52%   85.52%   +<.01%
- Complexity     3496     3497       +1
============================================
  Files           365      365
  Lines         13847    13849       +2
  Branches       1575     1575
============================================
+ Hits          11843    11845       +2
  Misses         1554     1554
  Partials        450      450

Impacted Files
Coverage Δ
Complexity Δ

.../google/api/codegen/nodejs/NodeJSGapicContext.java
89.53% <100%> (+0.07%)
86 <1> (+1)
:white_check_mark:

...le/api/codegen/gapic/MainGapicProviderFactory.java
94.19% <100%> (ø)
16 <0> (ø)
:x:

Continue to review full report at Codecov.

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

LGTM, but @landrito should also take a quick look.


Tree: do not getChildren of elements that user collapsed

The tree calls getChildren on elements that the user manually collapsed. This is different behavior as compared to the old tree (I verified using vscode 1.29).
Repro steps:

Explorer expand some top level folder, collapse it
Click refresh
Notice that the Tree will ask getChildren of the collapsed folder

#67722

Nice!


There is no script for Azure DevOps Server 2020

There is no script for Azure DevOps Server 2020

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

ID: d2ce6aa4-6c9d-6deb-94c4-7953e339dede
Version Independent ID: 4ced0e1c-a0f7-3139-d490-21bb34e24f63
Content: Manage Search, indexing - Azure DevOps
Content Source: docs/project/search/manage-search.md
Product: devops
Technology: devops-collab
GitHub Login: @chcomley
Microsoft Alias: chcomley

Hi @kripa-2019, Thanks for your feedback. I reported this in the Developer Community here: https://developercommunity.visualstudio.com/t/No-script-to-manage-Search-indexing-for/1690462?space=22&q=2020+search+index&entry=myfeedback

The following link works.
https://developercommunity.visualstudio.com/t/No-script-to-manage-Search-indexing-for/1692246?space=22&q=script+search+azure+devops+2020&entry=problem
For now, try out the scripts given for Azure DevOps Server 2019.
When there's a documentation update required, we can reopen this issue or create a new one. Thank you.


Drop MultiJson dependency

It is no longer encouraged to use the multi_json gem due to this reason: https://github.com/intridea/multi_json/pull/113#issuecomment-17668823
cc @dblock

Can you add a CHANGELOG entry, please? 😸

This should be good to merge once the CI is green.

roar depends on multi_json via representable.

https://github.com/ruby-grape/grape-active_model_serializers/blob/master/lib/grape-active_model_serializers/error_formatter.rb#L19 might be helpful, although I am not in love with the solution, maybe define Grape::JSON if it's not already defined?

So why do we need to have a check against #to_json? It doesn't look like the same method that comes from require 'json', but I feel like there shouldn't be any case where the object doesn't respond to #to_json.

@mach-kernel it doesn't look like representable depends on the multi_json gem today, it used to until 2.2.3.

Representable actually requires multi_json for JSON support today, see https://github.com/trailblazer/representable/blob/b4439a5e025106af282f8dbc590418a108640159/lib/representable/json.rb#L4. So a PR should go upstream.


add simpler toggles

Adds a simple way of setting toggles thanks to #3638.
A user toggle now needs to stay in the URL, which might not be ideal, but that's relatively easy to fix, I'd rather wait for it to come up as a requirement though.
The stickyness would be dealt with in the lambdas, this abdocates all cookie writing to the lambda, which makes way more sense.

Note to update this to be more like this


Microsoft Defender prevents running the installer

🐛 Bug Report
Running the installer results in

To Reproduce
Steps to reproduce the behavior:

Download CSETStandAlone.exe
Try to run on a system with MS Defender Enterprise installed and running

Expected behavior
Installer runs.
Any helpful log output
Windows Defender Antivirus Security intelligence version has been updated.

Select "More Info" then "Install Anyway" and Windows Defender will let you install it


different icon for .svelte.ts and .svelte.js files

Can you explain what you mean by different icons?

I think they mean by different colors like js/ts files:


Document how to install only a subset of the Elyra extensions

Follow-up to https://github.com/elyra-ai/elyra/issues/974

https://pypi.org/project/elyra-pipeline-editor-extension/
https://pypi.org/project/elyra-code-snippet-extension/
https://pypi.org/project/elyra-python-editor-extension/


documentation location ?

I can't find the repo with the documentation hosted at http://glide.thephpleague.com/.
It's frustrating as there are basic issue with some links.

The docs are available in the gh-pages branch. Sorry if there are any issues with the docs, I just released a big update today for the new 1.0 version. I'm away from my computer at the moment, but if you have any difficulties feel free to just post the issues here and I'll fix it later.

Hey if you could let me know the issue you found, that would be much appreciated. I'd love to get it fixed. Thanks!

I think that it has been fixed already. It was a typo in the link to the bug #72 if I remember well.

Yeah, and that is actually generated from the releases page, so fixing it would be confusing. Thanks either way! :+1:


Use tf_optimizer.OptimizeGraph to implement create_inference_graph

This PR also fixed two bugs:

in GetDeviceAndAllocator() it didn't set cuda_device_id when device is found in cluster;
in the same method if cluster is not available but device name is set in engine, it'll use the tf gpu id from the device name, but the tf_gpu_id->cuda_gpu_id mapping could be unset, in which case it'll failed. E.g. #20780

I've run all available tests and verified that the generated graphdefs are the same as before.

Hi @samikama, I added the c++ interface, ptal. Thanks.

+@pooyadavoodi as reviewer.


Remove cell highlight when previewing tms

@danielfdsilva Just tested, I'm seeing the green highlight become rehighlighted once I pan. Is that expected behavior?

@smit1678 no, not expected. Fixed in the above commit


kubecontroller: add GetNamespace interface and impl

Identified a problem/bottleneck with webhook, where with enough pods/calls,
the webhook takes too much time to reply and times out, rendering any further
mesh deployments undone.
This fixes going through local caches instead of API calls to get
namespaces. This improves but doesn't totally solve the problem.

Added tests, fixed existing tests

Control Plane          [X]

Tests / CI System      [X]

Does this change contain code from or inspired by another project? If so, did you notify the maintainers and provide attribution?
No

Identified a problem/bottleneck with webhook, where with enough pods/calls,
the webhook takes too much time to reply and times out, rendering any further
mesh deployments undone.

Could you please track such enhancements under a Github issue so that we can identify and discuss the scale issues over a meaningful thread with enough context.

Could you please track such enhancements under a Github issue so that we can identify and discuss the scale issues over a meaningful thread with enough context.

https://github.com/openservicemesh/osm/issues/1761


Add Freecen2_place_id for Birth Place to Search records

This is need to be completed before 'Move Place Linkages' #1566 can be finalised.
Notes on code areas impacted:

Initial implementation

CSVProc file incorporation
VLD Upload (I know this is now not available to most people but the code should be updated)
VLD POB validation
A new Rake task to populate for all existing Search Records that have a Birth Place that is in the Gazetteer (Freecen2_places) and run it.

Subsequent implementation (after 1 above)

Delete Freecen2_place (Gazetteer)
Rename Freecen2_place (only available to certain users) via a button - I need to investigate what this actually does and who is currently permitted to use it
Add Index on the Freecen2_place_id for the Birth Place to the Search_records collection (could help the Move Place Linkages process?)
Finalise the 'Move Search Linkages code'

The code for ‘1. Initial implementation’ has been coded and tested on Test3. It can’t be user tested as it just sets a link to the freecen2_place  record for the Birth Place. This will be used by #1566 (move search links) and Place of Birth Searching (yet to be developed).
It includes a Rake that will need to be run across the Production data for every county with census data prior to the solution for #1566 being implemented.
@vino - branch fc_1695_1new_av is now ready for deployment to Production. I can then start running the Rake across the Production data.

This has now been completed (ie freecen2_place_of_birth_id populated on all Search Records that have a Valid POB) but when #1566 is deployed and/or POB Searching is implemented we will have to see if we need any additional indexes on Search Records.


docs($rootScope.Scope): improve clarity describing $watch with no listener

The previous explanation in parentheses created a bit of confusion because the documentation stated to leave off the listener, but then said "be prepared for multiple calls to your listener". The new explanation clarifies that it is indeed the watchExpression that will be executed multiple times.

lgtm


Render only manifests in given directory

It would be nice if the -s/--show-only flag of helm template could understand * or directories. Currently it just returns Error: could not find template ... in chart.
Output of helm version:
version.BuildInfo{Version:"v3.1.2", GitCommit:"d878d4d45863e42fd5cff6743294a11d28a9abce", GitTreeState:"clean", GoVersion:"go1.13.8"}

Output of kubectl version:
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T21:03:42Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2020-01-14T00:09:19Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}

Cloud Provider/Platform (AKS, GKE, Minikube etc.):  kind

Fixing this would largely be a matter of writing regular expressions in cmd/template.go (Look for showFiles). I am marking it good first issue because I think someone new to Helm could probably give that a shot.


Upscale ec2 volume size to 100 Gib for artifactory requirements

The testing with the artifactory requires more space to push and test heavy artifacts.
In absence of any concrete requirement we decided to scale it from 10 to 100 Gib

CI is broken

I didn't noted that the git gui is by passing the pre-commit


Content collections has wrong return type for TOC since v1.1.2

To Reproduce
Check the code for the file @fumadocs/content-collections/dist/configuration.d.ts:
declare function transformMDX<D extends BaseDoc>(document: D, context: Context, options?: TransformOptions): Promise<D & {
    body: string;
    toc: InterfaceToObject<TableOfContents>;
    /**
     * `StructuredData` for search indexes
     */
    structuredData: InterfaceToObject<StructuredData>;
}>;

Current vs. Expected behavior
Current type:
toc: InterfaceToObject<TableOfContents>;

Used to be before:
toc: SerializableTOC

This will cause a type error in content-collections, because InterfaceToObject<TableOfContents> is unserializable
Provide environment information
Operating System:
  Platform: darwin
  Arch: arm64
  Version: Darwin Kernel Version 23.6.0: Wed Jul 31 20:48:52 PDT 2024; root:xnu-10<IP_ADDRESS>0.5~1/RELEASE_ARM64_T6020
  Available memory (MB): 32768
  Available CPU cores: 10
Binaries:
  Node: 20.11.0
  npm: 10.2.4
  Yarn: N/A
  pnpm: 9.8.0
Relevant Packages:
  next: 15.0.0-canary.170 // There is a newer canary version (15.0.0-canary.171) available, please upgrade!
  eslint-config-next: 15.0.0-rc.0
  react: 19.0.0-rc-778e1ed2-20240926
  react-dom: 19.0.0-rc-778e1ed2-20240926
  typescript: 5.6.2

Which area(s) are affected? (Select all that apply)
Content Sources (e.g. Fumadocs MDX, Content Collections)
Additional context
No response

Will be fixed on next release

@fuma-nama, the recent version breaks type exports (missing in package.json)
Cannot find module '@fumadocs/content-collections/configuration' or its corresponding type declarations.
  There are types at<EMAIL_ADDRESS>
When importing:
import {
  createMetaSchema,
  transformMDX,
} from "@fumadocs/content-collections/configuration";

Works with "moduleResolution": "bundler"
But it's not the default setting for nextjs, and not sure if it has any second order effects.

This should be, Next.js uses a bundler to resolve modules otherwise you will need .js extension


APP_NAME should be forwarded

Right now, the app name is always AnonAddy, but it will cause confusion with the real service (for example it will write © 2019 AnonAddy. All rights reserved. to the bottom of confirmation emails).
We should allow the use of another name in the env and forward it.

Done


Filter Action Error:  Field 'actor' does not generate an automatic  reverse relation and therefore cannot be used for reverse querying.

Hey every one (@justquick),
I have a django app and now I want to introduce django-activity-stream to notify users from events.
My issue is that I can not filter actions by actor or target:

python3.5 shell

>>> from app import models
>>> a = models.MyAppUser.objects.all()[1]
>>> a
<MyAppUser: Mark>
>>> t = models.MyAppUser.objects.all()[2]
>>> t
<MyAppUser: Steve>
>>> from actstream.models import Action
>>> Action(actor=a, verb='POST', target=t)
<Action: Mark POST Steve 0 minutes ago>
>>> Action.objects.filter(actor=a)

Error:

Traceback (most recent call last):
  File "/.../lib/python3.5/site-packages/django/core/management/commands/shell.py", line 69, in handle
    self.run_shell(shell=options['interface'])
  File "/.../lib/python3.5/site-packages/django/core/management/commands/shell.py", line 61, in run_shell
    raise ImportError
ImportError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/.../lib/python3.5/site-packages/django/db/models/manager.py", line 122, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/.../lib/python3.5/site-packages/django/db/models/query.py", line 790, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/.../lib/python3.5/site-packages/django/db/models/query.py", line 808, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/.../lib/python3.5/site-packages/django/db/models/sql/query.py", line 1243, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/.../lib/python3.5/site-packages/django/db/models/sql/query.py", line 1269, in _add_q
    allow_joins=allow_joins, split_subq=split_subq,
  File "/.../lib/python3.5/site-packages/django/db/models/sql/query.py", line 1149, in build_filter
    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
  File "/.../lib/python3.5/site-packages/django/db/models/sql/query.py", line 1035, in solve_lookup_type
    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
  File "/.../lib/python3.5/site-packages/django/db/models/sql/query.py", line 1316, in names_to_path
    "adding a GenericRelation." % name

django.core.exceptions.FieldError: Field 'actor' does not generate an automatic
reverse relation and therefore cannot be used for reverse querying.
If it is a GenericForeignKey, consider adding a GenericRelation.

The output of my pip freeze is:
app==0.0.1
coverage==4.2
dj-database-url==0.4.1
**Django==1.9.5**
**django-activity-stream==0.6.3**
django-anymail==0.5
django-bootstrap-breadcrumbs==0.8
django-bootstrap-datepicker==1.1.1
django-bootstrap3==7.1.0
django-bower==5.1.0
django-configurations==2.0
django-debug-toolbar==1.5
django-formtools==1.0
django-nose==1.4.4
django-postman==3.3.2
factory-boy==2.7.0
fake-factory==0.7.2
flake8==3.0.4
mccabe==0.5.2
nose==1.3.7
Pillow==3.3.1
psycopg2==2.6.2
pycodestyle==2.0.0
pyflakes==1.2.3
python-dateutil==2.6.0
PyYAML==3.12
requests==2.11.1
rollbar==0.13.6
six==1.10.0
sqlparse==0.2.1
whitenoise==3.2.1

Similar like issue 281

actor_stream(a)

?

This could work -
Action.objects.filter(actor_object_id__in=user_queryset.values_list('id', flat=True))

Hi, @justquick I am trying to display an activity stream when a user sends a network request to a certain user. when I filter a user on the basis of actor or target it says: "Field 'actor' does not generate an automatic reverse relation and therefore cannot be used for reverse querying. If it is a GenericForeignKey, consider adding a GenericRelation."
I have applied the solutions provided in this issue but couldn't display the correct activity stream. Can you help me with that?
My CODE example:
    current_user = User.objects.get(id =request.user.id)

    network = AddToNetwork.objects.filter(network_status = 'ADD')

    actor = Action.objects.filter(actor=current_user, target=network)

when I perform action.send activity, it generates 2 ids but it should only generate 1 activity at the same time.
special thing or bug is that, it generates two opposite features in a single API hit. for instance, I want to send a friend request to user and user( who is sending the request(actor)) email is<EMAIL_ADDRESS>and the target's email is<EMAIL_ADDRESS>what it is doing right now is, it says<EMAIL_ADDRESS>sent you a network request<EMAIL_ADDRESS>1 minute ago, and it also says<EMAIL_ADDRESS>sent you a friend request. it is a kind of bug or I am doing something wrong. I just want to get a result something like this<EMAIL_ADDRESS>sent you a network request<EMAIL_ADDRESS>

when I perform action.send activity, it generates 2 ids but it should only generate 1 activity at the same time. special thing or bug is that, it generates two opposite features in a single API hit. for instance, I want to send a friend request to user and user( who is sending the request(actor)) email is<EMAIL_ADDRESS>and the target's email is<EMAIL_ADDRESS>what it is doing right now is, it says<EMAIL_ADDRESS>sent you a network request<EMAIL_ADDRESS>1 minute ago, and it also says<EMAIL_ADDRESS>sent you a friend request. it is a kind of bug or I am doing something wrong. I just want to get a result something like this<EMAIL_ADDRESS>sent you a network request<EMAIL_ADDRESS>
in this photo, when I accept a request, it says, marr accepted your request. but it also says, marry sent you a request. so where I am doing something wrong? @justquick

@justquick I am looking for help. I hope you can help me.
NOTE: I have Django version 4.0.x and Python version 3.9.10

the app doesnt create any actions like those above. they must be sent in your project using the app's signal. id try looking where you are sending the signals and see what arguments ur sending. it seems the actor is the same in both actions which i dont think is right

yes. you are right. I am using signals in my app using a custom User model. so let me send you the code examples that I have implemented. I am sure, I have faulty code.

my signals.py:
def my_handler(sender, instance, created, **kwargs):
    action.send(instance, verb='sent you a network request')

post_save.connect(my_handler, sender=AddToNetwork)

my apps.py:
from django.apps import AppConfig, apps

class DatastructureConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'datastructure'

    def ready(self):
        from actstream import registry
        registry.register(self.get_model('User'))
        registry.register(apps.get_model('datastructure.AddToNetwork'))

my views.py logic:

add_to = User.objects.get(id = id)
        current_user = User.objects.get(id = request.user.id)
        network = AddToNetwork.objects.create(add_to = add_to, added_from=current_user,network_status = 'ADD')

        # it is representing django-action-stream it will display the message on front end
        action.send(current_user, verb='sent you a network request', target=add_to)

NOTE: I want to display the information only to that user, who got the network request. no other user should see that message. Like, if I have sent you a network request, it should Say Abubakar sent you a network request. and if you have accepted the network request, it will be displayed on my profile something like this, JustQuick has accepted your network request.
I know it is the logic that I have to implement but I have no relation to the activity stream with my project models so I am not sure how to display the user-related information.
Your help is highly appreciated because I am stuck on this issue for almost 5 days now.

I have realized that the second instance is being created from signals.

when I try to implement this logic to display the activity stream on the home/user dashboard page:
```
current_user = User.objects.get(id =request.user.id)
network = AddToNetwork.objects.filter(network_status = 'ADD')
    actions = Action.objects.filter(verb='sent you a network request', actor=current_user, target=network)
    print("\n Actor message :", actions)

it throws the following error:

Field 'actor' does not generate an automatic reverse relation and therefore cannot be used for reverse querying. If it is a GenericForeignKey, consider adding a GenericRelation.

@justquick I am sure, I have explained things smoothly so that you can understand my problem.


Machine Learning on Mobile with RealSense and Android

Issue Description
Hi i want to do some ML on mobile using android and a D435i camera.
My idea is to do object recognition and from the recognized object detect the distance with the depth sensor.
I'm using Android studio but I've not found the documentation or how to use the API (over the example).
I guess I need to give to the ML NET the rgb color frame (or stream?) but I don't know how to do it.
Do you have any suggestion on what is the best NET to do this on mobile (Yolo? Detectron2? SSD?) ?
Any help?

Required Info

Camera Model
D435i

Firmware Version
<IP_ADDRESS>

Operating System & Version
MacOS

Platform
Android

Language
java

Segment
Smartphone

Hi @mrjoelc   I carefully researched your question.  The impression that I got from that research may be that a good option for you may be Android, Java and YOLO (perhaps the mobile-efficient TinyYOLO).  There is a guide to such a project in the link below.
https://magazine.odroid.com/article/running-yolo-odroid-yolodroid/

Thanks for your time!
Yeah I’ve found the same answer and this is the point of start for me but I have some problem with writing the code cause it’s not present a documentation for using real sense in Java like there is with c/c++
Do you know how to “extract” from a live stream of the real sense camera “something” to pass to the network to do detection?

The librealsense Android wrapper has a Java example project.
https://github.com/IntelRealSense/librealsense/blob/master/wrappers/android/examples/java_example/readme.md

Yeah, I've saw it but it's not present what I need!

Do the other Android wrapper examples, such as capture, also not meet your needs, please?
https://github.com/IntelRealSense/librealsense/tree/master/wrappers/android/examples

Yeah, I've saw this one. There is a method to "trasform" the stream frames got from the pipeline to InputStream type?
I need to pass the stream got from the camera to an object detector

Using Java is problematic from the perspective that it is more difficult to develop your own program if there are not existing references for achieving the particular function that you want to create.
The comment linked to below, and the comment directly beneath it, may provide further useful insights.
https://github.com/IntelRealSense/librealsense/issues/3345#issuecomment-467980710

For me the solution, found after days of searching, is that one
public static Bitmap rgb2Bitmap(byte[] data, int width, int height) {
        int[] colors = convertByteToColor(data);
        if (colors == null) {
            return null;
        }

        Bitmap bmp = Bitmap.createBitmap(colors, 0, width, width, height,
                Bitmap.Config.ARGB_8888);
        return bmp;
    }

So
try(FrameSet frames = mPipeline.waitForFrames()) {
      try (Frame f = frames.first(StreamType.COLOR)){
           VideoFrame color = f.as(Extension.VIDEO_FRAME);
           int c_size= color.getDataSize();
           int c_height = color.getHeight();
           int c_width = color.getWidth();
           byte[] c_data = new  byte[c_size];
           color.getData(c_data);
           final int len = c_data.length;
           if(c_data.length !=0) {
                realsenseBM = rgb2Bitmap(c_data,c_width,c_height);
            }
       }
}

Thanks, anyway.

Thanks very much for sharing your code and adding to the RealSense community's Android Java reference resources.   :)


[Dubbo-3985] fix ip pattern valid check

Signed-off-by: jimin.jm<EMAIL_ADDRESS>What is the purpose of the change
fix  ip pattern valid check  #3985
Brief changelog
fix  ip pattern valid check  #3985
Verifying this change
ci
Follow this checklist to help us incorporate your contribution quickly and easily:

[x] Make sure there is a GITHUB_issue field for the change (usually before you start working on it). Trivial changes like typos do not require a GITHUB issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[x] Format the pull request title like [Dubbo-XXX] Fix UnknownException when host config not exist #XXX. Each commit in the pull request should have a meaningful subject line and body.
[x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[x] Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add sample in dubbo samples project.
[x] Run mvn clean install -DskipTests=false & mvn clean test-compile failsafe:integration-test to make sure unit-test and integration-test pass.
[x] If this contribution is large, please follow the Software Donation Guide.

Codecov Report

Merging #4237 into master will decrease coverage by 0.09%.
The diff coverage is 58.33%.

@@             Coverage Diff             @@
##             master    #4237     +/-   ##
===========================================
- Coverage     63.01%   62.91%   -0.1%
- Complexity      505      506      +1
===========================================
  Files           769      769
  Lines         33058    33079     +21
  Branches       5217     5220      +3
===========================================
- Hits          20830    20813     -17
- Misses         9823     9856     +33
- Partials       2405     2410      +5

Impacted Files
Coverage Δ
Complexity Δ

...apache/dubbo/common/constants/CommonConstants.java
100% <ø> (ø)
0 <0> (ø)
:arrow_down:

.../rpc/cluster/configurator/parser/ConfigParser.java
87.5% <0%> (ø)
0 <0> (ø)
:arrow_down:

...va/org/apache/dubbo/config/ConfigCenterConfig.java
76.56% <0%> (ø)
0 <0> (ø)
:arrow_down:

...ache/dubbo/rpc/protocol/AbstractProxyProtocol.java
78.57% <0%> (ø)
0 <0> (ø)
:arrow_down:

...mon/src/main/java/org/apache/dubbo/common/URL.java
50% <0%> (ø)
0 <0> (ø)
:arrow_down:

...g/apache/dubbo/config/AbstractInterfaceConfig.java
72% <0%> (ø)
0 <0> (ø)
:arrow_down:

...ter/support/apollo/ApolloDynamicConfiguration.java
0% <0%> (ø)
0 <0> (ø)
:arrow_down:

.../apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java
84.61% <100%> (ø)
0 <0> (ø)
:arrow_down:

.../java/org/apache/dubbo/config/ReferenceConfig.java
59.85% <100%> (ø)
0 <0> (ø)
:arrow_down:

...org/apache/dubbo/registry/redis/RedisRegistry.java
48.15% <100%> (ø)
31 <0> (ø)
:arrow_down:

... and 16 more

Continue to review full report at Codecov.

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

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

@slievrly Hi, thanks for your contribution.
Please merge the latest master branch to resolve confict files.

Close for long time no response.
Please feel free to reopen if you have any question.
If you think these changes still useful in the latest master branch, please submit a new pull request.


Encode utf8 for configuration string values

The parameters defined as config_param :name, :string may produce ASCII-8BIT String values, but it's unexpected values for most plugin authors and users (these values will be packed into bin in msgpack).
This change encodes string values in utf8.

@repeatedly could you review this change?

LGTM


Support for pre-installed SQLite library

Hi!
Sometimes we want to use our modified SQLite library, eg. with litereplica or sqlcipher or SEE or even with private modifications.
It would be cool if we could access the pre-installed library from sqlite-jdbc.
Could we do it?
If for some reason this is not possible, it would be good to have an easy way to compile it using our modified SQLite code. Maybe changing the Makefile to accept some parameter were we inform where is the path for the folder containing the SQLite files (sqlite3.c and sqlite3.h)

No. Because sqlite-jdbc.so has additional code to the original SQLite.
We need to re-compile it for every possible combinations of SQLite build options.

If your modification to SQLite can be done like this:
https://github.com/xerial/sqlite-jdbc/blob/e3766561261cecadd5eba9cc13cb23c8e1bf0f52/Makefile#L57-L59
It would be possible to use your own SQLite by tweaking Makefile.

Hmmm...
Why do you change the sqlite3.c file to load an extension?
I guess this is not required.
We can call the sqlite3_load_extension() function or even use the load_extension(X,Y) SQL function.
Is it because you don't want to have the extension library as an external file?

Anyway, if this is required we can still use a modified sqlite3.c file because this small modification may not cause a problem.
The makefile would just use the file already downloaded, then make its own modification you showed and then compile it.
For me it is sufficient, and it will help some people.
I can help testing.
What do you think?

FYI https://github.com/xerial/sqlite-jdbc/blob/master/src/main/ext/extension-functions.c
extension-function.c of SQLite has a frequently used functions, and to simplify the loading process for cross platforms (windows, Linux, etc.) these libraries are pre-loaded.

I could change this line:
https://github.com/xerial/sqlite-jdbc/blob/e3766561261cecadd5eba9cc13cb23c8e1bf0f52/Makefile#L18
from this:
SQLITE_AMAL_DIR=$(TARGET)/$(SQLITE_AMAL_PREFIX)
to this:
SQLITE_AMAL_DIR?=$(TARGET)/$(SQLITE_AMAL_PREFIX)
Just adding the question sign. With this, the variable will receive this value only if it was not previously set.
So those wanting to specify another path can use:
make SQLITE_AMAL_DIR="/path/to/sqlite-source"
And the makefile will continue working the same way if we don't set the additional parameter.
BUT, there is the SQLITE_UNPACKED variable, that depends on the SQLITE_ARCHIVE.
I guess we will have to create (touch) the file referenced at SQLITE_UNPACKED if (and only if) SQLITE_AMAL_DIR was set in the command line.
Do you have any suggestion?

Hi Taro!
I made some changes. You can check them in this commit.
If you agree, I can make a PR.
It would be nice to rename the variable name too, if possible. From SQLITE_AMAL_DIR to SQLITE_SOURCE, so the command line would be:
make SQLITE_SOURCE="/path/to/sqlite-source"
But if you don't want, it is fine.
It was only tested with gcc.

Using SQLITE_SOURCE is OK. Please create a PR modified accordingly.

There is an error on travis. I will check and try to fix it.

OK, working now.
The error was because I retyped the modifications instead of copying from my makefile, so there were some typos.

Merged #211

Wow, so nice!
Thank you!


Add Content (Article) for Anagram string.

Problem Statement: To find out if two given strings are anagrams or not.
I'd like to work on this as part of the GSSOC-21.

@iamrajiv can I work on this issue?

@HarshCasper, @iamrajiv  any updates?


[Bug]: "Render markdown" in chat nodes output is not working

What happened?
If I activate "render markdown" for the chat node it does not render markdown (see screenshot)
What was the expected functionality?
The option renders markdown.
Describe your environment
MacOS, Node 14.0.0, etc.
Relevant log output
No response
Relevant screenshots

Code of Conduct

[X] I agree to follow this project's Code of Conduct

It's working for me, can you give a more detailed reproduction?

I can also not immediately reproduce it with the chat node, but found another case that is reproducable. If you look at the output of a subgraph it does not work.
Just run the main graph and look at the output of the subgraph and activate the "render markdown".
Cannot upload the rivet file, so here is its content:
version: 4
data:
attachedData:
trivet:
testSuites: []
version: 1
graphs:
P_AiOxntuyLf5Md9wWqsz:
metadata:
description: ""
id: P_AiOxntuyLf5Md9wWqsz
name: Main Graph
nodes:
'[61Um3XcTFZFIvIhsC3R5J]:subGraph "Subgraph"':
data:
graphId: PwirGz1O1AzPu5oSEORU-
useAsGraphPartialOutput: false
useErrorOutput: false
visualData: 409/286/330/2//
PwirGz1O1AzPu5oSEORU-:
metadata:
description: ""
id: PwirGz1O1AzPu5oSEORU-
name: Subgraph
nodes:
'[X6BlTlZPq9Isnu2lXm-oj]:text "Text"':
data:
text: Render some markdown for testing
outgoingConnections:
- output->"Chat" k6n76N25xjy2_lBRKWLQh/prompt
visualData: 351/328/330/2//
'[ixkEPDUqMUG-EmiqWHWNC]:graphOutput "Graph Output"':
data:
dataType: string
id: output
visualData: 1202/315/330/4//
'[k6n76N25xjy2_lBRKWLQh]:chat "Chat"':
data:
cache: false
enableFunctionUse: false
frequencyPenalty: 0
maxTokens: 1024
model: gpt-3.5-turbo
parallelFunctionCalling: true
presencePenalty: 0
stop: ""
temperature: 0.5
top_p: 1
useAsGraphPartialOutput: true
useFrequencyPenaltyInput: false
useMaxTokensInput: false
useModelInput: false
usePresencePenaltyInput: false
useStop: false
useStopInput: false
useTemperatureInput: false
useTopP: false
useTopPInput: false
useUseTopPInput: false
useUserInput: false
outgoingConnections:
- response->"Graph Output" ixkEPDUqMUG-EmiqWHWNC/value
visualData: 794/258/230/3//
metadata:
description: ""
id: 5ec1QuhLogc1rLeH6DEiy
title: Markdown issue
plugins: []

Fixed subgraph nodes in 1e340da66b7ddecee2cd9829f834f183eee112e5