Feat / Add Uniswap on chains BSC, Avalanche, and Celo

Before submitting this PR, please make sure:

[X] Your code builds clean without any errors or warnings
[X] You are using approved title ("feat/", "fix/", "docs/", "refactor/")

A description of the changes proposed in the pull request:

Adds Uniswap support for Binance Smart Chain, Avalanche, and Celo, refactored from community PRs
Fixes tests

Tests performed by the developer:
Tips for QA testing:

@nikspz this PR should be ready for testing. i'll incorporate the Avalanche Uniswap PR into this one as well, so that you can test both.

@fengtality @harjas27 @isreallee82
Test performed:

Cloned and installed gwPR342 + Client PR https://github.com/hummingbot/hummingbot/pull/7073
connected uniswap_avalanche_avalanche, uniswap_celo_celo, uniswap_bsc_mainnet successfully
checked gateway balance for uniswap_avalanche_avalanche, uniswap_celo_celo, uniswap_bsc_mainnet successfully
added connector-tokens WAVAX,USDC to uniswap_avalanche_avalanche successfully
added connector-tokens WBNB,USDT to uniswap_bsc_mainnet successfully
added connector-tokens to uniswap_celo_celo successfully
Curl:

uniswap_bsc_mainnet

wallet/add: ok
amm/price: ok
chain/approve: ok
amm/trade: Failed, on default and 2 different public nodes

uniswap_avalanche_avalanche

wallet/add: ok
amm/price: ok
amm/trade: Failed

uniswap_celo_celo

wallet/add: ok
amm/price: ok
amm/trade: Failed

Avalanche trade failed:
{
  "message": "Unknown error.",
  "httpErrorCode": 503,
  "errorCode": 1099,
  "stack": "Error: Unsupported trade object\n    at Function.encodeSwaps (/home/hummingbot/gwbsc/node_modules/@uniswap/router-sdk/dist/router-sdk.cjs.development.js:1992:15)\n    at Function.swapCallParameters (/home/hummingbot/gwbsc/node_modules/@uniswap/router-sdk/dist/router-sdk.cjs.development.js:2023:44)\n    at Uniswap.<anonymous> (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:227:62)\n    at Generator.next (<anonymous>)\n    at /home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:8:71\n    at new Promise (<anonymous>)\n    at __awaiter (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:4:12)\n    at Uniswap.executeTrade (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:226:16)\n    at /home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.controllers.js:132:41\n    at Generator.next (<anonymous>)"
}

Celo trade failed:
{
  "message": "Unknown error.",
  "httpErrorCode": 503,
  "errorCode": 1099,
  "stack": "Error: Unsupported trade object\n    at Function.encodeSwaps (/home/hummingbot/gwbsc/node_modules/@uniswap/router-sdk/dist/router-sdk.cjs.development.js:1992:15)\n    at Function.swapCallParameters (/home/hummingbot/gwbsc/node_modules/@uniswap/router-sdk/dist/router-sdk.cjs.development.js:2023:44)\n    at Uniswap.<anonymous> (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:227:62)\n    at Generator.next (<anonymous>)\n    at /home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:8:71\n    at new Promise (<anonymous>)\n    at __awaiter (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:4:12)\n    at Uniswap.executeTrade (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:226:16)\n    at /home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.controllers.js:132:41\n    at Generator.next (<anonymous>)"
}

BSC trade failed:
{
  "message": "Unknown error.",
  "httpErrorCode": 503,
  "errorCode": 1099,
  "stack": "Error: Unsupported trade object\n    at Function.encodeSwaps (/home/hummingbot/gwbsc/node_modules/@uniswap/router-sdk/dist/router-sdk.cjs.development.js:1992:15)\n    at Function.swapCallParameters (/home/hummingbot/gwbsc/node_modules/@uniswap/router-sdk/dist/router-sdk.cjs.development.js:2023:44)\n    at Uniswap.<anonymous> (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:227:62)\n    at Generator.next (<anonymous>)\n    at /home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:8:71\n    at new Promise (<anonymous>)\n    at __awaiter (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:4:12)\n    at Uniswap.executeTrade (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.js:226:16)\n    at /home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.controllers.js:132:41\n    at Generator.next (<anonymous>)"
}

@nikspz Can you test executing a Uniswap swap on development branch on:

Polygon Mainnet
Ethereum Arbitrum
Ethereum Optimism

I think this swaps issue exists on other networks on development branch as well. Still investigating.

Development branch CLient + dev branch gateway:
(uniswap) Arbitrum:

amm/price: ok
amm/ trade: ok

(uniswap) Polygon:

amm/ trade: ok

(uniswap) Optimism

amm/ trade: ok

trades:
https://arbiscan.io/tx/0xdfca5bbceb780424e98462ae361ffaa5c2837de642843552d0f17ec20340be2e
https://optimistic.etherscan.io/tx/0xc35dcfe900d85a599685e9b04b67f921826aafd2f002266080a8ad049d9f0ba1
https://polygonscan.com/tx/0xc347c427eab9786b15955a1c2584acf5bc5d357ede3f2a437287ddcd90341b85
arbitrum

polygon

optimism

The issue is that upgrading Uniswap swap order router above 3 breaks swaps on all Uniswap connectors.
However, not upgrading it results in the following error when fetching price on BSC:
"stack": "Error: No address for Uniswap Multicall Contract on chain id: 56\n    at new UniswapMulticallProvider (/Users/feng/gateway/node_modules/@uniswap/smart-order-router/build/main/providers/multicall-uniswap-provider.js:30:19)\n    at new AlphaRouter (/Users/feng/gateway/node_modules/@uniswap/smart-order-router/build/main/routers/alpha-router/alpha-router.js:47:97)\n    at new Uniswap (/Users/feng/gateway/dist/src/connectors/uniswap/uniswap.js:64:33)\n    at Uniswap.getInstance (/Users/feng/gateway/dist/src/connectors/uniswap/uniswap.js:90:51)\n    at /Users/feng/gateway/dist/src/services/connection-manager.js:134:51\n    at Generator.next (<anonymous>)\n    at /Users/feng/gateway/dist/src/services/connection-manager.js:8:71\n    at new Promise (<anonymous>)\n    at __awaiter (/Users/feng/gateway/dist/src/services/connection-manager.js:4:12)\n    at getConnector (/Users/feng/gateway/dist/src/services/connection-manager.js:131:12)"

I think this PR needs more work to figure out how to add support for Uniswap on other chains. Perhaps upgrading from using Swap Router 2 to Universal Router is needed.

@nikspz I added a hacky fix, so I think Uniswap swaps should now work on BSC, Avalanche, and Celo.

0cac4ea

arbitrum

amm/price: ok
amm/trade: ok

BSC mainnet

amm/price: ok
amm/trade: ok

Avalanche

amm/price: ok
amm/trade: ok

Celo

amm/price: ok
amm/trade: ok

BSC mainnet
price

trade

https://bscscan.com/tx/0xd5305cea3199544ab3d5f8e392f86cbd4f3e9ad3106cd5e14fff64bccdff4896
avalanche_avalanche
price

trade
https://snowtrace.io/tx/0xdda13d5aa26cfe566e5918fa2218a6a0957d1f0c63a33c3fd8536f051d04ce06
celo
price

trade
https://celoscan.io/tx/0x6403f92cbb4f407c5b2be3f3b2026e36c2b6d5c88a416f795e4ca767e4ac891b
https://celoscan.io/tx/0xa8824f6420fd2df84d7fc34bcb9407c636f50ddeb58811a427dffe25fb773f5d

Failed to add uniswapLP for BSC mainnet, avalanche avalanche, connector (works for Celo)
Steps:

start the client with gateway set up
connect uniswapLP avalanche
failed to connect for connected and for new wallet

2024-07-29 19:14:20,877 - 145951 - hummingbot.core.gateway.gateway_http_client - WARNING - Call to https://localhost:15888/chain/balances failed. See logs for more details.
2024-07-29 19:14:20,878 - 145951 - hummingbot.core.utils.async_utils - ERROR - Unhandled error in background task: Error on POST https://localhost:15888/chain/balances Error: {'message': 'Unknown error.', 'httpErrorCode': 503, 'errorCode': 1099, 'stack': 'Error: No address for Uniswap Multicall Contract on chain id: 43114\n    at new UniswapMulticallProvider (/home/hummingbot/gwbsc/node_modules/@uniswap/smart-order-router/build/main/providers/multicall-uniswap-provider.js:30:19)\n    at new AlphaRouter (/home/hummingbot/gwbsc/node_modules/@uniswap/smart-order-router/build/main/routers/alpha-router/alpha-router.js:47:97)\n    at new UniswapLPHelper (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.lp.helper.js:76:33)\n    at new UniswapLP (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.lp.js:44:9)\n    at UniswapLP.getInstance (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.lp.js:52:53)\n    at /home/hummingbot/gwbsc/dist/src/services/connection-manager.js:137:56\n    at Generator.next (<anonymous>)\n    at /home/hummingbot/gwbsc/dist/src/services/connection-manager.js:8:71\n    at new Promise (<anonymous>)\n    at __awaiter (/home/hummingbot/gwbsc/dist/src/services/connection-manager.js:4:12)'}
Traceback (most recent call last):
  File "/home/hummingbot/dev2/hummingbot/core/utils/async_utils.py", line 9, in safe_wrapper
    return await c
  File "/home/hummingbot/dev2/hummingbot/client/command/gateway_command.py", line 369, in _gateway_connect
    balances: Dict[str, Any] = await self._get_gateway_instance().get_balances(
  File "/home/hummingbot/dev2/hummingbot/core/gateway/gateway_http_client.py", line 293, in get_balances
    return await self.api_request(
  File "/home/hummingbot/dev2/hummingbot/core/gateway/gateway_http_client.py", line 222, in api_request
    raise e
  File "/home/hummingbot/dev2/hummingbot/core/gateway/gateway_http_client.py", line 210, in api_request
    raise ValueError(f"Error on {method.upper()} {url} Error: {parsed_response}")
ValueError: Error on POST https://localhost:15888/chain/balances Error: {'message': 'Unknown error.', 'httpErrorCode': 503, 'errorCode': 1099, 'stack': 'Error: No address for Uniswap Multicall Contract on chain id: 43114\n    at new UniswapMulticallProvider (/home/hummingbot/gwbsc/node_modules/@uniswap/smart-order-router/build/main/providers/multicall-uniswap-provider.js:30:19)\n    at new AlphaRouter (/home/hummingbot/gwbsc/node_modules/@uniswap/smart-order-router/build/main/routers/alpha-router/alpha-router.js:47:97)\n    at new UniswapLPHelper (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.lp.helper.js:76:33)\n    at new UniswapLP (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.lp.js:44:9)\n    at UniswapLP.getInstance (/home/hummingbot/gwbsc/dist/src/connectors/uniswap/uniswap.lp.js:52:53)\n    at /home/hummingbot/gwbsc/dist/src/services/connection-manager.js:137:56\n    at Generator.next (<anonymous>)\n    at /home/hummingbot/gwbsc/dist/src/services/connection-manager.js:8:71\n    at new Promise (<anonymous>)\n    at __awaiter (/home/hummingbot/gwbsc/dist/src/services/connection-manager.js:4:12)'}

Works for arbitrum:

@nikspz thanks - i fixed the uniswaplp bug

7e565d4
Test performed:

Amm_arb strategy works for avalanche and BSC
Curl:

arbitrum

amm/price: ok
amm/trade: ok

BSC mainnet

amm/price: ok
amm/trade: ok
amm/liquidity/add: ok
amm/liquidity/remove: ok

Avalanche

amm/price: ok
amm/trade: ok
amm/liquidity/add: ok
amm/liquidity/remove: ok

Celo

amm/price: ok
amm/trade: ok

Amm_LP: created LP position succesffully:

Unable to fetch pool state (avalanche, BSC)

Celo:
add position: ok

Remove: ok
BSC
add position - ok, position added, however failed to fetch status
https://bscscan.com/tx/0xf5fc4964726d7d02338413f8626a31d84350971bbd859a276d97028ef0b55f4e

remove position: ok

avalanche_avalanche
add position: ok Position created
issue on amm_v3_LP, not sure if related to node.

Remove position: ok

amm/liquidity/position failed on curl as well, could be fixed in the next PR

@nikspz I took a quick look at the /amm/liquidity/position issue but it requires more investigation. Looks like the position is successfully created but doing the tokenID lookup fails for some reason.
I suggest that we merge this PR in, and then I'll look at the LP functionality separately.


Added testimonials div

Hi,
I am Mayank Gautam. I have added a div for testimonials. Would you please review and merge my pull request?
Thank You!

Hello @AnshumanFauzdar, please find the screenshot below

.

Hey @mayank3810 I will suggest to add your own testimonial instead of leaving lorem ipsum.


New features for @FieldNameConstants

is it possible to have this configurable so:
@FieldNameConstants(toEnum = true)
public class FieldNameConstantsExample {
  private final String iAmAField;
  private final int andSoAmI;
}

will turn to
public class FieldNameConstantsExample {
  public enum Fields {
    iAmAField,
    andSoAmI,
  }
  private final String iAmAField;
  private final int andSoAmI;
}

?
and enum Fields, "Fields" make this configurable...

There's a pretty serious problem we can't solve in lombok, which is the following:
javac will abort early with an error, before it even runs any annotation processors, if you have a NAMED static import which doesn't exist yet because lombok would generate it. So, given:
@FieldNameConstants
public class FieldnameTest {
    int test;
}

if you then, in another source file you compile at the same time as above, try: import static pkg.FieldnameTest.FIELD_TEST;, you get an error, and there's not a lot we can do about it because that error occurs before lombok even runs. The solution is to go with import static pkg.FieldnameTest.*; and then it does work.
Now back to this issue: I've made a proof of concept for this setup and you can then write import pkg.FieldnameTest.Fields.test; and now it all works fine.
This is awesome. Therefore, 2 things:
[1] We shall be adding this to lombok soon, and
[2] We're going to debate removing the old way entirely, because we can't solve the above problem and it's an obvious way to try to use the generated constants. Possibly we will not remove this functionality but we make the enum style as described in this issue the default.

That's a good news! Maybe it'd make sense to name it @FieldNameEnum instead, as prefix and suffix are rather useless with an enum (the old @FieldNameConstants could stay untouched for some time).
The only usage problem, I can see, is that pkg.FieldnameTest.Fields.test.name() is not a compile-time constant, so there's no string usable in annotations like e.g., Hibernate's uniqueConstraints (though here, the "logical" column names get used which may differ from the field names, so I should have chosen a different example).
@rzwitserloot Above, you wrote pkg.FieldnameTest.Fields.test, which violates the conventions, though I could imagine myself wanting to violate them, too. I guess, by default, it should behave like before ("same name as the field it represents, except with all uppercase letters, with underscores in front of the uppercase letters in the original field")?

configuration (maybe lombok.fieldNameEnum.uppercased)?
member final String pkg.FieldnameTest.Fields.TEST.fieldName = "test"?

Implementation is now on master branch: 3d432c38d0cfeb36b8e7402eca56faaafcf7bac7
along with the docs: 0038b48eeacac0389980902e65b4976dd5605c69
Because the feature is in experimental I decided (for now, we can revisit this decision prior to releasing v1.18.4) to just remove the old way entirely and replace it with this new way.
You can now choose whether you want an enum or an inner type with psf String constants; by default you get the string constants, you have to explicitly choose to go with enum instead. Only configurable aspect right now is the name of the inner type.
I can see adding 'uppercased' as an option via lombok.config, but piling it into the annotation itself feels like a bridge too far (too many finicky settings, and it's purely a style thing; I don't think any framework demands that these are capitalized).


GitHub Sync

This is an automatically generated pull request.

Merging on red; will fix travis post.


props nodeTypes not extandable

Hello
I am building a react application, where I need to define nodeTypes dynamically, according to data I receive from a server. Before rerendering I add new types to object nodeType. I see, that my programmatically created nodeType object is exactly the same as my statically created one. All the same, new types are not recognized in react-flow. Is it true, that the props nodeTypes is immutable after the first call of ReactFlow, so that you need to create all types in the beginning?
Is there a way to change that myself in the react-flow code?
Thank you very much for your answer.
Moka Badertscher

Hey @monikabadertscher
the nodeTypes and edgeTypes props are static:
https://github.com/wbkd/react-flow/blob/main/src/container/ReactFlow/index.tsx#L188-L189
Maybe we could pass another prop like nodeTypesId to the useMemo deps array in order to recalculate the types.

Thank you very much. So do you mean, you could provide me those extension with a nodeTypesId? If you could, it would make my life so more easier for my project!
Greetings, Moka

Do you get new nodes and the regarding types from the server or do you just want to update the types?

Hy Moritz
I am really grateful that you consider my request!
The situation is this:
I have a graph with up to ten nodes or so. When I create a new node, the type depends on the number of handles and where they are positioned (besides image, text and so on.) This information is from imported data (from the server) and I add the specific info for this node to node.data.
As I have to be highly dynamically (there could always coming a complete new set of data for the import), I cannot predefine the different type of nodes.
My goal is, to dynamically create the type "nodeTypes". I already have a function, which returns a correct value React.memo() which I manipulate with the individual info for handles from my node. So, my "dream-solution" would be to create the "nodeTypes" each time before I render. I already implemented this. That means, nodeTypes can have new entries each time I send the prop.
Of course I take any solution you can provide me. But the core point is, that I cannot have predefined memos for every type I need.
Thank you so much to consider my problem and have a nice day!
Moka
Von: Moritz Klack @.>
Gesendet: Wednesday, March 17, 2021 10:06 PM
An: wbkd/react-flow @.>
Cc: Monika Badertscher @.>; Mention @.>
Betreff: Re: [wbkd/react-flow] props nodeTypes not extandable (#1007)
Do you get new nodes and the regarding types from the server or do you just want to update the types?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/wbkd/react-flow/issues/1007#issuecomment-801442665, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATHWNYROAERNFQOFB5GG5KTTEEKT5ANCNFSM4ZGYJDPA.

Hy Moritz
And: Yes I need to change the type.
Best regards, Moka
Von: Moritz Klack @.>
Gesendet: Wednesday, March 17, 2021 10:06 PM
An: wbkd/react-flow @.>
Cc: Monika Badertscher @.>; Mention @.>
Betreff: Re: [wbkd/react-flow] props nodeTypes not extandable (#1007)
Do you get new nodes and the regarding types from the server or do you just want to update the types?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/wbkd/react-flow/issues/1007#issuecomment-801442665, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATHWNYROAERNFQOFB5GG5KTTEEKT5ANCNFSM4ZGYJDPA.

In v9.3.0 you can pass a nodeTypesId and a edgeTypesId if you want to update the node or edge types. Please let me know if it works for you.

Hello Moritz
Thank you very much. I will try that tomorrow evening or Tuesday morning. Tomorrow I have to make a presentation and for this purpose I can use it as it is. This is a very simple first step.
I am looking forward to testing and will let you know.
Best regards, Moka
Von: Moritz Klack @.>
Gesendet: Friday, March 19, 2021 11:53 PM
An: wbkd/react-flow @.>
Cc: Monika Badertscher @.>; Mention @.>
Betreff: Re: [wbkd/react-flow] props nodeTypes not extandable (#1007)
In v9.3.0 you can pass a nodeTypesId and a edgeTypesId if you want to update the node or edge types. Please let me know if it works for you.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/wbkd/react-flow/issues/1007#issuecomment-803177874, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATHWNYSIFP7IQA6BGO5FD4DTEPIVLANCNFSM4ZGYJDPA.

Thank you for this extension.
As I had to deliver a first version on time I found a quite good solution with a bunch of predefined nodeTypes and more configuration data from my server-application. When things get soon more grouped and complex, I will change to your new solution.
I tested it and it worked well. I hope the provided solution 9.3.0 will stay there.

Great that it works :)

@moklick Hi. II got the same problem. I need to dynamically render nodeTypes. Is now u support any method for this?


List commands to support field and label selectors

Motivation
Service Manager allows filtering resources based on field and label selectors. It would be nice to support filtering on the CLI list resource commands based on provided field and label selectors.
Approach
Introduced --field-query (-f) and --label-query (-l) flags on list commands for querying on labels and fields.
Pull Request status

[x] Field and Label querying on list-brokers
[x] Field querying on list-platforms (Label querying on platforms not supported by SM)
[ ]  Field querying on list-offerings (Depends on another PR)

Coverage increased (+0.2%) to 74.254% when pulling 92e81ac5638614482cc146c317cb144336c396a1 on list-querying into 08f3c5d7a390767e409d615f519689ff2863760e on master.


get error on windows 10

C:\Users\Administrator\Desktop\gourl-bitcoin-payment-gateway-paid-downloads-membership\languages>python3 tans.py
Traceback (most recent call last):
File "tans.py", line 3, in
run(fro="en", to="fa", src="C:/Users/Administrator/Desktop/gourl-bitcoin-payment-gateway-paid-downloads-membership/languages/untranslated", dest="C:/Users/Administrator/Desktop/gourl-bitcoin-payment-gateway-paid-downloads-membership/languages/translated")
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\translate_po\main.py", line 55, in run
solve(os.path.join(arguments.dest, file), os.path.join(arguments.src, file), arguments)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\translate_po\main.py", line 27, in solve
line.msgstr = polib.unescape(translate(polib.escape(line.msgid), arguments))
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\translate_po\main.py", line 15, in translate
return translator.translate(source, dest=arguments.to, src=arguments.fro).text
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\googletrans\client.py", line 182, in translate
data = self._translate(text, dest, src, kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\googletrans\client.py", line 78, in _translate
token = self.token_acquirer.do(text)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\googletrans\gtoken.py", line 194, in do
self._update()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\googletrans\gtoken.py", line 62, in _update
code = self.RE_TKK.search(r.text).group(1).replace('var ', '')
AttributeError: 'NoneType' object has no attribute 'group'

tans.py include syntax is :
from translate_po.main import run
run(fro="en", to="fa", src="C:/Users/Administrator/Desktop/gourl-bitcoin-payment-gateway-paid-downloads-membership/languages/untranslated", dest="C:/Users/Administrator/Desktop/gourl-bitcoin-payment-gateway-paid-downloads-membership/languages/translated")

waiting for your response
finest regards

Got the same error under linux (Python 3.9.9)

After installing the current alpha-version of googletrans the program runs without errors:
pip install googletrans==3.1.0a0
But in the translated "po" file the textes are not translated (msgstr is the same as msgid).

After installing the current alpha-version of googletrans the program runs without errors:
pip install googletrans==3.1.0a0
But in the translated "po" file the textes are not translated (msgstr is the same as msgid). I think thats because I already reached the api-limit and my IP was blocked.

Can confirm this fix works on Ubuntu 22.04


SSLFIX

Support both ca.pem and SSL ignore

Since it is dangerous to ignore this verification, reject and close PR.


bug: the calibration for labware isn't preserved between deck positions and is not passed to the notebooks

Overview
We have recently upgraded both firmware and app from 4.5.5 to 6.1.0
We noticed few issues:

In 4.5.5  - if the labware is calibrated in the desktop app the calibration is automatically passed to the notebook environment. And if after the calibration -  the labware file is copied to the /labware dir of the Jupyter environment the labware will behave as calibrated in the jupyter. This does not happen  after the most recent firmware/app upgrade. Question - which python command or setting can grab and pass the calibration results to the protocol run in jupyter?
In 4.5.5  - if the labware is calibrated in the desktop app in a given deck position - it will retain calibration in all other deck positions. This does not happen  after most recent firmware/app upgrade. If the labware is moved to a different position it needs to be recalibrated. How can we fix this behaviour.
4.5.5 allowed for A0 positions (we used it as a calibration spot on our custom labware). Recent upgrade canceled that - can you guys please bring it back.

Please help
Yury
Steps to reproduce
No response
Current behavior
No response
Expected behavior
No response
Operating system
Windows
System and robot setup or anything else?
system 6.1.0

That's a big jump! Sorry you missed some of the versions in between; this probably would've felt less drastic.
The short version of this story is that these were all very intentional changes; after a lot of research and testing, we can to the conclusion that measuring one offset for a given labware type and using that offset for all slots across all systems caused far more problems than it solved.

In 4.5.5 - if the labware is calibrated in the desktop app the calibration is automatically passed to the notebook environment. And if after the calibration - the labware file is copied to the /labware dir of the Jupyter environment the labware will behave as calibrated in the jupyter. This does not happen after the most recent firmware/app upgrade. Question - which python command or setting can grab and pass the calibration results to the protocol run in jupyter?

In Jupyter, you can/should use the new Labware.set_offset method to set the offset vector on each of your labware. You can measure or obtain this offset however you would like; it is simply an x, y, z vector in mm to tweak where the robot expects to find the labware.
These two support articles should help if you would like to use the Opentrons App to measure the offset:

How to view labware offset data2.
How to apply labware offset values in Juypter Notebook and opentrons_execute

In 4.5.5 - if the labware is calibrated in the desktop app in a given deck position - it will retain calibration in all other deck positions. This does not happen after most recent firmware/app upgrade. If the labware is moved to a different position it needs to be recalibrated. How can we fix this behaviour.

As noted, this is an intentional change; after much research, we found that labware offsets are rarely universally applicable to every slot.
Using Labware.set_offset, you can choose to apply (or not apply!) offsets in your protocol however you would like.

4.5.5 allowed for A0 positions (we used it as a calibration spot on our custom labware). Recent upgrade canceled that - can you guys please bring it back.

We are unlikely to implement this feature in the Labware Position Check in the Opentrons App.
As mentioned, however, since you're working in Jupyter, you can use Labware.set_offset however you would like! For example, you could use Jupyter to validate and tweak your offset values for each labware + slot combination.
import opentrons.execute
protocol = opentrons.execute.get_protocol_api('2.13')
protocol.home()

pipette = protocol.load_pipette("p300_single_gen2", mount="right")

// test labware offset using well A0
labware = protocol.load_labware('my_cool_labware', location="1")
labware.set_offset(x=0.1, y=0.2, z=0.3)

pipette.move_to(labware.wells_by_name()["A1"])

You could take this even further, and save these offsets to your own offsets file, and then apply them however you see fit in your protocols using set_offset.
I hope this is helpful! Let me know if there's anything else I can clarify.


TreeItem value is null, throwing Null Pointer Exception

Hello,
I've come around a weird issue. I am creating and adding JFXTreeTableColumn's to the table view, but when I try to set a cell value factory, NPE occurs. I have pretty much the same code in another class and it works perfectly.
I have a tree table mapped through fxml
@FXML private JFXTreeTableView<MyObject> table;
I create a new ObservableList and fill it with data which is absolutely not null, because I can print it out and the debugger shows so
ObservableList<MyObject> list= FXCollections.observableArrayList(task.getValue());
Defining column
JFXTreeTableColumn<MyObject, String> Column1 = new JFXTreeTableColumn<>("Column1");
After that I try to set its value factory like so:
nameColumn.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getValue().getStringValue()));
At this point debugger shows me that param RecursiveTreeItem value is null.
Been trying to solve this for a lot of time, but I just don't get what's wrong.
Appreciate any help,
Thank you

Well it seems that task.getValue() returns a list of items that contains null values.
will close this issue as it's not related to JFoenix development.
Regards,

To clarify things, I guess we need to update the constructor of RecursiveTreeItem to force value parameter.

Sorry for late response. The solution you provided worked. This should be a
little more obvious indeed
On Wed, 16 May 2018, 09:30 JFoeniX<EMAIL_ADDRESS>wrote:

To clarify things, I guess we need to update the constructor of
RecursiveTreeItem to force value parameter.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/jfoenixadmin/JFoenix/issues/716#issuecomment-389438956,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AgZUbSWFWS_Zs0pZZIVtaceWBVUfHTRLks5ty-OUgaJpZM4T_eg4
.


cam_K

I don't understand what the matrix in "cam_K.txt" represents. If I want to use my own picture, how can I get this matrix? Thanks.

Hi,
Its the camera intrinsic matrix.
Since our model is trained on SUN RGB-D dataset (with common RGB-D scanners), we recommend you to retrain the model on your own datasets before using it. If you just want to have a running test. We did not have such a try but recommend you to 1. simply process your image making it to the same scale of the SUN-RGBD images and try our cam_k. OR 2. seriously calibrate your camera intrinsic parameters.


Spike: Investigate using google photos for archive of Nest images

Prototype code on branch: https://github.com/dkilgore90/google-sdm-api/tree/google-photos

Google Photos abandoned as it is missing the critical Delete portion of basic CRUD api.  Google Drive selected for complete implementation instead: https://github.com/dkilgore90/google-sdm-api/tree/google-drive


Adding OMSCSNotes to your README

Hey there!
I own and develop a site called OMSCSNotes where I share all of my lecture notes for the classes I have taken in OMSCS. So far, I have content for GIOS, IIS, CN, ML4T, and Simulation. By the end of the program, I will likely add ML, RL, GA, AI, and one other.
Since I built the site in mid-2019, I've had 27,000 users visit the site and just shy of 250,000 page views. People tell me they love it, and I think it's a great resource. Can we add it to your README for more visibility?
Thanks,
Matt Schlenker

Hey I'm a head TA for CN and we use different content now, I'll look at your notes and see if they would be good for students who need to brush up on basic networking concepts.
I assume you don't have any plans to update the notes for our new content?

I don't have time to update my notes to the new content, correct. I was asking more about you adding my notes to your general survival guide than sharing them specifically with your CN students. Let me know what works!

+1 for adding a link to MattsNotes. They were extremely helpful for IIS, a class commonly taken by first semester students

Thank you for the kind words!

I don't want to give endorsements to any paid content, especially when it isn't being updated.  I've left this repository up because current students and alumni have the opportunity to make corrections and edits to keep the information up to date.  There doesn't seem to be much interest in doing this, so this repo might be taken down in the future.

The content is not paid, only the PDFs.
Don’t close the repository, I have a few updates locally to push up soon.

@pyjarrett Why would you close something that takes no effort to keep open and that, given 100+ stars, is clearly a valuable resource to many people?


Array object format change

Split from PR #220 by @cgalvarez
Context var list

Fixes the array length when the length property of a context variable is undefined. It happens to me with $GLOBALS['GLOBALS'], for example, which is shown as $GLOBALS['GLOBALS'] array[undefined], but its value is really Array[0].

Sorted: now all variables, keys (in case of array) and properties (in case of objects) are sorted in a natural, alphabetical ascending order, following the same behavior as PHP function ksort() (string keys first, numeric ones then).

Placed sort behind feature flag

LGTM, probably going to change the default for the flag to false, however so previous functionality stays the same by default.


feat: Windows HPC base image

Windows HPC are special.
They explicitly do not run in a chroot or similar execution sandbox, and their filesystem is a merged view of the hostfs and their shipped containerfs. This means that we don't need to ship a filesystem: we recently moved from servercore to nanoserver and observed that the lack of pwsh.exe in nanoserver is manageable (in containerd 1.7+, automatically, and in 1.6, by tweaking the container PATH). We can go further and remove the rest of the OS since, as HPC, we don't need it and can escape to the hostfs for dependencies like powershell.
Further, HPC do not have the same Windows OS version compatibility requirements (the "os-version") as regular Windows containers - any Windows HPC may run on any Windows Server Host (given the executables are compatible with that Host).
In some of the testing with WS25 we have seen that this may happen - it was observed that containerd on WS25 inconsistently fetched the WS25 CNI image specified in our multiplatform manifest but was able to run other WS images without any issue.
Containerd >= 1.6 should have compatibility for Windows HPC without an os-version set, so we don't need to build separate Windows images for all of our target WS variants and can simply build one without that extra metadata.

/azp run Azure Container Networking PR

cc @tyler-lloyd and @paulgmiller

Checking if the makefile changes impact other E2E besides PR

/azp list

/azp

/azp run NPM Conformance Tests, NPM Scale Test, CNI Release Test

/azp run Azure Container Networking PR

/azp run NPM Conformance Tests, NPM Scale Test, CNI Release Test

@huntergregory FYI since this needs an NPM reviewer - there should be no net change to NPM here, I only had to update the Dockerfile to match the pattern of everything else in the build matrix

cc @tyler-lloyd @paulgmiller for viz

I'm going to say LGTM, but only in that there's nothing obviously wrong here to my eye. I don't know all the fiddly SKUs and IDs for windows, so I'll let others with more specific knowledge of those judge that aspect of this PR.

I'm going to say LGTM, but only in that there's nothing obviously wrong here to my eye. I don't know all the fiddly SKUs and IDs for Windows (and I trust that @rbtr probably found the right ones), so I'll let others with more specific knowledge of those judge that aspect of this PR.

I figured out all the fiddly Windows SKUs way back when I originally set up multiplat image builds... this removes them because it turns out we don't need them (or any OS in our Windows base images at all, really)


limit on one ip address

How to remove the limit on one ip address?

try using proxies
(ex, SOCKS, HTTP)

Limit 3 bots per IP address. In browsers more than 3 connections allowed per IP address. How can we connect more then 3 connections, and authorize them via Facebook provider?

So you got this right:

3 Clients per IP
1 IP per Facebook

In order to connect more clients, you need to use proxies so each bot connects on a different IP.

Why in browsers I can use more than 3 connections?

@jtiq
From browser you are connecting to random servers.
https://github.com/pulviscriptor/agario-client/issues/53#issuecomment-170940963

thanks
i am try using proxies (socks5)

Problem solved? Close the issue :heavy_check_mark:


Showcase Java futures API

This PR shows what Java JDK8 API would look like, such that we can have a discussion on the API itself regardless of how we actually write or achieve the implementation.
The most natural improvement that was omitted here is the ability to provide a custom ExecutorService rather than fixing it to Dispatchers.Default.

Thank you @Zevleg 🙏  I addressed and implemented all your feedback.


Deployment failed due to low Node.js version

It seems like the theme is broken if I use Vercel to deploy (not sure about other services since I only use Vercel). Specifically, when deployed, I get the following error:

Turned out that this is Vercel's problem. Close the issue.


Bump to latest theme version

This PR bumps the `toha theme to latest version v4.4.0.

Thank you @deining for the PR. Unfortunately, a PR from automated theme update pipeline has been merged before I noticed your PR. My apology for not able to merge this PR.


[docs][7.2] update config-environment

Do not merge yet. Blocked by: https://github.com/elastic/kibana/pull/38577
Implements https://github.com/elastic/apm/issues/81
Link: {kib}/filters.html#environment-selector[]

Codecov Report

Merging #657 into master will decrease coverage by 3.11%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##             master     #657      +/-   ##
============================================
- Coverage     66.73%   63.61%   -3.12%
  Complexity       68       68
============================================
  Files           196      193       -3
  Lines          8802     7528    -1274
  Branches       1209      917     -292
============================================
- Hits           5874     4789    -1085
+ Misses         2609     2442     -167
+ Partials        319      297      -22

Impacted Files
Coverage Δ
Complexity Δ

...a/co/elastic/apm/agent/metrics/MetricRegistry.java
85.71% <0%> (-8.99%)
0% <0%> (ø)

.../apm/agent/report/serialize/DslJsonSerializer.java
83.23% <0%> (-6.47%)
0% <0%> (ø)

...astic/apm/agent/impl/transaction/AbstractSpan.java
75.67% <0%> (-5.91%)
0% <0%> (ø)

...co/elastic/apm/agent/report/ApmServerReporter.java
57.84% <0%> (-5.86%)
0% <0%> (ø)

...va/co/elastic/apm/agent/impl/transaction/Span.java
75.29% <0%> (-3.78%)
0% <0%> (ø)

...ent/report/serialize/MetricRegistrySerializer.java
86% <0%> (-3.31%)
0% <0%> (ø)

...lastic/apm/agent/impl/transaction/Transaction.java
86.36% <0%> (-1.14%)
0% <0%> (ø)

...lastic/apm/agent/metrics/builtin/JvmGcMetrics.java
92.85% <0%> (-0.48%)
0% <0%> (ø)

...lastic/apm/agent/report/ReporterConfiguration.java
100% <0%> (ø)
0% <0%> (ø)
:arrow_down:

...astic/apm/agent/util/KeyListConcurrentHashMap.java

... and 6 more

Continue to review full report at Codecov.

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

I think the HTML has precedence over the properties file.
@bmorelli25 do you have insight into how often https://www.elastic.co/guide/en/apm/agent/java/current/config-reference-properties-file.html is requested, relative to the other config pages?
Slightly off topic: Rather than having the reference property file list all the config options, we could also think about only including the most relevant ones. Currently, it's a bit unwieldy.

I vote for using the most inclusive and elaborated properties file as reference.
The way I imagine its usage is copying it over and start playing with it. Getting back to it after a year and see the full description again and the original default is very useful.

@bmorelli25 @felixbarny Unless you have any objection, I can build (actually- test) and push (so that the automatic configuration-documentation processes will take effect). Let me know.

go for it 🙂


:sparkles: Derive JsonApiModel for Box where M: JsonApiModel

This will enable support for models with fields that are recursive.
Closes #51

Codecov Report

Merging #60 into master will not change coverage.
The diff coverage is n/a.

@@          Coverage Diff           @@
##           master     #60   +/-   ##
======================================
  Coverage    90.4%   90.4%
======================================
  Files           9       9
  Lines        1094    1094
======================================
  Hits          989     989
  Misses        105     105

Impacted Files
Coverage Δ

src/model.rs
89.92% <ø> (ø)
:arrow_up:

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 ea3439c...a261447. Read the comment docs.

Looks good, thank you!


Collision with R programming language

R is already reserved by R programming language CLI.

I suggest renaming it to ramda (all lowercase).

I see in package.json that the binary is actually called ramda and that both ramda and R are mapped to this.


adds the Crossplane repo

Adds the charts from https://crossplane.io to the hub.
Additional changes may be needed in https://github.com/crossplaneio/crossplane/tree/master/cluster/charts/crossplane to meet the
https://github.com/helm/hub/blob/master/Repositories.md#repository-best-practices

Hi 👋 new charts are no longer accepted to stable or incubator. See Status of the Project and Deprecation Timeline for more info about that.
Good news is you can host a Helm chart yourself on GitHub, use the same tools as this repo does for automatic Chart testing and releasing, and list your Helm repo on https://helm.hub.sh. Follow this issue for info about existing guidelines and upcoming improvements: https://github.com/helm/charts/issues/7800

sorry for closing this PR, i overlook the repo :( my fault so sorry


Mailchimp 2.0 Api

Hi
I want to pick your brain a bit.
In angular api 2.0 they are expecting a structure for email and merge_vars.
Your code amended as follows but the api still returns an error
"status":"error","code":-100,"name":"ValidationError","error":"Validation error: {"email":"Please enter a struct\/associative array","merge_vars":"Please enter a struct\/associative array"}"}
.provider('CgMailChimpService', function () {
var config = { username: '', dc: '', u: '', id: '' };
    this.setConfig = function (cfg) {
        config = cfg;
    };

    this.$get = function ($http, $q) {

        var url = 'https://' + config.dc + '.api.mailchimp.com/2.0/lists/subscribe';
        var params = [];

        return {
            subscribe: function (data) {
                var defer = $q.defer();
                var params = angular.extend({}, {
                        apikey: config.u,
                        id: config.id,
                        email: [{
                            email: data.EMAIL,
                            euid: '1',
                            leid: '2'

                        }],
                        merge_vars: [{
                            FNAME: data.FNAME,
                            LNAME: data.SNAME

                        }],
                        email_type: "html",
                        send_welcome: true
                    }    )
                ;
                $http({
                    url: url,
                    params: params,
                    method: 'JSONP',

                }).then(function (data) {
                    if (data.data.result === 'success')
                        defer.resolve(data.data);
                    else
                        defer.reject(data.data);

                }, function (err) {
                    defer.reject(err)
                });

                return defer.promise;
            }
        }
    }
});

Hello,
It s not a good idea to use your api key in a client side application because it s expected to be secret.
The  used in my script is not the api key. I dont really know what is it. Maybe user id or something. You can get it in the signup form exemples.

Thanks


Toplevel CVE issue flag fixes

Issue #, if available:
Description of changes:
Small change to add spacing if the announcement url flag is used, and adding "-a" as a flag shortcut for the announcement flag and updated the description for the other flags.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/approve


API metadata model

X-Road API catalogue in Finland has following data structure

https://github.com/vrk-kpa/api-catalog

Related to #472

@kyyberi Thanks for providing the information!

More info in Digipalvelutehdas Slack

Perhaps the model should also include API repository information. What I'm after is linking "backlog" to Github Issue list of open issues. That would be great for admin and for API consumers too. It might encourage to contribute.
The process would need:

repo url in API profile (given by admin)
authorized connection to read and write to Github via API (connection management by API owner)
ability to close above connection
ability to change repo
admin could choose which tags to show.

At first we would support just Github. Other code management services would follow. I'll make a separate issue about this and label it as design.

Closing, since basic API Metadata feature is implemented and we have an open issue for linking Github issues to backlog.


IDialog method execution finished with no resume handler specified through IDialogStack. c#

Here is my code
The following code works in bot emulator but not in skype.
This code gives

IDialog method execution finished with no resume handler specified through IDialogStack
in skype and in Bot emulator it works without any issues!

`
using Microsoft.Bot.Builder.Dialogs;
using System;
using System.Threading.Tasks;
namespace test
{
[Serializable]
public class test : IDialog
{
public Task StartAsync(IDialogContext context)
{
        context.PostAsync("Hello,Welcome to bot");
        context.PostAsync("Hello,Welcome to bot");
        context.PostAsync("Hello,Welcome to bot");
        context.Wait(MessageReceived);
        return Task.CompletedTask;
    }

    private Task MessageReceived(IDialogContext context, IAwaitable<object> result)
    {
        string WelcomeMsg = "";
        WelcomeMsg = "Hello!";

        try
        {
            var PromptOptions = new string[] { "Yes", "No" };
            PromptDialog.Choice(
            context,
            WelcomePrompt,
            PromptOptions,
            WelcomeMsg, promptStyle: PromptStyle.Auto
            );
        }
        catch (TooManyAttemptsException ex)
        {

await context.PostAsync(ex.ToString());
}
return Task.CompletedTask;
}
    private async Task WelcomePrompt(IDialogContext context, IAwaitable<string> result)
    {
        var Prompt = await result;
        string PromptString = Prompt.ToString().ToLower().Trim();

        if (PromptString.Length > 0)
        {

            PromptString = PromptString.Trim();

            if (PromptString == "give me predictions")
            {

               await context.PostAsync("Can we continue?");

                First F = new First(1);
                await F.StartAsync(context);
            }
            else
            {

                await context.PostAsync("Can we continue?");
               sec s = new sec();
                await s.StartAsync(context);
            }
        }
    }

}

}
`

I don't see any call to IDialogStack.Wait in MessageReceived, so the code seems incorrect regardless.  Generally, you don't call StartAsync yourself - it's called by the framework when you call a child dialog with IDialogStack.Call.

@willportnoy so how should the class be rewritten?
and also why does the error don't show in bot emulator? it works well there :(

WelcomePrompt might use context.Call(new First(), ResumeAfterFirst) or context.Call(new Second(), ResumeAfterSecond) to call a child dialog.
I'm not sure about the emulator difference.  That seems like a code difference, or possibly a serialized dialog stack from a previous version of the code.

@willportnoy  Yea, it was because skype was keeping the old session of the user. I deleted it using,
                   activity.GetStateClient().BotState.DeleteStateForUser(activity.ChannelId, activity.From.Id);                     await activity.GetStateClient().BotState.DeleteStateForUserAsync(activity.ChannelId, activity.From.Id);
Thank you! You can close this issue now 👍

Thank you - feel free to open a new issue for further discussion.


Agda does not accept equational reasoning with if_then_else and erased invariants

Synopsis
When trying to do the combination of

equational reasoning
on a definition with if_then_else
on a data type which uses an additional, erased constraint

I run into problems with Agda being unable to instantiate metavariables corresponding to the @0 {{ flg ≡ True }} argument of the if_then_else construct.
In other words, Agda rejects my proof attempts when if I want to do equational reason on a definition such as
test x1 x2 = if (x1 <= x2) then y else z

where, say, the value y can only be constructed by making use of the invariant x1 <= x2 ≡ True in the then branch.
Test case
Here is a small, yet meaningful example.
First, consider a type for nonempty intervals with the constraint that the start of the interval always comes before the end of the interval:
record Interval : Set where
  field
    start : Nat
    end   : Nat
    @0 invariant : (start <= end) ≡ True

Here is a (stupid) test function that constructs an interval from a single value x : Nat.
test : Nat → Maybe Interval
test x =
  if (x <= x)
    then (λ {{@0 cond}} → Just (record
        { start = x
        ; end = x
        ; invariant = cond
        }
      ))
    else Nothing

I want to prove that this function always returns Just.
isJust : Maybe a → Bool
isJust (Just x) = True
isJust Nothing = False

For that, the following extended substitution principle is helpful, where btrue allows me to capture the condition that is valid in the branch:
prop-ifTrueEqThen
  : ∀ (b : Bool)
  → {thn : @0 {{b ≡ True}} → a}
  → {els : @0 {{b ≡ False}} → a}
  → (btrue : b ≡ True)
  → (if b then thn else els) ≡ thn {{btrue}}
prop-ifTrueEqThen .True refl = refl

However, trying to use this helper function results in the following problem:
prop-test
  : ∀ (x : Nat)
  → isJust (test x) ≡ True
prop-test x = cong isJust eq1
  where
    eq1 : test x ≡ Just {!   !}
    eq1 =
      ifTrueEqThen
        (x <= x)
        { ? }
        {Nothing}
        (reflexivity x)

⛔ Cannot instantiate the metavariable _55 to solution
record { start = x ; end = x ; invariant = cond }
since it contains the variable cond
which is not in scope of the metavariable
when checking that the inferred type of an application
  (if (iOrdNat Ord.<= x) x then (λ ⦃ @0 _ ⦄ → Just ?0) else
  (λ ⦃ @0 _ ⦄ → Nothing))
  ≡ Just ?0
matches the expected type
  test x ≡ Just ?0

Workaround
Define a custom if_then_else construct where the branch is passed as a regular argument, not as an instance argument. In other words, the following is accepted by Agda:
infix -2 if'_then_else_
if'_then_else_
  : {@0 a : Set}
  → (flg : Bool)
  → (@0 (flg ≡ True) → a)
  → (@0 (flg ≡ False) → a)
  → a
if' False then x else y = y refl
if' True  then x else y = x refl

prop-if'TrueEqThen
  : ∀ (b : Bool)
  → {thn : @0 (b ≡ True) → a}
  → {els : @0 (b ≡ False) → a}
  → (btrue : b ≡ True)
  → (if' b then thn else els) ≡ (thn btrue)
prop-if'TrueEqThen .True refl = refl

test' : Nat → Maybe Interval
test' x =
  if' (x <= x)
    then (λ cond → Just (record
        { start = x
        ; end = x
        ; invariant = cond
        }
      ))
    else (λ cond → Nothing)

prop-test'
  : ∀ (x : Nat)
  → isJust (test' x) ≡ True
prop-test' x = cong isJust eq1
  where
    eq1 =
      prop-if'TrueEqThen
        (x <= x)
        (reflexivity x)

This is weird, when I try this example on my PC it just works (here with the holes filled):
open import Haskell.Prelude
open import Haskell.Law

record Interval : Set where
  field
    start : Nat
    end   : Nat
    @0 invariant : (start <= end) ≡ True

test : Nat → Maybe Interval
test x =
  if (x <= x)
    then (λ {{@0 cond}} → Just (record
        { start = x
        ; end = x
        ; invariant = cond
        }
      ))
    else Nothing

isJust : Maybe a → Bool
isJust (Just x) = True
isJust Nothing = False

prop-test
  : ∀ (x : Nat)
  → isJust (test x) ≡ True
prop-test x = cong isJust eq1
  where
    eq1 : test x ≡ Just (record { start = x ; end = x ; invariant = reflexivity x })
    eq1 =
      ifTrueEqThen
        (x <= x)
        { λ {{cond}} → Just (record { start = x ; end = x ; invariant = cond }) }
        {Nothing}
        (reflexivity x)

Which version of Agda / agda2hs are you using?

I get the error on
% agda --version
Agda version <IP_ADDRESS>
Built with flags (cabal -f)
 - optimise-heavily: extra optimisations
 - debug: enable debug printing ('-v' verbosity flags)

but I also get the error
⦃ cond : (iOrdNat Ord.<= x) x ≡ True ⦄ → Maybe Interval !=
Maybe Interval of type Set
when checking that the inferred type of an application
  (if (_r_93 Ord.<= x) x then
   (λ ⦃ @0 _ ⦄ ⦃ cond ⦄ →
      Just (record { start = x ; end = x ; invariant = cond }))
   else (λ ⦃ @0 _ ⦄ ⦃ cond ⦄ → Nothing))
  ≡
  (λ ⦃ cond ⦄ →
     Just (record { start = x ; end = x ; invariant = cond }))
matches the expected type
  test x ≡
  Just
  (record
   { start = x
   ; end = x
   ; invariant = IsLawfulOrd.reflexivity iLawfulOrdNat x
   })

on
$ agda2hs --version
Agda version 2.6.4
Built with flags (cabal -f)
 - optimise-heavily: extra optimizations
 - agda2hs backend version 1.2

I have set up my agda2hs with the following nix flake:
https://github.com/HeinrichApfelmus/agda-notes/tree/main/nix/agda-hs-tools

So this is caused by using a mismatched version of Agda for the agda2hs code, hence closing as it is not directly related to this repo.

So this is caused by using a mismatched version of Agda for the agda2hs code, hence closing as it is not directly related to this repo.

It's not caused by a mismatch — as indicated above, using only agda2hs exhibits the same problem. However, it appears that this issue has been fixed in more recent versions of agda2hs — but the latest released version is probably still affected.

@HeinrichApfelmus Yep I see what you mean, although it is slightly misleading to say that this was a bug in some previous version of agda2hs, since it clearly arises from the core Agda typechecker.
Just confirming that I could reproduce this with Agda-<IP_ADDRESS>, and it gets resolved in Agda-2.7.0.

although it is slightly misleading to say that this was a bug in some previous version of agda2hs, since it clearly arises from the core Agda typechecker.

Well, sure. But since the Agda typechecker is an inseparable part of the agda2hs executable version 1.2, I am unable to act on the difference. You link against it, you hang with it. 😂


Add scheduled events data object.

Choose a PR Template
Switch to "Preview" on this description then select one of the choices below.
Click here to open a PR for a Data Plane API.
Click here to open a PR for a Control Plane (ARM) API.

But you need to run prettier to fix styling

Failure of CI SDK azure-resource-manager-schemas could be ignored.

One more question, will this new API support every new API version in the future, or will it only support this API version 2023-11-02-preview?

One more question, will this new API support every new API version in the future, or will it only support this API version 2023-11-02-preview?

It is only needed for the current API version 2023-11-02-preview.

@FumingZhang please apply "Approved-Avocado" to suppress Avocado validation failure. The reason is: The intended consumer of this swagger model is the Azure Resource Notification team. Their requirement is the swagger should be published publicly as the consumption model, but meanwhile AKS does not want to expose it to the SDK.

Sure, I'll apply for the suppression when creating a PR that requires ARM review to the main branch based on this dev branch


Rebuild Image

Signed-off-by: Chunxi Luo<EMAIL_ADDRESS>https://github.com/open-cluster-management/backlog/issues/15235

/retest

/retest


Eventing v0.18.0 is being reconciled continuously

Describe the bug
Knative Eventing v0.18.0 seems to be reconciled continuously, unlike Serving.
After Eventing is done syncing ("Reconcile succeeded. Time taken: 14.748377338s"), another sync loop starts immediately ("Reconciling KnativeEventing").
Expected behavior
Eventing eventually reaches a stable state and resyncs slow down, or do not occur anymore.
To Reproduce
I'm using a very basic manifest to reconcile Eventing:
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  version: 0.18.0

This installation was upgraded from v0.16.1 via v0.17.5.
Knative release version
v0.18.0
Additional context
Those are the objects which seem to be merged continuously:

CRD containersources.sources.knative.dev (twice per loop)
first update
{"level":"info","ts":"2020-10-12T13:31:12.618Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"spec\":{\"versions\":[{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.sinkUri\",\"name\":\"Sink\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1beta1\",\"schema\":{\"openAPIV3Schema\":{\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true}},\"served\":true,\"storage\":true,\"subresources\":{\"status\":{}}},{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.sinkUri\",\"name\":\"Sink\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1alpha2\",\"schema\":{\"openAPIV3Schema\":{\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true}},\"served\":true,\"storage\":false,\"subresources\":{\"status\":{}}}]}}"}
{"level":"info","ts":"2020-10-12T13:31:12.622Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"/containersources.sources.knative.dev","type":"apiextensions.k8s.io/v1, Kind=CustomResourceDefinition"}

second update
{"level":"info","ts":"2020-10-12T13:31:14.996Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"spec\":{\"versions\":[{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.sinkUri\",\"name\":\"Sink\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1alpha2\",\"schema\":{\"openAPIV3Schema\":{\"description\":\"ContainerSource is an event source that starts a container image which generates events under certain situations and sends messages to a sink URI\",\"properties\":{\"spec\":{\"description\":\"ContainerSourceSpec defines the desired state of ContainerSource (from the client).\",\"properties\":{\"ceOverrides\":{\"description\":\"CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.\",\"properties\":{\"extensions\":{\"description\":\"Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true}},\"type\":\"object\"},\"sink\":{\"description\":\"Sink is a reference to an object that will resolve to a uri to use as the sink.\",\"properties\":{\"ref\":{\"description\":\"Ref points to an Addressable.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"uri\":{\"description\":\"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.\",\"type\":\"string\"}},\"type\":\"object\"},\"template\":{\"description\":\"Template describes the pods that will be created\",\"properties\":{\"annotations\":{\"description\":\"Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"clusterName\":{\"description\":\"The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\",\"type\":\"string\"},\"creationTimestamp\":{\"description\":\"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.  Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\",\"type\":\"string\"},\"deletionGracePeriodSeconds\":{\"description\":\"Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\",\"format\":\"int64\",\"type\":\"integer\"},\"deletionTimestamp\":{\"description\":\"DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.  Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\",\"type\":\"string\"},\"finalizers\":{\"description\":\"Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order.  Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"generateName\":{\"description\":\"GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.  If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).  Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency\",\"type\":\"string\"},\"generation\":{\"description\":\"A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.\",\"format\":\"int64\",\"type\":\"integer\"},\"labels\":{\"description\":\"Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"managedFields\":{\"description\":\"ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \\\"ci-cd\\\". The set of fields is always in the version that the workflow used when modifying the object. \",\"items\":{\"properties\":{\"apiVersion\":{\"description\":\"APIVersion defines the version of this resource that this field set applies to. The format is \\\"group/version\\\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.\",\"type\":\"string\"},\"fieldsType\":{\"description\":\"FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \\\"FieldsV1\\\"\",\"type\":\"string\"},\"fieldsV1\":{\"description\":\"FieldsV1 holds the first JSON version format as described in the \\\"FieldsV1\\\" type.\",\"type\":\"string\"},\"manager\":{\"description\":\"Manager is an identifier of the workflow managing these fields.\",\"type\":\"string\"},\"operation\":{\"description\":\"Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are \\\"Apply\\\" and \\\"Update\\\".\",\"type\":\"string\"},\"time\":{\"description\":\"Time is timestamp of when these fields were set. It should always be empty if Operation is \\\"Apply\\\"\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"name\":{\"description\":\"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \\\"default\\\" namespace, but \\\"default\\\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.  Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\",\"type\":\"string\"},\"ownerReferences\":{\"description\":\"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\",\"items\":{\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"blockOwnerDeletion\":{\"description\":\"If true, AND if the owner has the \\\"foregroundDeletion\\\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \\\"delete\\\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.\",\"type\":\"boolean\"},\"controller\":{\"description\":\"If true, this reference points to the managing controller.\",\"type\":\"boolean\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\"type\":\"string\"},\"uid\":{\"description\":\"UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"resourceVersion\":{\"description\":\"An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.  Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\",\"type\":\"string\"},\"selfLink\":{\"description\":\"SelfLink is a URL representing this object. Populated by the system. Read-only.  DEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.\",\"type\":\"string\"},\"spec\":{\"description\":\"Specification of the desired behavior of the pod. More info: Type 'kubectl explain pod.spec'. Also, https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"uid\":{\"description\":\"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.  Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"},\"status\":{\"description\":\"ContainerSourceStatus defines the observed state of ContainerSource (from the controller).\",\"properties\":{\"annotations\":{\"description\":\"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"ceAttributes\":{\"description\":\"CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.\",\"items\":{\"properties\":{\"source\":{\"description\":\"Source is the CloudEvents source attribute.\",\"type\":\"string\"},\"type\":{\"description\":\"Type refers to the CloudEvent type attribute.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"conditions\":{\"description\":\"Conditions the latest available observations of a resource's current state.\",\"items\":{\"properties\":{\"lastTransitionTime\":{\"description\":\"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).\",\"type\":\"string\"},\"message\":{\"description\":\"A human readable message indicating details about the transition.\",\"type\":\"string\"},\"reason\":{\"description\":\"The reason for the condition's last transition.\",\"type\":\"string\"},\"severity\":{\"description\":\"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.\",\"type\":\"string\"},\"status\":{\"description\":\"Status of the condition, one of True, False, Unknown.\",\"type\":\"string\"},\"type\":{\"description\":\"Type of condition.\",\"type\":\"string\"}},\"required\":[\"type\",\"status\"],\"type\":\"object\"},\"type\":\"array\"},\"observedGeneration\":{\"description\":\"ObservedGeneration is the \\\"Generation\\\" of the Service that was last processed by the controller.\",\"format\":\"int64\",\"type\":\"integer\"},\"sinkUri\":{\"description\":\"SinkURI is the current active sink URI that has been configured for the Source.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"served\":true,\"storage\":false,\"subresources\":{\"status\":{}}},{\"additionalPrinterColumns\":[{\"jsonPath\":\".status.sinkUri\",\"name\":\"Sink\",\"type\":\"string\"},{\"jsonPath\":\".metadata.creationTimestamp\",\"name\":\"Age\",\"type\":\"date\"},{\"jsonPath\":\".status.conditions[?(@.type==\\\"Ready\\\")].status\",\"name\":\"Ready\",\"type\":\"string\"},{\"jsonPath\":\".status.conditions[?(@.type=='Ready')].reason\",\"name\":\"Reason\",\"type\":\"string\"}],\"name\":\"v1beta1\",\"schema\":{\"openAPIV3Schema\":{\"description\":\"ContainerSource is an event source that starts a container image which generates events under certain situations and sends messages to a sink URI\",\"properties\":{\"spec\":{\"description\":\"ContainerSourceSpec defines the desired state of ContainerSource (from the client).\",\"properties\":{\"ceOverrides\":{\"description\":\"CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.\",\"properties\":{\"extensions\":{\"description\":\"Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true}},\"type\":\"object\"},\"sink\":{\"description\":\"Sink is a reference to an object that will resolve to a uri to use as the sink.\",\"properties\":{\"ref\":{\"description\":\"Ref points to an Addressable.\",\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.\",\"type\":\"string\"}},\"type\":\"object\"},\"uri\":{\"description\":\"URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.\",\"type\":\"string\"}},\"type\":\"object\"},\"template\":{\"description\":\"Template describes the pods that will be created\",\"properties\":{\"annotations\":{\"description\":\"Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"clusterName\":{\"description\":\"The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\",\"type\":\"string\"},\"creationTimestamp\":{\"description\":\"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.  Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\",\"type\":\"string\"},\"deletionGracePeriodSeconds\":{\"description\":\"Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\",\"format\":\"int64\",\"type\":\"integer\"},\"deletionTimestamp\":{\"description\":\"DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.  Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\",\"type\":\"string\"},\"finalizers\":{\"description\":\"Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order.  Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"generateName\":{\"description\":\"GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.  If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).  Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency\",\"type\":\"string\"},\"generation\":{\"description\":\"A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.\",\"format\":\"int64\",\"type\":\"integer\"},\"labels\":{\"description\":\"Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"managedFields\":{\"description\":\"ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \\\"ci-cd\\\". The set of fields is always in the version that the workflow used when modifying the object. \",\"items\":{\"properties\":{\"apiVersion\":{\"description\":\"APIVersion defines the version of this resource that this field set applies to. The format is \\\"group/version\\\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.\",\"type\":\"string\"},\"fieldsType\":{\"description\":\"FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \\\"FieldsV1\\\"\",\"type\":\"string\"},\"fieldsV1\":{\"description\":\"FieldsV1 holds the first JSON version format as described in the \\\"FieldsV1\\\" type.\",\"type\":\"string\"},\"manager\":{\"description\":\"Manager is an identifier of the workflow managing these fields.\",\"type\":\"string\"},\"operation\":{\"description\":\"Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are \\\"Apply\\\" and \\\"Update\\\".\",\"type\":\"string\"},\"time\":{\"description\":\"Time is timestamp of when these fields were set. It should always be empty if Operation is \\\"Apply\\\"\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"name\":{\"description\":\"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\"type\":\"string\"},\"namespace\":{\"description\":\"Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \\\"default\\\" namespace, but \\\"default\\\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.  Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\",\"type\":\"string\"},\"ownerReferences\":{\"description\":\"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\",\"items\":{\"properties\":{\"apiVersion\":{\"description\":\"API version of the referent.\",\"type\":\"string\"},\"blockOwnerDeletion\":{\"description\":\"If true, AND if the owner has the \\\"foregroundDeletion\\\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \\\"delete\\\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.\",\"type\":\"boolean\"},\"controller\":{\"description\":\"If true, this reference points to the managing controller.\",\"type\":\"boolean\"},\"kind\":{\"description\":\"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\",\"type\":\"string\"},\"name\":{\"description\":\"Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\"type\":\"string\"},\"uid\":{\"description\":\"UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"resourceVersion\":{\"description\":\"An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.  Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\",\"type\":\"string\"},\"selfLink\":{\"description\":\"SelfLink is a URL representing this object. Populated by the system. Read-only.  DEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.\",\"type\":\"string\"},\"spec\":{\"description\":\"Specification of the desired behavior of the pod. More info: Type 'kubectl explain pod.spec'. Also, https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"uid\":{\"description\":\"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.  Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"},\"status\":{\"description\":\"ContainerSourceStatus defines the observed state of ContainerSource (from the controller).\",\"properties\":{\"annotations\":{\"description\":\"Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.\",\"type\":\"object\",\"x-kubernetes-preserve-unknown-fields\":true},\"ceAttributes\":{\"description\":\"CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.\",\"items\":{\"properties\":{\"source\":{\"description\":\"Source is the CloudEvents source attribute.\",\"type\":\"string\"},\"type\":{\"description\":\"Type refers to the CloudEvent type attribute.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":\"array\"},\"conditions\":{\"description\":\"Conditions the latest available observations of a resource's current state.\",\"items\":{\"properties\":{\"lastTransitionTime\":{\"description\":\"LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).\",\"type\":\"string\"},\"message\":{\"description\":\"A human readable message indicating details about the transition.\",\"type\":\"string\"},\"reason\":{\"description\":\"The reason for the condition's last transition.\",\"type\":\"string\"},\"severity\":{\"description\":\"Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.\",\"type\":\"string\"},\"status\":{\"description\":\"Status of the condition, one of True, False, Unknown.\",\"type\":\"string\"},\"type\":{\"description\":\"Type of condition.\",\"type\":\"string\"}},\"required\":[\"type\",\"status\"],\"type\":\"object\"},\"type\":\"array\"},\"observedGeneration\":{\"description\":\"ObservedGeneration is the \\\"Generation\\\" of the Service that was last processed by the controller.\",\"format\":\"int64\",\"type\":\"integer\"},\"sinkUri\":{\"description\":\"SinkURI is the current active sink URI that has been configured for the Source.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"served\":true,\"storage\":true,\"subresources\":{\"status\":{}}}]}}"}
{"level":"info","ts":"2020-10-12T13:31:15.011Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"/containersources.sources.knative.dev","type":"apiextensions.k8s.io/v1, Kind=CustomResourceDefinition"}

Job knative-eventing/storage-version-migration-eventing-eventing-0.18.0
{"level":"info","ts":"2020-10-12T13:31:14.253Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"spec\":{\"ttlSecondsAfterFinished\":600}}"}
{"level":"info","ts":"2020-10-12T13:31:14.254Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"knative-eventing/storage-version-migration-eventing-eventing-0.18.0","type":"batch/v1, Kind=Job"}

Deployment pingsource-mt-adapter (constantly goes from 0 to 1 replica)
{"level":"info","ts":"2020-10-12T13:31:17.067Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"spec\":{\"replicas\":0,\"template\":{\"spec\":{\"$setElementOrder/containers\":[{\"name\":\"dispatcher\"}],\"containers\":[{\"$setElementOrder/env\":[{\"name\":\"SYSTEM_NAMESPACE\"},{\"name\":\"K_METRICS_CONFIG\"},{\"name\":\"K_LOGGING_CONFIG\"},{\"name\":\"K_LOGGING_CONFIG\"},{\"name\":\"K_LEADER_ELECTION_CONFIG\"},{\"name\":\"K_NO_SHUTDOWN_AFTER\"},{\"name\":\"POD_NAME\"}],\"env\":[{\"name\":\"K_LOGGING_CONFIG\"},{\"name\":\"POD_NAME\",\"valueFrom\":{\"fieldRef\":{\"fieldPath\":\"metadata.name\"}}}],\"name\":\"dispatcher\"}]}}}}"}
{"level":"info","ts":"2020-10-12T13:31:17.068Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"knative-eventing/pingsource-mt-adapter","type":"apps/v1, Kind=Deployment"

A few ClusterRoles, most likely insignificant but sharing anyway
{"level":"info","ts":"2020-10-12T13:31:06.626Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"rules\":[]}"}
{"level":"info","ts":"2020-10-12T13:31:06.627Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"/addressable-resolver","type":"rbac.authorization.k8s.io/v1, Kind=ClusterRole"}
{"level":"info","ts":"2020-10-12T13:31:07.725Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"rules\":[]}"}
{"level":"info","ts":"2020-10-12T13:31:07.726Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"/channelable-manipulator","type":"rbac.authorization.k8s.io/v1, Kind=ClusterRole"}
{"level":"info","ts":"2020-10-12T13:31:08.925Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"rules\":[]}"}
{"level":"info","ts":"2020-10-12T13:31:08.925Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"/podspecable-binding","type":"rbac.authorization.k8s.io/v1, Kind=ClusterRole"}
{"level":"info","ts":"2020-10-12T13:31:09.225Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Merging","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","diff":"{\"rules\":[]}"}
{"level":"info","ts":"2020-10-12T13:31:09.226Z","logger":"knative-operator.manifestival","caller":"zapr@v0.1.1/zapr.go:69","msg":"Updating","knative.dev/pod":"knative-operator-7c9d5f6d9b-p869g","name":"/source-observer","type":"rbac.authorization.k8s.io/v1, Kind=ClusterRole"}

@antoineco This is the normal behavior.
As long as the KnativeEventing CR does not reach the READY status, it will keep in reconciling till it does.
It may reconcile multiple times before eventing CR becomes READY.

But is it expected that it reconciles over and over again, even when the CR is "Ready"? We've been seeing the messages posted above for 10 days continuously, yet our KnativeEventing object remains Ready.


QtDeprecationError is unclear

Hello all,
I am working on a simulation of a machining process. Therefore I need to update the visualization permanently while the simulation is running. I want to use pyvista with the BackgroundPlotter for this task. I set up the library in my Anaconda Python 3 with PyCharm. I installed the pyvista package, numpy and pyvistaqt (and a few others). When I am trying to process the example given by PyVista for BackgroundPlotting I run into an error. (https://docs.pyvista.org/plotting/plotting.html#background-plotting)
I just started programming recently sorry if the reason is an obvious mistake.
Traceback (most recent call last):
  File "C:/Abtragsimulation/Programm with Conda/test files/testing pv.py", line 14, in <module>
    plotter = pv.BackgroundPlotter()
  File "C:\Users\Robert\miniconda3\envs\Programm with Conda\lib\site-packages\pyvista\plotting\__init__.py", line 35, in __init__
    raise QtDeprecationError('BackgroundPlotter')
pyvista.plotting.QtDeprecationError: `BackgroundPlotter` has moved to pyvistaqt.
    You can install this from PyPI with: `pip install pyvistaqt`
    See https://github.com/pyvista/pyvistaqt

When I try installing pyvistaqt as the error suggests, the terminal prompts a list with all packages needed and says that the requirements are all already satisfied.
Requirements already satisfied.txt
How can I fix the problem? Is this even the right way to visualize a model that is changing all the time while the simulation is running?
Python CODE:
Backgroundplotter error.txt
Thank you very much in advance.

Perhaps our error message 'BackgroundPlotter' has moved to pyvistaqt. is unclear. By "moved to pyvistaqt.", we really mean moved - completely. The BackgroundPlotter class is no longer accesible from pyvista but from pyvistaqt now. Thus, in your code, you must replace:
import pyvista as pv
....

plotter = pv.BackgroundPlotter()

with
import pyvista as pv
from pyvistaqt import BackgroundPlotter
....

plotter = BackgroundPlotter()

@pyvista/developers, I've been hearing a lot of confusion over this error message. Can you think of a clearer way to state this in the actual error that is raised

Perhaps we should change it to:
pyvista.plotting.QtDeprecationError: `BackgroundPlotter` has moved to pyvistaqt.
    You can install this from PyPI with: `pip install pyvistaqt`
    Then import it via:
        from pyvistaqt import BackgroundPlotter
    `BackgroundPlotter` is no longer accessible from `pyvista.BackgroundPlotter`
    See https://github.com/pyvista/pyvistaqt

Moving over to PyVista, so that we can improve this error message there