Fix syntax in common setup.py

Codecov Report

Merging #191 (99e58f8) into main (64c66c8) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #191   +/-   ##
=======================================
  Coverage   89.85%   89.85%
=======================================
  Files          27       27
  Lines        1558     1558
=======================================
  Hits         1400     1400
  Misses        158      158

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 64c66c8...99e58f8. Read the comment docs.


added rotate method

This looks good to me. Useful too. I'd love for a second set of eyeballs, but I'm inclined to say merge it. 👍
Only request: could you add it to the readme also?

👍 LGTM

Thanks guys, just updated the readme :)


[Addition]: 3 suspecious HS, massive boom in their rewards for last 4 days

Hotspot b58 Addresses
112D3q25HnPnvJPv2Q8cuTAYzCCdeKEt6WNnA5P3YMTTLWA8q9Y8
112kMMRUKvePgnexzUAp5fcFH6YLb3qjJitQHtpCBHm2buxNsY9M
11xqbWxKMKhjVhRt6Nuk21vjiijfzt8Ax5BYtVNdgFHvn6NTabx
Discord Handle
No response
Reason(s)

Please provide more evidence

The latest chain variable update promotes rewards to miners in less HS dense area. This is completely normal IMO. However, you should provide different evidence such as self witnessing or abnormal RSSI/SNR ratios.

Well, its not my addition, But I had a look into it and it really looks suspicous.
To start with, it is a national park. the HS's are placed in the middle of sand dunes.
HS wallet:
147jUWViCJ3TP85s9TRV55GQpSR1YfvmiCssd8ipPggwz85pcks
had 5 months ago all 3 HS.
then it moved HS:
112D3q25HnPnvJPv2Q8cuTAYzCCdeKEt6WNnA5P3YMTTLWA8q9Y8
112kMMRUKvePgnexzUAp5fcFH6YLb3qjJitQHtpCBHm2buxNsY9M
to 2 separate wallets.

There are more HS's in that area but they are not witnessed.
All 3 wallets already contain multiple HS's on the deny list.
The HS's that are not on the deny list are in a city 90 km away from the other 3 suspicious hotspots.
nearby this set of  there are 2 other gaming setups. same area. same closed loop witnessing.


Monitoring: when you enter an erroneous trigger, you cannot correct anymore

Current Behavior
I was experimenting with triggers and made some error. That error is probably the cause of the following message in the log:
2024-11-19 13:48:19,113 ERROR [http-nio-80-exec-4] {} bus.BusException - unable to (re)configure Monitor
org.frankframework.configuration.ConfigurationException: you must define a period when using threshold > 0

However, this error message resulted from saving the following:

When you make an error configuring a trigger once, the wrong data seems to persist somewhere, making it impossible to correct.
When you click back, it appears that the triggers were actually saved:

Expected Behavior
When you correct the data after entering wrong input, saving should work. And if the trigger was saved, the UI should not show an issue stating that there was an error.
Environment Information
FF! 9.0.0-20241115.042343: Frank2Example1
Running on LAPTOP-R1SK28C using Apache Tomcat/10.1.24
Java Version: OpenJDK Runtime Environment (21.0.2+13-LTS)
Heap size: 226.0 MiB, total JVM memory: 281.0 MiB
Free memory: 55.0 MiB, max memory: 1.0 GiB
Free disk space: 115.1 GiB, total disk space: 464.3 GiB
Steps To Reproduce
No response
Configuration
<Configuration
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="../FrankConfig.xsd"
	>
	<Adapter name="Adapter1a">
		<Receiver name="Receiver1a">
			<ApiListener name="Listener1a" uriPattern="service1a"/>
		</Receiver>
		<Pipeline>
			<EchoPipe name="HelloWorld" getInputFromFixedValue="Hello World!"/>
		</Pipeline>
	</Adapter>
	<Monitoring>
		<SenderMonitorAdapterDestination>
			<IbisLocalSender name="triggerIt" javaListener="reactToMonitor"></IbisLocalSender>
		</SenderMonitorAdapterDestination>
	</Monitoring>
</Configuration>

Input
No response
What database are you using?
No response
What browsers are you seeing the problem on?
No response
Relevant Log Output
No response
Anything else?
No response

I have another idea about the cause of this issue. The Save button may save all triggers instead of only the trigger just edited. If some earlier trigger is erroneous then saving all triggers reproduces the error. This problem does not occur anymore when you start with a new monitor.

In frontend validation (form-control) when threshold >1 make period a mandatory field.

It is not possible to save an erroneous trigger anymore. This is fixed in.


Basic usage with (immutable data)

Hi,
I am trying to use this on a set of immutable (static/offline) data. However, it does not seem to work- it just creates a scrollable window.
All values are displayed.
I have put this inside a CodeSandbox to make it clearer:
https://codesandbox.io/s/58PEN67xv
Here is my code:
import ReactList from 'react-list';

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      demoData: x.demoData,
    };
  }
renderItem(index, key) {
    return
{this.state.demoData[index].name}
;
  }

  render() {
    return (

        <ReactList
            itemRenderer={::this.renderItem}
            length={this.state.demoData.length}
            type='uniform'
          />

    );
  }
}

Pasting your example into the code sandbox, it seems to be working. If you inspect the elements you'll see they're being added/removed appropriately. Am I missing something?

@caseywebdev Thanks.
I see that! However, in my actual code- the performance is very laggy and the performance is terrible. I must be using your code wrong.
I put this in a codeSandbox as well (important section is line 51, then line 97)- https://codesandbox.io/s/qxmqX94R3
  renderItem(index, key) {
      const { selectedFilters, movies, searchQuery } = this.state;
    const moviesToHide = filterMovies(movies, selectedFilters, searchQuery.split(' '));
    var moviesNamesToHide = new Set(moviesToHide.map(m => m.title));

    return

    {movies.map(e => {
          const isActive = moviesNamesToHide.has(e.title);
          return <Result remove={this.remove} key={e.pk} result={e} isActive={isActive} />;
        })[index]}

;
  }

Then inside the render,
       <ReactList
            itemRenderer={this.renderItem.bind(this)}
            length={moviesToHide.length}
            type='uniform'
          />

You're doing an extraordinary amount of extra work in that renderItem function which is causing your problem. Move all of that filtering out of the render function  and do as little as possible in your renderItem.

I see. I do not understand how to render it though, if I need those filters applied. I tried this- but no results are rendered:
class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      movies: largeData.movies,
      selectedFilters: {},
      searchQuery: '',
    };
  }
  render() {
    const { selectedFilters, searchQuery, movies } = this.state;
    const moviesToHide = filterMovies(movies, selectedFilters, searchQuery.split(' '));

    var moviesNamesToHide = new Set(moviesToHide.map(m => m.name));
    var genresToShow = this.uniqueGenres1(moviesToHide);
    var genreNamesToShow = new Set(genresToShow.map(g => g.name));
    var allGenres = this.uniqueGenres1(movies);
    return (

        {movies.map(e => {
          const isActive = moviesNamesToHide.has(e.name);
          return <Result key={e.id} result={e} isActive={isActive} />;
        })}

    );
  }
}

class Result extends React.Component {
  renderItem(index, key) {
    return

          {result.name} {' '}
          ({result.genres.map(x => x.name).join(', ')}){' '}

;
  }

  render() {
    const { result, isActive } = this.props;

    return (

        <ReactList
            itemRenderer={::this.renderItem}
            length={result.length}
            type='uniform'
          />

    );
  }
}


How is orderHash derived?

Hi, can someone point me to how to generate an orderHash to implement the /v0/order/[orderHash] endpoint? Thanks

Found the answer https://github.com/0xProject/0x.js/blob/54ef916b93ba0939dcb8824149c9a9fb74df4f2e/packages/0x.js/src/utils/utils.ts#L32


Does not work with Raspberry Pi 4

Can't access GPIO on Raspberry Pi 4 using Raspbian Buster.

yep please use
https://learn.adafruit.com/circuitpython-on-raspberrypi-linux


Values for parameter 1

Provide a list of known violations (values for parameter 1) and their corresponding meanings.

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

ID: 11e0dfb6-99ee-e54c-0f47-111db569266a
Version Independent ID: c26569e3-3d91-f15c-906d-0434c2fa8bdc
Content: Bug Check 0x121 DRIVER_VIOLATION
Content Source: windows-driver-docs-pr/debugger/bug-check-0x121---driver-violation.md
Product: windows-hardware
GitHub Login: @DOMARS
Microsoft Alias: domars

@LuigiBruno - Added the description of param1, so closing this issue. Thanks for filing this issue and your interest in improving the stop code docs.


Use _ instead of ? as fall back character

This fixes #118 by removing ? from the list of valid derivation name characters and using an underscore _ as a fallback characters instead. I updated the tests accordingly.

I'll close this in favor of #132


Merge Two Sorted Lists

Hii @iamdestinychild  can i work on it?

hii @iamdestinychild please assign this issue to me as it seems to be perfect for me

hi, can you assign me this issue?


Best practices: Use schema validation along classes

Hello,
This issue is not related to a Zod problem, but I'm sure people using the lib can help me <3
This is a simple Schema (we have to imagine it is more complex):
export const PersonSchema = z.object({
    id: z.string(),
    firstname: z.string(),
    lastname: z.string()
});

export type PersonType = z.infer<typeof PersonSchema>;

On server side, when I get a POST request, I can validate the payload using:
const newPerson = PersonSchema.parse(payload);

Great, my noSQL database will stay clean !
But now, I want to use this on client-side. So I use the same method.
const newPerson = PersonSchema.parse(payload);

My front get a Person object now, but to display it, I would like to use a class method like this for example:
newPerson.getFullName();

But newPerson is not a class instance...
So far, I found those solutions:
Solution 1:
Create a class Person:
class PersonClass implements PersonType {
    id: ZodString['_output'];
    lastname: ZodString['_output'];
    firstName: ZodString['_output'];

    constructor(newPerson: PersonType) {
        this.id = newPerson.contactEmail;
        this.lastname = newPerson.lastname;
        this.firstname = newPerson.firstname;
    }

    getFullName() {
        return this.firstname + " "  + this.lastname;
    }

OR
class PersonClass implements PersonType {
    id: z.infer<typeof PersonSchema.shape.name>;
    lastname: z.infer<typeof PersonSchema.shape.name>;
    firstName: z.infer<typeof PersonSchema.shape.name>;

    constructor(newPerson: PersonType) {
        this.id = newPerson.contactEmail;
        this.lastname = newPerson.lastname;
        this.firstname = newPerson.firstname;
    }

    getFullName() {
        return this.firstname + " "  + this.lastname;
    }
}

I found this on the same subject:
https://github.com/colinhacks/zod/issues/38
But the more Person will have attributes, the more the class size is also growing. And I will have to parse my object, then to make an instance of the class...
Solution 2:
I don't use classes, and I create a getFullName() methods like this:
const getFullName = (person: PersonType) => {return person.firstname + " " + person.lastname;}

So my question is:
How and when do you use Zod in your projects ?
Only to validate payloads ? How to use methods on parsed objects?

Definitely a matter of taste here, but I find a functional style and using POJOs (Plain old JavaScript Objects) is more idiomatic with JavaScript than this more traditional OO style, especially since JavaScript classes are not classical-OO classes, since they're syntactic sugar over regular JS functions/prototypes. If classes aren't strictly necessary, you can attach functions directly to any plain object, also:
CodeSandbox
const person = z.object({
  id: z.string(),
  firstName: z.string(),
  lastName: z.string()
});
type Person = z.infer<typeof person>;

const valid = {
  ...person.parse({
    id: "abc",
    firstName: "Scott",
    lastName: "Trinh"
  }),
  getFullName: function (this: Person) {
    return `${this.firstName} ${this.lastName}`;
  }
};
valid.getFullName(); // "Scott Trinh"

Attach functions to object could work yes, but how can I attach the same function to all parsed object ?
like:

const person = z.object({
    id: z.string(),
    firstName: z.string(),
    lastName: z.string(),
    getFullName: z.function().nullish().transform(function(this: Person) {
          return `${this.firstName} ${this.lastName}`;
    })
});
type Person = z.infer<typeof person>;

But I got an error:
TS2502: 'this' is referenced directly or indirectly in its own type annotation.

Yeah, I wouldn't think that you'd want the function itself in the schema since the schema is really just about validating data. And, as you've seen, you cannot implement the function within the schema unless you made it lazy, but then you'd end up having to write the type out manually.
I don't often write class-based code, so I don't think I'm in a great position to help you out here, so I'll let someone else chime in here. I imagine that most class based code uses validation as part of the constructor, but I don't know how you avoid having to redeclare all of the types as you've pointed out.
Another option is to use modules as a class-like structure. This is more similar to what I often do in practice and has a similar feel to class-based solutions.
CodeSandbox
// Person.ts
import { z } from "zod";

const person = z.object({
  id: z.string(),
  firstName: z.string(),
  lastName: z.string()
});
export type Person = z.infer<typeof person>;

export function create(data: unknown) {
  return {
    ...person.parse(data),
    getFullName: function (this: Person) {
      return `${this.firstName} ${this.lastName}`;
    }
  };
}

// index.ts
import test from "tape";
import * as Person from "./Person";

test("valid", (t) => {
  const valid = Person.create({
    id: "abc",
    firstName: "Scott",
    lastName: "Trinh"
  });

  t.equal(valid.getFullName(), "Scott Trinh");
  t.end();
});

export function create(data: unknown) {
  return {
    ...person.parse(data),
    getFullName: function (this: Person) {
      return `${this.firstName} ${this.lastName}`;
    }
  };
}

This is a great idea ! I think I will use this "factory" to add all my "class" functions to all objects !

Closing, but feel free to add any additional thoughts here. If we want this to be an ongoing discussion point, we can also migrate this to a GitHub discussion.


Don't download android nor ios artifacts

These artifacts aren't needed for Fuchsia driver tests.

Looks like #49917 passed on re-run here

This is still failing to download packages:
+ export FUCHSIA_SSH_PKEY=/b/s/wy6ANCU/ir/.ssh/pkey
+ FUCHSIA_SSH_PKEY=/b/s/wy6ANCU/ir/.ssh/pkey
+ cat
+ export FUCHSIA_SSH_CONFIG=/b/s/wy6ANCU/ir/fuchsia_ssh_config
+ FUCHSIA_SSH_CONFIG=/b/s/wy6ANCU/ir/fuchsia_ssh_config
+ flutter_dir=/b/s/wy6ANCU/ir/flutter
+ flutter_bin=/b/s/wy6ANCU/ir/flutter/bin/flutter
+ find /b/s/wy6ANCU/ir/flutter -name .packages
+ xargs rm
+ cd /b/s/wy6ANCU/ir/flutter/dev/benchmarks/test_apps/stocks/
+ /b/s/wy6ANCU/ir/flutter/bin/flutter precache --fuchsia
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Downloading Android Maven dependencies...
Failed to download the Android dependencies
Downloading Android Maven dependencies...                           0.0s
+ /b/s/wy6ANCU/ir/flutter/bin/flutter precache --flutter_runner
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Downloading Android Maven dependencies...
Failed to download the Android dependencies
Downloading Android Maven dependencies...                           0.1s
Downloading package flutter runner...
Download failed.
URL: https://chrome-infra-packages.appspot.com/dl/flutter/fuchsia/+/git_revision:f44f50f3c58785807936b12b8ed6bec42a135f84
Error: 400 Bad Request

We should not be running these on the bots. Ideally we would package all that the bot needs into isolated

This is superseded by https://github.com/flutter/flutter/pull/50128


Chore/bump deps

Update to following deps:

Go to 1.23
git-sync to 4.3.0
actions/checkout to v4
actions/setup-go to v5
helm to 3.26.3
kube-code-generator to 1.16.0
mockery to 2.50.0
gomarkdoc to 1.1.0
codecov-action to 5.1.1
upload-to-github-release to 1.6.0


Add support for setLineDash

Context2d allows setting line dash as an array of numbers.  Add properties and interpolators to support and include in Graphic2d node.

Added in envy 0.0.5.


Proxy request errors

Hi there,
I'm attempting to use TPB as described in the docs:
import PirateBay from 'thepiratebay'

PirateBay.search('Game of Thrones', {
  category: 205
})
.then(results => console.log(results))
.catch(err => console.log(err))

But instead of seeing search results, I keep getting this error:
None of the proxy requests were successful
I'm able to visit all of the proxies in my browser (my ISP isn't blocking them), so I'm not sure why this error is occurring. I'm running this package in a Gatsby/React site running on localhost.
Any idea how I can get past this error?

Probaly because Puppeteer package should be updated. Anyway you can fix the issue by setting
PUPPETEER_EXECUTABLE_PATH='C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'

In your .env file. Error should dissappear.
However, in my case I also had to update the entire list of TPB proxy URLs... Cuse most of them seemed down.


Train rust dataset

@HockJC please open  PR at https://github.com/SecurityLab-UCD/FuzzAugmentation for the updates.


Mac python 2, able to query but not read or edit-note

New user. Mac Sierra. Python
$ python --version
Python 2.7.10
Am able to query my zotero db. E.G.
$ zotcli query Sullivan
[REFTHQBY] Sullivan and Miller: Segmenting the informal venture capital market: Economic, hedonistic, and altruistic investors (May 1996)
When reading or edit-noting, it chokes.
$ zotcli read sullivan
Traceback (most recent call last):
File "/usr/local/bin/zotcli", line 9, in
load_entry_point('zotero-cli==0.3.0', 'console_scripts', 'zotcli')()
File "/Library/Python/2.7/site-packages/click/core.py", line 722, in call
return self.main(*args, **kwargs)
File "/Library/Python/2.7/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/Library/Python/2.7/site-packages/click/core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Library/Python/2.7/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Library/Python/2.7/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/Library/Python/2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/Library/Python/2.7/site-packages/zotero_cli/cli.py", line 208, in read
att_path = ctx.obj.get_attachment_path(read_att)
File "/Library/Python/2.7/site-packages/zotero_cli/backend.py", line 239, in get_attachment_path
"Attachment is not stored on server, cannot download!")
ValueError: Attachment is not stored on server, cannot download!
$ zotcli read REFTHQBY
Traceback (most recent call last):
File "/usr/local/bin/zotcli", line 9, in
load_entry_point('zotero-cli==0.3.0', 'console_scripts', 'zotcli')()
File "/Library/Python/2.7/site-packages/click/core.py", line 722, in call
return self.main(*args, **kwargs)
File "/Library/Python/2.7/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/Library/Python/2.7/site-packages/click/core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Library/Python/2.7/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Library/Python/2.7/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/Library/Python/2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/Library/Python/2.7/site-packages/zotero_cli/cli.py", line 198, in read
attachments = ctx.obj.attachments(item_id)
File "/Library/Python/2.7/site-packages/zotero_cli/backend.py", line 224, in attachments
attachments = self._zot.children(item_id, itemType="attachment")
File "/Library/Python/2.7/site-packages/pyzotero/zotero.py", line 129, in wrapped_f
retrieved = self._retrieve_data(func(self, *args))
File "/Library/Python/2.7/site-packages/pyzotero/zotero.py", line 608, in children
i=item.upper())
AttributeError: 'NoneType' object has no attribute 'upper'

After using zotcli for a bit I realize this is caused by trying to add-note or edit-note to a library item that already has a note that was not created by zotcli.
My suggestion is to handle errors from this and let the user know they need to remove the non-zotcli note. Or, better, convert non-zotcli notes into markdown zotcli notes so they are editable.

I'm having the same issue as you, specifically with zotcli having trouble with the 'NoneType' object has no attribute 'upper' error. I am unable to edit existing Zotero notes, which is understandable, but I'm also unable to edit notes I have created only using zotcli - that's pretty strange.
Further, notes I create using zotcli are placed in my 'Unfiled Items' catergory rather than under the item I originally intended.

Can confirm same error as @cbcoutinho  under archlinux, python3.

Receiving the same error as @cbcoutinho and @lf-araujo under Ubuntu with python3


possibility of Pymoo to work within a candidate search space

Hello,
I have a problem of two objective functions, three variables, and zero constraints.
I have also a search space for these variables read from CSV.
Is it possible to use pymoo to use that search space of variables (instead of xl, and xu) to get the best combination of them that maximize the two functions.
class MyProblem (Problem):
  def __init__(self):
    super().__init__(n_var=3,
                     n_obj=2,
                     n_constr=0,
                     #I want to use the search space of the three variables (I already have)
                     xl=np.array([0.0,0.0,0.0]),
                     xu=np.array([1.0,1.0,1.0])
                     )
  def _evaluate(self,X,out,*args,**kwargs):
    #Maximizing the triangle area of the three variables
    f1=-1*(0.5*math.sin(120)*(X[:,0]*X[:,1] +X[:,2]*X[:,1]+X[:,0]*X[:,2]))

    #maximizing the sum of the variables
    f2 = -1*(X[:,0]+X[:,1]+X[:,2])

    out["F"] = np.column_stack([f1, f2])

problem = MyProblem()

When I use the xl and xu, it always gets the combination of ones [1.0,1.0,1.0], but I want to get the best combination out of my numpy multi-dimension array.

import csv
with open("sample_data/dimensions.csv", 'r') as f:
    dimensions = list(csv.reader(f, delimiter=","))

import numpy as np
dimensions = np.array(dimensions[1:])
dimensions=np.array(dimensions[:,1:], dtype=np.float)

dimensions

that looks like the following:
array([[0.27      , 0.45      , 0.23      ],
       [0.        , 0.23      , 0.09      ],
       [0.82      , 0.32      , 0.27      ],
       [0.64      , 0.55      , 0.32      ],
       [0.77      , 0.55      , 0.36      ],
       [0.25      , 0.86      , 0.18      ],
       [0.        , 0.68      , 0.09      ],...])

Thanks for your help!

Your result is that what you can expect. Analyze your objectives, and you will see each objective function has its optimum at (1,1,1). Thus, your objectives are not conflicting, and there exists an optimal solution dominating all others.
I recommend thinking one more time about the optimization problem to identify the trade-off in your problem.

@julesy89  Thanks for your reply, yes I agree, but what I need is is there a way not to provide the upper bounds and lower bounds using xl and xu, so that the algorithm is able to use the search space of the three variables read from the CSV (as shown above).

You can pass xl and xu in the constructor of your problem. Both vectors can be loaded from a csv without any problem.

Excuse me, How will it look like should I pass them the same values from CSV? I'm a little bit confused.

I hope you have resolved your problem. If you only want a linear combination of the rows in the csv file you will have to redefine your problem to use them. Use the instructor of the problem to load files.
Julian


Cloudflare and HTTPS issue

First of all, you guys are awesome! This is the one i've been looking for a whole year.
I saw there are configuration to setup using a domain and there's env variables to use SSL and Cert path there. But i just wondering how can i put the domain with SSL from cloudflare without enabling it in configuration, should i stick to disable WAHA_HTTPS_ENABLED . This is the configuration file i used.
docker run -it -e "WHATSAPP_DEFAULT_ENGINE=NOWEB" -e "WHATSAPP_SWAGGER_USERNAME=<username>" -e "WHATSAPP_SWAGGER_PASSWORD=<password>" -e "WHATSAPP_DASHBOARD_USERNAME=<username>" -e "WHATSAPP_DASHBOARD_PASSWORD=<password>" -e "WHATSAPP_API_KEY=<keys>" -e "WHATSAPP_HOOK_URL=<hooks>" -e "DOMAIN=<domain>" -e "WAHA_HTTPS_ENABLED=true" -e "WAHA_HTTPS_PATH_KEY=/etc/letsencrypt/live/<domain>/privkey.pem" -e "WAHA_HTTPS_PATH_CERT=/etc/letsencrypt/live/<domain>/cert.pem" -e "WAHA_HTTPS_PATH_CA=/etc/letsencrypt/live/<domain>/chain.pem" -e "WHATSAPP_API_HOSTNAME=<domain>" -p 3000:3000/tcp devlikeapro/waha-plus
When running this command, it gives me error something like this.

Do you guys have any idea how to solve this, should i stick using the SSL from server or switch using cldouflare instead.
Thank you in advance!

+1

Tonight Cloudflare + WAHA (without https) just stopped working :(
I use Ploi to provision SSL via Let's Encrypt

When it's switched off the error stops the container

@elasti-co probably cloudflare check upstream by requesting / resourse for the server or the container management tool does it
Consider configuring /api/version instead for simple healtchecks
If not - could you show the errors from the docker logs?

Do you guys have any idea how to solve this, should i stick using the SSL from server or switch using cldouflare instead.

@masitings we suggest using cloudflare instead, so just remove all HTTPS related configurtaion from the command and put API behind cloudflare :+1:
The software should do a single thing good, so TLS termination should be done by a service specialized for this (like nginx or cloudflare or any other cloud solutions)


Specify grammar file for CluProcessor tokenizer via config

As @danebell and others can attest, when considering differences observed across domains, registers, corpora, and tasks, a single token grammar per language is unlikely to fit all cases.  For that reason, I propose we alter CluProcessor such that its tokenizer is determined by specifying the grammar file's location from the config (ex. *.tokenizer.grammar = ???):

https://github.com/clulab/processors/blob/6cf2291418c063ef9a429708ab064b2842a0bb20/main/src/main/scala/org/clulab/processors/clu/CluProcessor.scala#L44-49

Since CluProcessor uses ANTLR 4 grammars for tokenization and sentence segmentation, this seems like a reasonable change to make.  Doing so would make it even easier to develop custom processors for very specialized tasks.

@myedibleenso, a change made to CluProcessor after submission of your issue allows the user to supply a tokenizer when the CluProcessor is constructed.  That tokenizer could be based on an alternate ANTLR grammar or anything else and could be configured as suggested or hard-coded, onbeknownst to CluProcessor.  Would that serve your purpose here?  In other words, is the issue now obsolete?

I think so.  Thanks, @kwalcock !


regex-replace wasnt working on the positional argument

I didn't find why regex-replace wasn't working with $1, but assigning the positional parameter into a new variable fixed it. [I'm using zgen to clone a github private repo through ssh, and it contained a colon]

Can you change url variable to local url to match the style with the rest of the project?

Done!

Thank you!


How do I assign a value to a variable when calling a nested template?

#[derive(Serialize, Deserialize)]
#[serde(tag = "t", content = "c")]
enum Objects {
    Solo(String),
    Parent(String, Vec<Objects>),
}
...
let mut engine = upon::Engine::new();
engine.add_filter("eq", str::eq);
...

I need to unwrap recusive it:
Template named "show":
{% for item in objects %}
    {% if item.t | eq: "Solo" %}
    The object named {{item.c}}
    {% else %}
    The object named {{item.c.0}}
    include chailds: {% include "show" with __/objects: item.c.1/__ %}
    {% endif %}
{% endfor %}

How can I implement "expression.to.globals" here from docs referention:
{% include "nested" with expression.to.globals %}

Method 1
Here is a way to do this but requires changing the enum variant so that it looks like your global context.
#[derive(Serialize, Deserialize)]
#[serde(tag = "t", content = "c")]
enum Objects {
    Solo(String),
    Parent {
        value: String,
        objects: Vec<Objects>,
    },
}

// show
{% for item in objects %}
    {% if item.t | eq: "Solo" %}
    The object named {{item.c}}
    {% else %}
    The object named {{item.c.value}}
    include childs: {% include "show" with item.c %}
    {% endif %}
{% endfor %}

Method 2 (requires #24)
If we could have a list as the root context for a template then you could do this by simply referring to the root with .. For example:
// show
{% for item in . %}
    {% if item.t | eq: "Solo" %}
    The object named {{item.c}}
    {% else %}
    The object named {{item.c.0}}
    include childs: {% include "show" with item.c.1 %}
    {% endif %}
{% endfor %}

Method 3 (maybe one day possible?)
If there was a way to construct an object literal in templates then you could do this by constructing something that looks like the root context. For example:
// show
{% for item in objects %}
    {% if item.t | eq: "Solo" %}
    The object named {{item.c}}
    {% else %}
    The object named {{item.c.0}}
    include childs: {% include "show" with {objects: item.c.1} %}
    {% endif %}
{% endfor %}

Thank you for the detailed answer. I am waiting for the implementation of method No 3. That would be wonderful!
Good luck!


web socket library

"nhooyr.io/websocket" is generally better than the gorilla one IMHO.
Good example of a Runner that also uses Supervisions Trees.
https://github.com/gedw99/runner/blob/master/runner/web.go

i was thinking of this library and decided to go with gorilla's implementation for a while. anyway, still on the fence.

I, of course, do not know your use cases, but I only suggested it because I know the "nhooyr.io/websocket" one has a better history, and it also compiles to WASM on Server and Client, from when I used it on past projects.


⚠ ClamAV has degraded performance

In 1b1866c, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 96 ms

Resolved: ClamAV performance has improved in 9d667b8.


Invalid code snippet in examples

I noticed small errors in Example of usage of modifiers. There are 2 examples with the method WithAadAuthority which is now an WithAuthority overload.

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

ID: 6bde57e5-d6a7-629f-cf29-ab3cd30fffe1
Version Independent ID: eeeaeb90-a125-7b05-d93f-155517b90303
Content: Initialize MSAL.NET client applications - Microsoft identity platform
Content Source: articles/active-directory/develop/msal-net-initializing-client-applications.md
Service: active-directory
Sub-service: develop
GitHub Login: @mmacy
Microsoft Alias: marsma

Thanks for the feedback! We are currently investigating and will update you shortly.

Good catch, @MarcelGosselin - thanks! Fixing now. #reassign:mmacy

Fixed in https://github.com/MicrosoftDocs/azure-docs-pr/pull/130484 (private repo, might 404 for you). Live publish will roll out on or about 22 SEP 2020 after Ignite publishing freeze is lifted. Closing as fixed: #please-close
Thanks again for the call-out, @MarcelGosselin!


cut 0.16.0

Signed-off-by: Augustin Husson<EMAIL_ADDRESS>

Codecov Report

Merging #143 (359c397) into master (87c07b5) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #143   +/-   ##
=======================================
  Coverage   72.40%   72.40%
=======================================
  Files          15       15
  Lines         750      750
  Branches      167      167
=======================================
  Hits          543      543
  Misses        129      129
  Partials       78       78

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 87c07b5...359c397. Read the comment docs.

:+1: besides comment


Asp.net Core and IdentityServer4 quick start doesn't work

[x] I read and understood how to enable logging

Issue / Steps to reproduce the problem
Following the step by step to create the ID server (https://identityserver4.readthedocs.io/en/dev/quickstarts/0_overview.html#how-to-run-the-quickstart), I get the follow error:

No storage mechanism for clients specified. Use the 'AddInMemoryClients' extension method to register a development version

Does the documentation need an update or do I have a setup issue?
Relevant parts of the log file
<log goes here>

That page says:

IdentityServer is not yet ready to be launched. In fact, when you try it, you should see an exception at startup time stating that services are missing. We will add those services in the following quickstarts.

continue here:
https://identityserver4.readthedocs.io/en/dev/quickstarts/1_client_credentials.html

That explains it, thanks

love it when you get old answers to an problem i have and it doesn't work because the page the link is for doesn't exist anymore

https://identityserver4.readthedocs.io/en/latest/quickstarts/1_client_credentials.html


nushell: 0.40.0 -> 0.41.0

Motivation for this change
upgrading from 0.40.0 to 0.41.0
Bugfix release
Blog post of the release : https://www.nushell.sh/blog/2021-12-07-nushell_0_41.html
Things done

Built on platform(s)

[X] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[X] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[X] Tested basic functionality of all binary files (usually in ./result/bin/)
22.05 Release Notes (or backporting 21.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[X] Fits CONTRIBUTING.md.

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

1 package built:

nushell


Discuss deck layout and ordering

Current deck layout and ordering (ie where slot #1 is) is backwards from how opentrons does it. Discuss if this is actually how we want it or if we want to stick with convention.

Slot 1 is currently set to be closest to Jubilee's origin position. I think having it aligned with Jubilee's axes makes manual adjustments intuitive and some implementation details straightforward (e.g. we can just use the Opentrons labware definitions off-the-shelf), so my instinct is to keep the current layout to encourage people to 'buy in' to the Jubilee coordinate system. This could be beneficial to build a sound mental model of the machine should users want to make their own non-deck related applications in the future. But happy to change it if others feel that it is unnecessarily confusing for scientists already comfortable with OpenTrons!

Closing this-- feel free to reopen if we should discuss more!


Reloading decks overwrites css changes

First of all, thanks for this addon and your help with my image issue. PDF -> Markdown -> Anki is sooo much more fun to work with.
As I am often iterating on my cards, I have to reimport the decks multiple times (because I want to keep all the cards managed by ankdown and not risk overwriting changes done in anki itself).
However, everytime I reimport the decks, it overwrites my CSS changes to the Ankdown Card Type (I changed the font-size and the font itself as it was not really readable on my computer).
Is this a known issue?
Currently I just copy the affected CSS back into the card template once I reloaded the decks.

From looking at the source code of the Anki Addon, I see that the standard css is loaded each time because the Anki Addon does not support configuration currently, so ankdown itself falls back on the default config.
My workaround for now is to change the CSS in the ankdown.py file.


Id links in schema is broken

https://www.opencontainers.org/schema/
There is no such page. Haven't tried before, is that a regression or place holder?
ping @vbatts

Either a) a placeholder; or b) more of a DNS based ID not required to
resolve. It would be nice, but not immediately necessary.
On Thu, Apr 14, 2016 at 8:43 PM, Qiang Huang<EMAIL_ADDRESS>wrote:

https://www.opencontainers.org/schema/
There is no such page. Haven't tried before, is that a regression or place
holder?
ping @vbatts https://github.com/vbatts
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
https://github.com/opencontainers/runtime-spec/issues/387

OK, thanks for clarifying, I'll close the issue.


C++ tokeniser is/has been broken

The following is 16 tokens, of which most are the header for iostream:
https://golfcoder.org/2023/day/1?solution=e662d399dfd61f751247ea083f0cc2d3#solution
#include<iostream>
#defineXusing namespace std; int main() {string line;uint32_t sum{};while (getline(cin, line)) {uint32_t d = 0;for (auto c : line)if (c < 60) {auto x = c - 48;if (!d) sum += 10 * x;d = x;}sum += d;}cout << sum << endl;}
X

Hi dah33, thank you for the report!
You are right, there are 2 problems, I'll take a look into that!

@dah33 https://golfcoder.org/2023/day/1?solution=e662d399dfd61f751247ea083f0cc2d3#solution now correctly reports 87 tokens


V3.2.4 LB does not detect that Login button was pressed with success, thus stuck at 40%

Describe the bug
Sometimes LB logins but fails to register that it actually succeeded
Seems like the 40% step is the pressing of the login button.
Does gives us the following behavior:

LB does not attempt to startup the next account because it probably thinks it was not able to press the login button, even though it succeeded

Sometimes LB claims that the game instance has crashed, it displays this message when i just shut down the instance of the game when I was done with it.

!! This seems to happen more frequently with the first few accounts while the DOS protection delay is not in effect yet.
When shutting down the game instance LB will continue and start up the next game instance.
Truth to be told, this version is by far a lot better compared to the previous ones, for that.. Thank you.
To Reproduce
Start a bunch or instances and interact with them while not all instance have started yet.
Expected behavior
Expected the application to detect that the game was started up correctly and proceeds to load up the next instance.
First happend in LB Version
Issue first appeared in LB Version : 3.2.4

This is also happening to me.

Added new Visual Trigger to prelogin startup. This should reduce false state switches between client states.


fix bug preventing deletion of autotest files

Motivation and Context

The most recent release of MarkUs introduced a bug where files could not be deleted on the autotest settings page. This PR fixes that.
Your Changes

Description:
Added a default empty string to a call to FileHelper.checked_join for cases where a path is not specified in params
Type of change (select all that apply):

[x] Bug fix (non-breaking change which fixes an issue)

Testing

Tested deleting a file in the web UI, as well as adding tests for deleting valid files and folders.
Questions and Comments (if applicable)

Checklist

[x] I have performed a self-review of my own code.
[x] I have verified that the pre-commit.ci checks have passed.
[ ] I have verified that the CI tests have passed.
[ ] I have reviewed the test coverage changes reported on Coveralls.
[x] I have added tests for my changes.
[ ] I have updated the Changelog.md file.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

20 of 20 (100.0%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.009%) to 91.451%

Totals

Change from base Build<PHONE_NUMBER>:
0.009%

Covered Lines:
39819

Relevant Lines:
42876

💛  - Coveralls


Understand why cadence content update did not apply on production site

Describe the bug
cadence updated docs/language/interfaces.mdx in this commit:
https://github.com/onflow/cadence/commit/50aff9d961d197623c89250c3fb011f98661f380
expected:
page should have updated
observed:
page was serving stale content on production
todo:

[ ] understand why this update didn't happen
[ ] if it's a problem in the logic, find the webhook payload and write a test to confirm it invalidates the cache

static builds https://github.com/onflow/docs


[Enhancement][RFC] Pass function for managing selected rows in customToolbarSelect

We have opportunity to use mui-datatables as controlled component to set selected rows with rowsSelected and onRowsSelect. Either I can use it in uncontrolled mui-datatables, when I select rows and it keeps in state of component. But if I use customToolbarSelect, and receive my selected rows, I don't have any chance to manage those selected rows except to make component from uncontrolled without rowsSelected to controlled with rowSelected. But it is antipattern, for example, React give a warning in console, if you change defaultValue to value in one lifecycle on input element.
So, I propose to pass some function, e.g. setSelectedRows to customToolbarSelect, that will give us opportunity to manage selected rows in uncontrolled component.
options: {
  customToolbarSelect: (rowsSelected, setSelectedRows) => {
    // do something with rowsSelected
    ...
    // then flush selected rows
    setSelectedRows([]);
  }
}

Expected Behavior

I can manage selected rows (e.g. flush them), when using customToolbarSelect in uncontrolled component
Current Behavior

I can't do anything with selected rows, when using customToolbarSelect in uncontrolled component
Steps to Reproduce (for bugs)

Official example with customToolbarSelect
https://codesandbox.io/embed/545ym5ov6p

Select row
Click on any icon
You can't flush selections, or do anything with it, except to make component controlled and pass to it rowsSelected. But it is antipattern.

Your Environment

Tech
Version

Material-UI
1.4.0

MUI-datatables
2.0.0-beta-38

React
16.5.0

browser
Chrome

Sounds very reasonable. If you want to take this PR up with unit tests I'm more than happy to accept

OK, I'm in :)


support for multiple async requests and concurrent/per-minute rate limits

How does the SDK handle both concurrent rate limits and per-minute rate limits? How can I submit multiple simultaneous requests to improve performance?
Eg, my org supports 75 concurrent requests. If I have a csv file with 75 user ids, this code works fine and finishes in under 1 second.
import okta.client
import asyncio
import csv

group_name = 'many at a time'
filename = 'users.csv'

async def main():
    client = okta.client.Client()
    group, resp, err = await client.create_group({'profile': {'name': group_name}})
    with open(filename) as f:
        users = [user for user in csv.DictReader(f)]

    tasks = [client.add_user_to_group(group.id, user['id']) for user in users]
    await asyncio.gather(*tasks)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

If I try 100 users, it doesn't seem to work correctly -- some users are added to the group, some are not. I do see some messages being logged if enable DEBUG, but I get
2022-01-20 09:28:15,253 - okta-sdk-python - request_executor - INFO - Hit rate limit. Retry request in 114.0 seconds.
2022-01-20 09:28:15,253 - okta-sdk-python - request_executor - DEBUG - Value of retry_limit_reset:<PHONE_NUMBER>.0
2022-01-20 09:28:15,253 - okta-sdk-python - request_executor - DEBUG - Value of date_time:<PHONE_NUMBER>.0

Why would it wait 114 sec if per-minute rate limits reset after a maximum of 60 seconds? Edit: see comment below
Sample users.csv file:
id
00u...
00u...

Hi @gabrielsroka ,
Thanks for your issue.
@serhiibuniak-okta can you please take a look when you have a chance?

this seems to work for up to 500 adds: slice it up into chunks of 75 at a time. it runs in about 4-5 seconds.
import okta.client
import asyncio
import csv
import math

group_name = 'many at a time, take 2'
filename = 'users.csv'
limit = 75 # see https://developer.okta.com/docs/reference/rl-additional-limits/#concurrent-rate-limits

async def main():
    client = okta.client.Client()
    group, resp, err = await client.create_group({'profile': {'name': group_name}})
    with open(filename) as f:
        users = [user for user in csv.DictReader(f)]

    for i in range(math.ceil(len(users) / limit)):
        tasks = [client.add_user_to_group(group.id, user['id']) for user in users[i*limit:(i+1)*limit]]
        await asyncio.gather(*tasks)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

@gabrielsroka Thank you for providing a lot of details. Both rate limit are being "controlled" within the same headers: https://developer.okta.com/docs/reference/rl-best-practices/#example-rate-limit-header-with-org-wide-rate-limit
How SDK handle this: if response comes with error 429, then it calculates wait time (time from "X-Rate-Limit-Reset" header - (minus) time from "Date" header).
I'll investigate a bit if it works correctly and what can be improved. If you have something on your mind, please share, we welcome all ideas.

ok, i think i figured something out. the rate limit headers work totally differently for per-minute vs. concurrent (and i was thinking of the wrong one)
for per-minute, the X-Rate-Limit-Reset should only be < 60 sec in the future (that's why i was confused about 114 sec above)
for concurrent, the X-Rate-Limit-Reset is "an estimated time interval when the concurrent rate limit may be resolved. It isn't a guarantee" [1], and in this case, i think it's totally wrong and your code shouldn't use it
for concurrent errors, your code should look to see if X-Rate-Limit-Limit and X-Rate-Limit-Remaining are both 0 [1], then act accordingly
[1] https://developer.okta.com/docs/reference/rl-best-practices/#example-rate-limit-header-with-concurrent-rate-limit

the challenge i have is, the API doesn't seem to tell you whether your concurrent limit is 15, 35, or 75 -- the user would have to know (i guess the SDK could guess or try it and see, but that's hacky).
how much support should the sdk have for concurrent limits? should it ask the user what it is? should it handle it totally transparently? or would the user have to add their own logic (as i've been doing above)

I'm not sure what's appropriate. How do the other Okta SDKs handle it?
The way I think of it is with the per-minute limit, you have to wait until after the reset, based on the header, this should be in less than 60 seconds.
But for the concurrent limit you have to wait for a thread open up. The number of threads is either 15, 35, or 75. I don't know if the SDK needs to track how many threads there are and how many are open. That's what I'm doing in my code above. But it shouldn't take anywhere near 114 seconds for a thread to open up.
I wrote some more code that I can share here. When I run it with 15 threads, it takes about twice as long as 35, which takes about twice as long as 75. This is not surprising. So for large customers doing large data loads, there are serious performance implications.

each task which reach this limit will wait for the same amount of time, thus it might exceed the limit again after waiting

i'm not sure what you mean

user should keep in mind limits of his org

it's not ideal, but i don't know a better way

each task which reach this limit will wait for the same amount of time, thus it might exceed the limit again after waiting
Let's imagine we launched 200 concurrent requests and org has limit equals to 75 concurrent requests. Then 125 requests will wait for the same amount of time and will be launched approximately at the same time, which exceeds our limit again. So, all 200 requests may be finished in 2-3 min approx. But if we make chunks of 75 it might be finished within few seconds (if we don't exceed org-wide limits, of course). I will continue investigation if we can do anything better.

That doesn't seem to be what actually happens. If you launch 200 concurrent requests, 75 of them will work and you get 125 errors. But you can retry number 76 as soon as one of the 75 is done, same for 77, etc.
In my code, I think of them as 75 threads, each of which is either available or unavailable. A good strategy seems to be not launching more requests than there are available threads because you're going to just get errors anyway. My strategy is to avoid the errors instead of trying to recover from them. It's not always possible but there's no point in launching 76 requests if you only have 75 threads. You know you're going to get at least one error.

In async these entities are not threads, but ok, let's think of them as threads. Then each of 125 threads receive that error message and will wait for the same amount of time. i.e. we launch 200 threads, not a some little pool of threads (for example 8 threads).

i don't mean a Python thread. i'm using the same wording as Okta's doc:

The error condition resolves itself as soon as there is another concurrent thread available

https://developer.okta.com/docs/reference/rl-best-practices/#example-rate-limit-header-with-concurrent-rate-limit
and, again, there won't be 200 threads. it should be smart enough to launch only 75 threads and queue the rest, like i did in my queue code above: https://github.com/gabrielsroka/okta_api/blob/master/queue_tee.py
this is only my solution. there might be a better solution.

I see. I can't think of anything better so far. Let's keep this stuff as it is until we find anything better?

Concurrent rate limits should be enforced at the point where the request is made:
CONCURRENT_REQUEST_LIMIT = 75

class HTTPClientImpl(HTTPClient):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.semaphore = asyncio.Semaphore(CONCURRENT_REQUEST_LIMIT)

    async def send_request(self, *args, **kwargs):
        async with self.semaphore:
            return await super().send_request(*args, **kwargs)

okta_client = Client({'httpClient': HTTPClientImpl, ...})
...

Ideally this would be part of the base client behaviour controlled by a top-level config argument, e.g. either Client({'concurrentRequests': 75}) or Client({'oktaType': 'enterprise'}) (where the latter knows the Enterprise limit is 75).
Somewhat related: the request executor should not use time.sleep to wait for a request timeout . Doing so blocks the entire event loop and serializes the waits. This cannot be easily fixed by subclassing RequestExecutor since you'd have to patch fire_request_helper to await self.pause_for_backoff(backoff_seconds) so that you can make use of this:
async def pause_for_backoff(self, backoff_time):
    await asyncio.sleep(backoff_time)

Links to relevant lines:
https://github.com/okta/okta-sdk-python/blob/0ae9eaa42c5b233482a8a9f5b708c199f02635b7/okta/request_executor.py#L336-L337
https://github.com/okta/okta-sdk-python/blob/0ae9eaa42c5b233482a8a9f5b708c199f02635b7/okta/request_executor.py#L283

Resolved in 2.9.0


ACC-264.1 (Level A)Kyma-dashboard_Tag UI name, type and information not read.

1.1 Internal Message Details
Internal Message:
Test Plan:	ACC SAP Kyma runtime 2024
Message Priority:	Medium
Affected Check Point:	ACC-264.1
Affected UI:	Tag
Short text:	ACC-264.1 (Level A)Kyma-dashboard_Tag UI name, type and information not read.
1.2 Application Details
Application Name	Kyma-dashboard
Application URL:	https://canary.cockpit.btp.int.sap/cockpit#/globalaccount/7304343e-1ce0-412b-a955-5948bab9d2c8/subaccount/e0ec1134-2770-40a2-910b-2b8e32ec8f60/subaccountoverview
User:	SSO
Technology:	SAP UI5
UI5 Version:	1.124.1
1.3 Test Environment Details:
GitHub	https://github.com/kyma-project/busola/issues
Web browser:	Google Chrome - Version 127.0.6533.73 (Official Build) (64-bit)
Operating System:	Windows 11 Enterprise Version 22H2
Screen Reader:	JAWS 2024.2405.83 ILM 64 bit for Windows
2. Screen Flow
•	Login into the application using the URL provided.
•	URL: https://canary.cockpit.btp.int.sap/cockpit#/globalaccount/7304343e-1ce0-412b-a955-5948bab9d2c8/subaccount/e0ec1134-2770-40a2-910b-2b8e32ec8f60/subaccountoverview.
•	Activate ‘Console URL:Link to dashboard’ in overview page.
3. Issue
Synopsis: UI name, type and information not read.
Observed Behavior:
On accessing all ‘Status Tags’ throughout the application, ‘Status Button’ is read instead corresponding label, status information and ‘Tag’ UI type.
Expected Behavior:
UI name should be read once.
Type of the UI should be read out correctly to screen reader users.
Providing role, state, and value information on all user interface components enables compatibility with assistive technology, such as screen readers, screen magnifiers, and speech recognition software, used by people with disabilities.
_____________________________________________---
Kindly refer to the attached document for details.
Regards,
Huda

Issue processing-09.2021 (1).docx
ACC-264.1 (Level A)Kyma-dashboard_Tag UI name, type and information not read.docx


[HOLD for payment 2023-05-09] [$250] Migrate LegalNamePage.js to function component

Class Component Migration
Filenames

[ ] src/pages/settings/Profile/PersonalDetails/LegalNamePage.js

type: React.Component
has state values: false
has refs: false
has context: false
lifecycle methods: none

Task

We currently have some class components in our codebase that we would like to refactor to a function component.
Here's a link with some general advice on how to refactor a class component to a function component: https://react.dev/reference/react/Component#alternatives
If you need additional guidance, please ask in #expensify-open-source
Test for any regressions and verify that there are no breaking changes

@arosiclair taking this issue off HOLD as per this Slack post
IMPORTANT: If anything unexpected pops up during the refactor/review:

[ ] Take it to #expensify-open-source to get clarification on.
[ ] Prefix the conversation with [HOOK REFACTOR] so that we can find it easily.
[ ] Link the result of the conversation in this section of the Design Doc titled “Best Practices Conversations”
[ ] Add it to the STYLE.md guide in this open PR so we can reference it and apply any teachings in the next phase

Reviewing label has been removed, please complete the "BugZero Checklist".

The solution for this issue has been :rocket: deployed to production :rocket: in version 1.3.8-8 and is now subject to a 7-day regression period :calendar:. Here is the list of pull requests that resolve this issue:

https://github.com/Expensify/App/pull/17542

If no regressions arise, payment will be issued on 2023-05-09. :confetti_ball:
After the hold period is over and BZ checklist items are completed, please complete any of the applicable payments for this issue, and check them off once done.

[ ] External issue reporter
[ ] Contributor that fixed the issue
[ ] Contributor+ that helped on the issue and/or PR

As a reminder, here are the bonuses/penalties that should be applied for any External issue:

Merged PR within 3 business days of assignment - 50% bonus
Merged PR more than 9 business days after assignment - 50% penalty

Hey @tjferriss you mind handling payment for @Santhosh-Sellavel? He did the C+ review

@Santhosh-Sellavel I just invited you to the Upworks job for payment: https://www.upwork.com/ab/applicants/1657128748660109312/job-details

Applied thanks @tjferriss!

Offer extended.

Thank you, Accepted!

The payment has been sent.


vmdkops_admin.py - ImportError: No module named argparse

Any idea on how to fix this?
/tmp # esxcli --version
Script 'esxcli' version: 5.5.0
/tmp #
/tmp # esxcli software vib install --no-sig-check -v /tmp/vmware-esx-vmd
kops-1.0.beta.vib
Installation Result
Message: Operation finished successfully.
Reboot Required: false
VIBs Installed: VMWare_bootbank_esx-vmdkops-service_1.0.0-0.0.1
VIBs Removed:
VIBs Skipped:
/tmp #
/tmp #
/tmp # /usr/lib/vmware/vmdkops/bin/vmdkops_admin.py ls
Traceback (most recent call last):
File "/usr/lib/vmware/vmdkops/bin/vmdkops_admin.py", line 18, in
import argparse
ImportError: No module named argparse
/tmp #

Thanks for reporting this one.
Per Readme.md we tested on ESX 6.0 and newer.
It looks like you are running 5.5. It does not have some Python modules (argsparse is one of them).
But I agree the behavior is wrong, we should either block VIB install or provide a clear failure message.
//CC @pdhamdhere

An update - there is more in the code dependent on ESX 6.0, so we currently do not plan to support ESX 5.5
@kerneltime  - we need to block install on pre-6.0 ESX using  in VIB XML.

Fixed with #674


Eventbrite::Venue.retrieve('venue_id') doesn't work properly

Trying to get details about an event's venue but I keep getting the following error
[8] pry(main)> Eventbrite::Venue.retrieve('venue_id')
NameError: uninitialized constant Eventbrite::Venue
from (pry):8:in `__pry__'```

It seems it's because the rubygems version is behind. Using master for now


Fix unsubscribe URL for hackathons reminder email

Right now the "unsubscribe URL" is just an Airtable form that people fill out and then they are manually marked "unsubscribed" in Airtable.

Closed by https://github.com/hackclub/hackathons-backend


Selected bar onPress

Is it possible to set a different color on the bar chart that was pressed? So something like this:

Would I have to remap the chart data and change the background color of that index or is there a better way, to not rerender the whole component with almost the same data?
Thanks :)

Closing this issue, since setting frontColor to the data is enough when onPress happens.
Quickly testing, this works:
          onPress={(event: any) => {
              setData(
                data.map((item: any) => {
                  let frontColor = '#000';

                  if (item.value === event.value && item.label === event.label && item.date === event.date) {
                    frontColor = '#fff';
                  }

                  return { ...item, frontColor };
                }),
              );
            }}


extra value missed on Response data

the function assureResponse in DioMixin class does not convert extra value to a new response when response is! response<T>

Have been fixed in latest version.


More spacing after icons

Icons could use another space afterwards.

OS: Arch
Font: Iosevka, size 15
Other installed fonts: ttf-font-awesome
Terminal: Alacritty

Workaround is to modify $HOME/.config/yazi/theme.toml to add a space after every icon "manually".
[icons]

"Desktop/"     = " "
"Documents/"   = " "
"Downloads/"   = " "
"Pictures/"    = " "
"Music/"       = " "
"Movies/"      = " "
"Videos/"      = " "
"Public/"      = " "
"Library/"     = " "
"Development/" = " "
".config/"     = " "

# Git
".git/"          = " "
".gitignore"     = " "
".gitmodules"    = " "
".gitattributes" = " "

# Dotfiles
".DS_Store"    = " "
".bashrc"      = " "
".bashprofile" = " "
".zshrc"       = " "
".zshenv"      = " "
".zprofile"    = " "
".vimrc"       = " "

# Text
"*.txt" = " "
"*.md"  = " "

# Archives
"*.zip" = " "
"*.tar" = " "
"*.gz"  = " "
"*.7z"  = " "

# Audio
"*.mp3"  = ""
"*.flac" = ""
"*.wav"  = ""

# Movies
"*.mp4" = " "
"*.mkv" = " "
"*.avi" = " "
"*.mov" = " "

# Images
"*.jpg"  = " "
"*.jpeg" = " "
"*.png"  = " "
"*.gif"  = " "
"*.webp" = " "
"*.avif" = " "
"*.bmp"  = " "
"*.ico"  = " "
"*.svg"  = " "

# Programming
"*.c"     = " "
"*.cpp"   = " "
"*.h"     = " "
"*.hpp"   = " "
"*.rs"    = " "
"*.go"    = " "
"*.py"    = " "
"*.js"    = " "
"*.ts"    = " "
"*.tsx"   = " "
"*.jsx"   = " "
"*.rb"    = " "
"*.php"   = " "
"*.java"  = " "
"*.sh"    = " "
"*.fish"  = " "
"*.swift" = " "
"*.vim"   = " "
"*.lua"   = " "
"*.html"  = " "
"*.css"   = " "
"*.scss"  = " "
"*.json"  = " "
"*.toml"  = " "
"*.yml"   = " "
"*.yaml"  = " "
"*.ini"   = " "
"*.conf"  = " "

# Default
"*"  = " "
"*/" = " "

Is this because of the font? They shouldn't be so crowded imho

Yes, looks like the issue is only with Iosevka which is more horizontally squished compared to, e.g., Roboto Mono.

Where can I download this font? I'd like to try replicating it.

ttc-iosevka should be sufficient. I also have ttf-iosevka-nerd, but it doesn't look necessary to reproduce.

Hey, I've added a new Folder:icon() API. You can now create a simple UI plugin and apply your styles within it:
-- ~/.config/yazi/ui.lua
function Folder:icon(file) return ui.Span("  " .. file:icon() .. " ") end

and then import it:
# ~/.config/yazi/yazi.toml
[plugins]
preload = [
    "~/.config/yazi/ui.lua"
]

Works for me.


add Anmol to Contributors list

Hi  @goela00, I'm quite elated about your pull request. I wanna evolve this project to addresses various problems faced by first-time contributors. I'd love to learn about your journey in open source community, the problems, pain points you had etc.
Could you explain how you felt when you went through the tutorial, made a pull request and learned that I merged it?
We’ve recently added social share  to our web app. Could you please go to https://roshanjossey.github.io/first-contributions/#social-share and share your first contribution to open source?
Also, check out projects with easy issues while you’re there.

I had no idea how to contribute to open source projects before this. I knew the basics of Git but even after countless blog posts on open source contribution I was never able to do it. Then I stumbled upon your repository and loved that you encouraged to just DO it instead of reading countless terminal commands.
Thanks a lot for this! This morning I saw you merged the pull request and I felt amazing. I hope to contribute to some good open source projects in the future.
One problem I still face is that I don't feel confident enough that my contribution will be helpful to a project in any way or form(I'm still just a beginner). I've made some small projects but what will I contribute to this wide community is a question that still eludes me.

I’d urge you to continue contributing to other open source projects.
We also have a slack team to help/mentor people trying to contribute to open source projects.
You can join the team by going to https://goo.gl/PM1Jdh


feat(share/getter) Add support for Non-inclusion proofs

Overview
This PR implements support for non-inclusion proof for getters and shrex protocol.
Requires https://github.com/celestiaorg/celestia-node/pull/2242 to be merged first

Codecov Report

Merging #2256 (2046250) into main (403eb61) will increase coverage by 0.40%.
The diff coverage is 57.84%.

@@            Coverage Diff             @@
##             main    #2256      +/-   ##
==========================================
+ Coverage   50.44%   50.85%   +0.40%
==========================================
  Files         155      156       +1
  Lines        9826     9873      +47
==========================================
+ Hits         4957     5021      +64
+ Misses       4433     4413      -20
- Partials      436      439       +3

Impacted Files
Coverage Δ

nodebuilder/node.go
58.57% <ø> (ø)

share/getter.go
0.00% <ø> (ø)

share/ipld/namespace_data.go
0.00% <0.00%> (ø)

share/p2p/shrexnd/client.go
49.65% <47.82%> (+0.86%)
:arrow_up:

share/getters/store.go
82.66% <50.00%> (+0.38%)
:arrow_up:

libs/pidstore/pidstore.go
60.00% <60.00%> (ø)

share/p2p/shrexnd/server.go
52.25% <61.53%> (+3.55%)
:arrow_up:

cmd/celestia/rpc.go
16.16% <62.06%> (+6.16%)
:arrow_up:

share/getters/shrex.go
66.87% <66.66%> (+2.24%)
:arrow_up:

share/getters/utils.go
77.77% <100.00%> (+4.16%)
:arrow_up:

... and 4 files with indirect coverage changes


Improve Google Analytics inclusion

It's a bit janky right now. The flow for setting it up needs to be better and the interface for actually displaying the results in view layer. Probably needs a breakdown of tickets, but here's a stub.

closed with c554cf67d929596296ac70f42e1f4316e53df432
I'll create a new issue for improving the setup flow.


TS-78 NetworkHttp now uses NetworkRoutes - Generated open api lib

Removed open api generated code. Added new generated lib dependency.
Updated typescript compiler to fix a lib problem after a "npm install"
This PR uses the brand new open api client generator
https://github.com/NEMStudios/nem2-open-api-generator
and the generated library
https://www.npmjs.com/package/nem2-sdk-openapi-typescript-node-client

Pull Request Test Coverage Report for Build 813

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 811:
0.0%

Covered Lines:
10

Relevant Lines:
10

💛  - Coveralls

On another node, it was pointed out by the catapult-rest team that the /network route should not be used to determine the type of network. This is because the name field of the response of  /network could be anything ; it doesn't have a rule set about returning only mijin, mijinTest, public or publicTest; it can be anything.
While /node/info in fact can only return one of the four values.
Note that /node/info may need to be repositioned in the library as its not a Network route (could be in NodeHttp).

@dgarcia360

@evias
Thanks for the comment.
i) What was the library removed 3 months ago? This library is just an NPM package of the generated ts/js files from using swagger/open API cli.
ii) How are these generated files made "browser ready"? are they manually modified?
iii) Open API spec was changed for this, now the possible values are enum values, no free text. In order to complete the task, I needed to regenerate the code. I am not happy with pushing the generated code. So I included the technical improvement in this task. Many more open API changes are in the pipeline, having the nem2-open-api-generator will give us generated clients for free when we are working for example in another SDK like the java. The nem2-open-api-generator is generating libs for f2 based on the now split open API spec. This will be true if we need to generate clients for other languages like c#, python, etc. I have changed the PR title.

If the generated code is committed into the main project it will make it client dependent. Having a separate module means that you can change that module. In Java, we have 2 generated clients, okhttp (android focus) and vertx (server focus).  The generator use is "typescript node", the same used in the committed code. The generated code was done by a dev in a machine. The process was not documented. Now the script and tools to generate and publish the code are in Travis. You know what is used to generate the clients and update if necessary.

Are you forking the SDK repo to have different types of builds? nem2-open-api-generator can easily generate different types of clients (https://openapi-generator.tech/docs/generators.html).

Note from rest:
If the text is actually free text, the open API needs to be changed back to string and we would need to use another way of retrieving the network type. I would like to keep a one to one mapping between the repositories and routes. Network Repository should talk to the Network Route, Node Repository should be the one talking to the Node Route. NodeRepository should we the one returning the network type, Network Repository should return the name if it's free text. (This applies to Java too)

@evias https://github.com/nemtech/nem2-sdk-typescript-javascript/issues/287#issuecomment-539019952

Interesting @dgarcia360 thanks for pointing out ;
@rg911 did the Network sdk repository implement this change :

As a potential solution, NetworkHttp.getNetworkType() could parse the version property from the first block header.

That would keep the current structure and make /network good to retrieve the network identifier (which is still not the name produced by rest because rest reads that from configuration file, not from network.)

@fboucquez on point 2) it is not correct:

https://github.com/nemtech/catapult-rest/blob/master/rest/src/routes/networkRoutes.js#L25
https://github.com/nemtech/catapult-rest/blob/master/rest/resources/rest.json#L2

This is where /network reads the nameand there is no formatting about it or check that it indeed holds one of the 4 values.

@fboucquez adding to point 2) Currently our client applications use the single NPM library that is available but for react-native for example, a polyfill is provided for http replacements like :
http: require.resolve('stream-http'),
https: require.resolve('https-browserify'),

Now with what was introduced in nem2-qr-library, the npm run build.browser that would be taken care of by Webpack directly, have a look here:

https://github.com/nemfoundation/nem2-qr-library/blob/master/package.json#L50
https://github.com/nemfoundation/nem2-qr-library/blob/master/webpack.config.js

One note about this is that you have to name the sdk for the browser build ..
Discussions can be held about this but the fact that client integrations don't each need to polyfill would be helpful, so the proposition would be to implement the same for the SDK, but extending the following line: https://github.com/nemfoundation/nem2-qr-library/blob/master/webpack.config.js#L46 to use pre-defined polyfills.
That can always be changed by integrators of the SDK, by changing the webpack.config.js file for their specific build needs.
My concern with re-introducing multiple packages from which to track several parts of the SDK is that the nem2-library package did end up dead and introduced a lot of complexity to maintain the SDK.
--
Introducing a nem2-openapi-node-client will mean that client integrations need 2 packages built for browser, and they need the correct mix for the build to be working.
This is definitely an issue with SDKs that has been attacked on Java but I am unsure whether it makes sense to define multiple packages for different http implementations.
Ultimately, the http implementation should be pluggable and should not require any kind of dependency changes.

I've rolled back the network/node endpoint change. NetworkHttp uses the node route to get the network type. I've added NetworkInfo endpoint so the user can read the name and description from rest.

Hi @evias, was your team able to try the new library?
@dgarcia360 and I rolled back the enum to free text and we are using the node routes to get the network type. This pr should we merged for f2. The open api code should be handled by adding the library. Npm package for f2 is https://www.npmjs.com/package/nem2-sdk-openapi-typescript-node-client

This PR is stale now. It has been superseded by https://github.com/nemtech/nem2-sdk-typescript-javascript/pull/409
@evias, could you have a look at this? I'll close this PR.


base-image 2.30.1: node version does not correspond to version specified in Dockerfile

Hi, it seems node v18 is still the default version in the image, despite
RUN install-tool node 20.16.0

https://github.com/renovatebot/base-image/blob/main/Dockerfile#L16

I did the following:
$ docker run -it ghcr.io/renovatebot/base-image:2.30.1
root@e9d0db24becb:/# node --version
v18.20.4
root@e9d0db24becb:/# ls /opt/containerbase/tools/node
18.20.4

Sorry, I got confused with how the images are published


Replace require() test with non-lazy dlopen() test

A thought. Currently, post-download, we do this test:
https://github.com/prebuild/prebuild-install/blob/a5ff6d3899af47428ef19c8212d0d49a0c4bb447/download.js#L101-L105
As I understand it, this resolves symbols lazily and may thus skip potentially conflicting or missing symbols. Could we maybe do the following test instead? Would that have merit?
const constants = require('os').constants.dlopen
process.dlopen(module, 'foo.node', constants.RTLD_NOW)

@lovell

Interesting, I guess this might fail if a weak reference to an external symbol has been intentionally made via something like __attribute__((weak)).
https://en.wikipedia.org/wiki/Weak_symbol

Reading man ld.so(8), weak symbols don't apply to the dynamic linker:

By default, when searching shared libraries to resolve a symbol reference, the dynamic linker will resolve to the first definition it finds.
Old glibc versions (before 2.2), provided a different behavior: if the linker found a symbol that was weak, it would remember that symbol and keep searching in the remaining shared libraries.  If it subsequently found a strong definition of the same symbol, then it would instead use that defi‐
nition.  (If no further symbol was found, then the dynamic linker would use the weak symbol that it initially found.)
The old glibc behavior was nonstandard.  (Standard practice is that the distinction between weak and strong symbols should have effect only at static link time.)  In glibc 2.2, the dynamic linker was modified to provide the current behavior (which was the behavior that was provided by most other implementations at that time).

Mac is probably a different story.

That's good, ignore my idle (weak?) thoughts.
It looks like os.constants.dlopen was added in Node.js 10 so we'd need to fallback to the existing require check, or wait until a semver major increment next year that drops Node.js 8 support.

I'm not sure exactly in which cases we'd benefit from RTLD_NOW. Perhaps when attempting to load a glibc prebuild on alpine, for example? Need to test that.

Probably not worth the effort and breakage.


allow to specify arguments with spaces that get passed to the tested script

i think this is the same as #67

@matthandlersux: No, but this probably should be explained better. I changed this issue description, hope it's clearer now.


fix: normalize API routes using Rust path entities

In the current main  version, file paths are not normalized properlies as APIs. This is causing inconsistent behaviors in different environments:

In unix, the API path includes the root folder the CLI receives as argument. For example, for wws ./examples/js-basic, the URL of the handler.js should be /handler. Note that  ./examples/js-basic is the local folder to read the files, not a prefix for the final URL. However, the HTTP endpoint it generates is `/examples/js-basic/handler.
In windows, it just doesn't work. The handler.js is not accessible (See [1]).

This is mainly caused by converting file paths to string and apply transformations later. Since paths may include special components such as .  and ./, applying operations like replace can have different outcomes depending on the environment. This also causes inconsistent behaviors when a final backslash is added or not to the CLI argument.
In this PR, I changed that implementation to run all required transformations directly on the path. Instead of replacing and subtracting from a converted string, I iterate over the components to remove any special entity and keep only the Normal ones. Finally, I convert them to a String to be used as the API path.
I tested the current changes on both Windows and Mac (Unix) and they work great:

[1]

It closes #30

I found an error when testing subfolders in Windows. It's using the \ separator and that's causing actix not to define the route properly.


Hide tree heading when cmd has no stdout/stderr

I have a use case that I haven't been able to figure out how to implement. I'd like to have a global command unpushed that goes through all my trees and prints out branch names for branches that aren't pushed upstream. I can list unpushed branches fine, but right now every tree gets a heading even if it doesn't have any unpushed branches. I'd like to be able to hide the headings for trees that don't have any unpushed branches. So for example:
# dev/advent-of-code
830b34d (incomplete-2021-19) Incomplete 2021-19
# dev/bitcurry-provisioning
# dev/cookiecutter-rust-bin
...

dev/advent-of-code has an unpushed branch so its heading should be listed, but dev/bitcurry-provisioning doesn't have any unpushed branches so I'd like to prevent having the heading printed.
If there's not a way to do this, no big deal, but I figured I'd ask! This is a really great tool by the way!

It'd be tough from the garden side because garden doesn't don't do any capturing of stdout/stderr -- the terminal stays connected so we don't the output currently. One upside of this approach is that tools that detect color by checking whether a terminal is attached will detect a terminal and use colored output.
One thing you can do is use the garden -q (--quiet) option to turn off the headings completely, and then the command could do something like this to add its own heading, perhaps?
commands:
  unpushed: |
    branches=$(get unpushed branches output)
    if test -n "$branches"
    then
        echo "# ${TREE_NAME}"
        echo "$branches"
    fi

Thanks! That got me pointed me in the right direction:
if test -n "$(git unpushed)"; then
  echo "# ${TREE_NAME}"
  echo "  $(git unpushed --color=always)"
fi

One thing I noticed is that trying to use a variable didn't work because garden is doing variable expansion before running the command. So the following case:
branches=$(git unpushed)
echo "$branches"

won't work because echo "$branches" gets expanded to echo "" before running in the shell. Is this maybe a bug?

Indeed -- there is a syntax clash between the shellexpand syntax we use for expansions and the $variable syntax used in shells.
I'm not 100% sure whether this should be considered a bug although it could be better. There is a supported way to do it currently, though.
The current method to make this work is to use echo "$$branches".
Double-$ ($$) escapes $ so that a single literal $ makes its way into the evaluated output.
This does mean that the convention PID shell variable $$ would need to be written out as $$$$ in commands.
If this is not good enough, what could we do instead?
Option (X): Alternatives to this current behavior would be to change shellexpand so that we can specify the expansion syntax, eg. maybe we could use a handlebars-like {{var}} syntax instead of ${var}. This would be a breaking change, and we probably wouldn't want to switch to {{var}}, so I'm not really considering this as a viable option at this time. I also slightly suspect that shellexpand may not take such a change upstream.
Option (Y): Another alternative would be that we could change shellexpand so that it ignores the bare $var syntax and only processes the braced ${var} syntax. This is also a breaking change, but perhaps a smaller one because it would only affect commands and expressions that currently use the $var syntax.
I'd like to hear your thoughts on whether Option (Y) is worth exploring. It's slightly contingent on the upstream shellexpand project accepting an option to disable the bare $var syntax, though.
That said, even if we changed shellexpand then the syntax clash would still exist because ${var} is also a valid shell expression and we can only pass it through by using $${var}, so I wonder whether the existing behavior is good enough.
Is another Option (Z) alternative to leave undefined variables as-is and not expand them? I believe we currently expand them to empty strings, akin to what a shell does. Evaluating to an empty string has some advantages because it ensures that there's no ambiguity between garden variables and shell variables. The simple answer is, "shell variables require escaping", but I'm not sure if that's too rigid of a stance. Option (Z) seems fuzzier / less precise, so I'd like to hear your opinions.
If you're comfortable using $$ escaping then I'd be happy accepting that as the supported/official way to handle it going forward. The upside is that we won't have to make a breaking change and it is relatively simple to understand with no ambiguity about whether something is a garden variable or a shell variable.
This is definitely something we should decide before 1.0.
For now I'll document the $-escaping syntax so that it's easier to discover. Let me know what you think.

tangent: another way to make this work would be to move the command expansion into a shell expression variable:
variables:
  branches: $ git unpushed

and then "${branches}" can be used in the shell snippet without having to worry about the syntax. This isn't the answer since it side-steps the issue but I'm mentioning it in case it's helpful.

I think I've come up with a variant on Option (Y) that seems really simple and won't require changing shellexpand at all. This is currently my personal favorite, but I don't know if it's too subtle.

Option (Y2): Make it so that $var is treated like a shell variable and only the braced ${var} variables are subject to expansion by pre-processing the values we send to shellexpand.

The difference between Option (Y) and Option (Y2) is that we don't need to change shellexpand to do it. We only need to perform a small string transformation before sending the values through the shellexpand machinery.
The transformation is to do the $$ escaping automatically for bare $var values. echo ${foo} $bar would become echo ${foo} $$bar automatically before handing it over to the shellexpand machinery.
A naive (slow) approach is to first replace all occurrences of $ with $$ so that we get an intermediate echo $${foo} $$foo value and then replace $${ with ${ in a 2nd pass resulting in echo ${foo} $$bar.
A more direct transformation would be do a regex(?) replacement that transforms echo ${foo} $bar into echo ${foo} $$bar in a single pass. This should be pretty straightforward.
The reason this seems better is that it lets us have the best of both worlds. We can write $shell scripts the same way we'd naturally write them and garden will only be hijacking the ${var} syntax and nothing more. Users won't have to remember to $$escape things, either.
I kinda like this idea the best. It is a breaking change, though, even though we never documented that $$ can escape things.
If we think this is a good idea I can make that change and then consider this the final behavior that we'll support going forward. It feels like the right answer to me, at least.
@grymoire7 I'd like to get your thoughts on this topic as well. Definitely let me know if this is something that would break any of your existing garden files or if you think the current behavior is better, for example.
If it would break your existing files, but we still like the idea of changing the behavior, then I can build in a configuration option to restore the current behavior. Hopefully no one's run into this yet and we can just make the change without needing a config setting, though.

@davvid I haven't rolled out garden to our entire team yet (still beta testing with the deploy coordinator on our initial use case), so we can easily pivot syntax at this point if needed.
One thing that concerns me about Y2 are cases where the braces are required to avoid ambiguity.  For example, with "${foo}bar" it's not possible to use $foo and get the expected results.  This and things like array expansion (${array[37]}), etc. might be an issue if we don't want to break shell syntax, yes?
If that's correct, I think some kind of escaping solution might make more sense.  Also, if a user wants to use $$ to get the process id, would that just be an unsupported bit of shell syntax (seems like a minor loss, if so)?

Good point about ${array[...]} syntax.
As a proof of concept I implemented Y2 in #12. The braced ${var} is already reserved for garden variables so it's a pretty straightforward incremental improvement, but it might make the $ escaping more difficult for the less common${array[1]} kind of syntax.
I'll try testing out that syntax to see if there's a simple escape hatch we can use for ${array[...]} as well.

Testing a bit with #12 I'm going to try and extend it so that we can use $${var} so that the shell sees ${var} as as escape hatch. It doesn't handle that currently, but the the point about the ${array[@]:0:1} syntax makes me think that we should provide for it by allowing $${array[@]:0:1}, for example, as the escaping mechanism.

That was pretty easy -- thanks for pointing that out. #12  now has support for using $${var} as an escape mechanism. The double-$ braced variable makes it so that the literal ${var} makes its way into the shell command.
This is now supported in #12
commands:
    example: |
        values=(one two three)
        echo $${values[@]:0:1}

Thanks for your quick feedback. I think that might be the last thing we tweak before tagging the final v0.5.0. Good stuff.

Wow, thanks for the fast turnaround on this! I think what you came up with is a good compromise and your doc updates in #12 makes things very clear :+1:.

Thanks Nick, I think what we've got in #12 is just about ready to ship, so I'll plan to tag v0.5.0 final in the next day or so.


Add missing hash, eql?, == to various node classes

Some of the nodes classes are missing either one or many of the common comparison methods #hash, #eql? and #==.
This makes comparision and working with the ast sometimes painful, as equality or operations likes array differences (which uses a hash behind the scene) produces unexpected results.
A test has been added that ensures that every descendants of Node:

have all 3 methods
that all 3 methods were defined from the same class
that the class defining all 3 is also a descendant of Node, to avoid the default ones that rely on identity only

These objects aren't generally meant to be used as hash keys. Can you give an example of where this is actually causing an issue in Rails or another consumer of Arel?

Well, most of the nodes already define those methods, so i'm assuming there is already some kind of use case.
If you have an array of nodes, and you want to use array methods like #delete, you need equality to work correctly. If you want to use #- or #uniq, then you need to have the hash and eql? since that's what ruby uses behind the scene. So this isn't just about being used as hash key directly.
An explicit use case would be to be able to remove duplicate nodes from an array of nodes.

I suppose there's enough places already defining these to justify it.


Release/v1.1.0

New updates:

Fix invalid receipts error with rest function call
Tweak transfer gc rule (with new min_gc_num_siblings_deleted = 10)
Add dryrun json rpc API (ain_sendSignedTransactionDryrun) for gas fee estimation
Improve UX for blockchain tools (avoid bandage file info logging and ain_blockchain_data dir creation)

Thanks for the review! Now merging.. @woomurf


"QuoteSummaryStore" not found with docker

I've been using yfinance in docker environment successfully, however recently running into issue.
This happens when calling yfinance.Ticker('IDTL.L').info (or any other non-US tickers) even after applying the fix #179 and #354.
After digging into the issue, it appears the root cause is
html = _requests.get(url=url, proxies=proxy).text in utils.py, where url is 'https://finance.yahoo.com/quote/IDTL.L'.
There is a check later on to see if QuoteSummaryStore exists in html, and this never passes in a docker environment. This works fine in a local environment without docker.
Does anyone know if the page source or the behaviour of url has changed recently?
Thanks for your help! Let me know if I made obvious mistakes or should post more information.
Cheers

Dockerfile
FROM python:3.8.2-slim-buster

WORKDIR /usr/src/app

RUN pip install yfinance lxml

COPY . .

CMD ["python"]

yfinance doesn't scrape QuoteSummaryStore anymore


pls advise, when i run install_cn.ps1, get this error message

Installing collected packages: tqdm, requests, protobuf
Attempting uninstall: tqdm
Found existing installation: tqdm 4.65.0
Uninstalling tqdm-4.65.0:
Successfully uninstalled tqdm-4.65.0
Attempting uninstall: requests
Found existing installation: requests 2.28.2
Uninstalling requests-2.28.2:
Successfully uninstalled requests-2.28.2
Attempting uninstall: protobuf
Found existing installation: protobuf 3.20.3
Uninstalling protobuf-3.20.3:
Successfully uninstalled protobuf-3.20.3
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
openxlab 0.0.32 requires requests~=2.28.2, but you have requests 2.31.0 which is incompatible.
openxlab 0.0.32 requires tqdm~=4.65.0, but you have tqdm 4.66.1 which is incompatible.
mediapipe 0.10.9 requires protobuf<4,>=3.11, but you have protobuf 4.24.2 which is incompatible.
should i pip install requests==2.28.2 tqdm==4.65.0 protobuf<4,>=3.11 as the error message promted?

it seems some conflicts,just uninstall openxlab is OK


Difference spotted regarding input feature dimension different in the code and paper

Hi,
Thank you for your contribution.
When I dive deeper into the source code, I found difference between this implementation and the paper.
According to the paper, lane node feature included (x, y, theta, I_stop_line, I_ped_crossing), which has the dimension of 5. At the same time, the trajectory of agents mentioned in the paper should have the dimension of 6.

However, in get_map_representation in nuScenes_graphs.py, the dimension of each lane node feature shows 6. Meanwhile, the representation of each surrounding agent trajectory have dimension of 5 instead of 6. What is the reason for this change?
Thank you.

hi, cause in code author adds one new dim of has_successor feature to lane_node_feats tensor, corresponding to lane_node_feats = self.add_boundary_flag(e_succ, lane_node_feats) in nuScenes_graphs.py. you might compare shape change of lane_node_feats array.


Update CI for backend

Update default branch name
Clean unused job settings
Fix cache step for core PLTs
Remove deprecated option plt_file

Pull Request Test Coverage Report for Build 73bb2442a62a6257bcaaf271eb3367148cda8c62-PR-188

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+82.8%) to 82.824%

Totals

Change from base Build<PHONE_NUMBER>:
82.8%

Covered Lines:
651

Relevant Lines:
786

💛  - Coveralls