Unsupported method "POST"

The sample query below works for jena and wikidata query service but not for the qlever-wikidata or qlever-wikidata-proxy endpoints.
without proxy:
sparqlquery -qp wikidata.yaml -qn MountainsHigher8000m -en qlever-wikidata -f github
QueryBadFormed("QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed. \n\nResponse:\nb'Unknown HTTP-method, only GET and HEAD requests are supported'")

with proxy:
 sparqlquery -qp wikidata.yaml -qn MountainsHigher8000m -en qlever-wikidata-proxy -f github
HTTPError 501: "Unsupported method ('POST')"

I was under the impression this had been working a few days ago.
https://github.com/WolfgangFahl/pyLoDStorage/tree/master/sampledata has the wikidata.yaml file. The behavior is IMHO the same when you use the default queries as shown by
sparqlquery --list
sparqlquery -qn cities -en qlever-wikidata
sparqlquery -qn cities -en qlever-wikidata-proxy

sparqlquery -qp wikidata.yaml -qn MountainsHigher8000m -f github
sparqlquery -qp wikidata.yaml -qn MountainsHigher8000m -en dbis-jena-wikidata -f github

Mountains higher than 8000 m
https://qlever.cs.uni-freiburg.de/wikidata/F7JXq3
query
# Mountains higher than 8000 m
# fixes:
# https://qlever.cs.uni-freiburg.de/wikidata/F7JXq3
# see https://github.com/ad-freiburg/qlever/issues/604
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX psn: <http://www.wikidata.org/prop/statement/value-normalized/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?mountain ?mountain_label (MAX(?elevationValues) AS ?elevation) (SAMPLE(?coordinateValues) AS ?coordinates) WHERE {
  ?mountain wdt:P31 wd:Q8502 .
  ?mountain p:P2044/psn:P2044/wikibase:quantityAmount ?elevationValues .
  ?mountain wdt:P625 ?coordinateValues .
  ?mountain rdfs:label ?mountain_label .
  FILTER(?elevationValues >= 8000.0) .
  FILTER (LANG(?mountain_label) = "en")
}
GROUP BY ?mountain ?mountain_label
ORDER BY DESC(?elevation)

result

mountain
mountain_label
elevation
coordinates

Q31693430
Obako Dake
11344
Point(135.65034 34.07742)

Q513
Mount Everest
8848
Point(86.925277777778 27.988055555556)

Q43512
K2
8611
Point(76.513333333333 35.881111111111)

Q82019
Kanchenjunga
8586
Point(88.133333 27.7)

Q168702
Lhotse
8516
Point(86.933333333333 27.961666666667)

Q169986
Makalu
8485
Point(87.088611111111 27.889166666667)

Q11237699
Lhotse Shar
8383
Point(86.943333333333 27.958333333333)

Q170089
Cho Oyu
8188
Point(86.660833333333 28.094166666667)

Q165440
Dhaulagiri
8167
Point(83.495277777778 28.696111111111)

Q170070
Manaslu
8163
Point(84.559722222222 28.55)

Q130736
Nanga Parbat
8126
Point(74.59 35.239166666667)

Q16466024
Annapurna I
8091
Point(83.82 28.5958)

Q187138
Gasherbrum
8080
Point(76.696388888889 35.724444444444)

Q180996
Broad Peak
8051
Point(76.568055555556 35.810555555556)

Q186853
Gasherbrum II
8034
Point(76.652777777778 35.7575)

Q105124
Shishapangma
8027
Point(85.779722222222 28.352222222222)

Today i created a workaround with https://github.com/WolfgangFahl/pyLoDStorage/issues/76 but i couldn'd test it since the demo server is down.
sparqlquery -qp wikidata.yaml -qn "Wikidata-Events" -en "qlever-wikidata" -f json
querymain.py: <HTTPError 503: 'Service Unavailable'>
              for help use --help%

@WolfgangFahl Is this still an open issue?

@hannahbast . Thank you for getting back on this. Currently  i am using a workaround explicitly switching to GET when using QLever. I don't know whether the POST feature has been implemented in the meantime since non of my CI tests would catch the change.

@WolfgangFahl POST hasn't been implemented yet, but we have started a PR, pointing out where in the code this has to be implemented: https://github.com/ad-freiburg/qlever/pull/657 . It would be doable with relatively few lines of code.
Do you have a specific use case, where POST is necessary and GET is not enough? The only use case I can think of is when the SPARQL query is extremely long. Do you have SPARQL queries that are so long that GET doesn't work?

@hannahbast  POST is the default method when using library such as https://github.com/RDFLib/sparqlwrapper. This also means that most web based solutions that allow to specify only an endpoint but not a method won't work.
It's  mostly an obstacle when simply trying out the compatibility of existing solutions with QLever. Simply switching the endpoint won't work in such cases. Take https://scholia.toolforge.org/ as an example. If I'd switch the endpoint in the nightly CI tests to run against QLever that wouldn't be enough. The same holds true for other systems we have created that query wikidata via SPARQL by default.

@WolfgangFahl Thanks, then we should implement this rather quickly, I guess.

@WolfgangFahl @balhoff This is now implemented by #657 (soon to be merged into the master) and currently active on QLever's Wikidata API. In particular, the following three calls now all give the same result. The first call issues a standard GET request. The second call issues a POST request with a URL-encoded query string. The third call issues a POST request with an unencoded SPARQL query in the body of the POST request. The SPARQL 1.1 standard requires all three. So far, QLever only supported the first one.
curl -Gs https://qlever.cs.uni-freiburg.de/api/wikidata -H "Accept: text/tab-separated-values" --data-urlencode "query=PREFIX wd: <http://www.wikidata.org/entity/> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX p: <http://www.wikidata.org/prop/> PREFIX psn: <http://www.wikidata.org/prop/statement/value-normalized/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?mountain_label (MAX(?elevation) AS ?elevation) WHERE { ?mountain wdt:P31 wd:Q8502 . ?mountain p:P2044/psn:P2044/wikibase:quantityAmount ?elevation .?mountain rdfs:label ?mountain_label . FILTER (LANG(?mountain_label) = \"en\") FILTER(?elevation >= 8000.0) } GROUP BY ?mountain ?mountain_label ORDER BY DESC(?elevation)"

curl -Ps https://qlever.cs.uni-freiburg.de/api/wikidata -H "Accept: text/tab-separated-values" --data-urlencode "query=PREFIX wd: <http://www.wikidata.org/entity/> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX p: <http://www.wikidata.org/prop/> PREFIX psn: <http://www.wikidata.org/prop/statement/value-normalized/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?mountain_label (MAX(?elevation) AS ?elevation) WHERE { ?mountain wdt:P31 wd:Q8502 . ?mountain p:P2044/psn:P2044/wikibase:quantityAmount ?elevation .?mountain rdfs:label ?mountain_label . FILTER (LANG(?mountain_label) = \"en\") FILTER(?elevation >= 8000.0) } GROUP BY ?mountain ?mountain_label ORDER BY DESC(?elevation)"

curl -Ps https://qlever.cs.uni-freiburg.de/api/wikidata -H "Accept: text/tab-separated-values" -H "Content-type: application/sparql-query" --data "PREFIX wd: <http://www.wikidata.org/entity/> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX p: <http://www.wikidata.org/prop/> PREFIX psn: <http://www.wikidata.org/prop/statement/value-normalized/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?mountain_label (MAX(?elevation) AS ?elevation) WHERE { ?mountain wdt:P31 wd:Q8502 . ?mountain p:P2044/psn:P2044/wikibase:quantityAmount ?elevation .?mountain rdfs:label ?mountain_label . FILTER (LANG(?mountain_label) = \"en\") FILTER(?elevation >= 8000.0) } GROUP BY ?mountain ?mountain_label ORDER BY DESC(?elevation)"

Wonderful, thank you!

Since we now have support for POST queries, I am closing this issue.
Please let us know whether when something doesn't work as expected, but we have implemented both variations of POST queries that are specified by the SPARQL endpoint protocol.

https://github.com/WolfgangFahl/pyLoDStorage/blob/master/sampledata/endpoints.yaml still has "GET" for both endpoints. When i last tried a few days ago "POST" didn't work. Is the POST method now available for both endpoints?

https://qlever.cs.uni-freiburg.de/api/wikidata
https://qlever.cs.uni-freiburg.de/api/wikidata-proxy

https://qlever.cs.uni-freiburg.de/api/wikidata-proxy is not an endpoint, it's just a proxy (which currently does not forward POST requests). If you ask queries via API, you should use https://qlever.cs.uni-freiburg.de/api/wikidata . This will be unified in the future, the proxy is just a hack for trying out things with the QLever UI

@WolfgangFahl @joka921 The wikidata-proxy is now a thing of the past. https://github.com/ad-freiburg/qlever-ui/commit/3495e48b1146f8416e0e02958ad9fc4ad9455cc9 and previous commits implement this directly in the QLever UI. This also fixes a number of long-standing issues with the UI. For example, the download and share links now also provide the rewritten (by the name service) queries if the "Automatically add names to results" box has been checked.

@hannahbast
the default endpoints.yaml of pylodstorage that is being used by e.g. http://wikidata.bitplan.com and the sparqlquery command line tool has been changed a few day ago accordingly.
The only open problem is automatically providing valid try it links #718 which is limited to short example queries:

Ten largest cities of the world
Ten Largest cities of the world see also http://wiki.bitplan.com/index.php/PyLoDStorage#Examples
query
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
# Ten Largest cities of the world
# WF 2021-08-23
# see also http://wiki.bitplan.com/index.php/PyLoDStorage#Examples
SELECT DISTINCT ?city ?cityLabel ?population ?country ?countryLabel
WHERE {
  VALUES ?cityClass { wd:Q1637706}.
  ?city wdt:P31 ?cityClass .
  ?city wdt:P1082 ?population .
  ?city wdt:P17 ?country .
  ?city rdfs:label ?cityLabel.
  FILTER(LANG(?cityLabel) = "en").
  ?country rdfs:label ?countryLabel.
  FILTER(LANG(?countryLabel) = "en").


Determine the environment from config file.

Hi,
I have 2 configuration (staging and production) yml files in my Dropwizard project. I need to determine which environment (staging or production) I am running the application. I was thinking if I could get the filename somehow, I should be able to set the environment in global variable.
Any idea how could I achieve this.
Thanks

How about adding a field to your configuration class which specifies the environment (could be a string or an enum) and read it in your application?

That's one way of doing it. But then will have to maintain this config for all environment.

@anandagarwaal-zz That's exactly what you described, isn't it?

I have 2 configuration (staging and production) yml files in my Dropwizard project.

@joschi I'll try your approach by creating field which determine which type of config it is.


add support for weights for resources

closes #8439
Signed-off-by: Ashok Pon Kumar<EMAIL_ADDRESS>
What this PR does / why we need it:
Special notes for your reviewer:
If applicable:

[ ] this PR contains documentation
[ ] this PR contains unit tests
[ ] this PR has been tested for backwards compatibility

Implemented solution: Similar to how we have an ordering requirement for known resources in the InstallOrder, users want the capability to order custom resources too. For example a custom resource like SCC need to be applied before creation of any pods.
To enable this capability we can follow the same approach we use for hooks. Essentially add a annotation "helm.sh/order-weight" which can take an integer value (+ve or -ve). This will behave the same way as "helm.sh/hook-weight", but for resources not covered by hooks.
Here is how it will work:
The first resources to be installed will be all resources that have negative weights, and then those with zero or no weights, and then those with positive weights. All in ascending order.
For resources which have same weight, Install order is preserved for known resources.

Chart weights:
To address the question raised in today's developer call around dependent charts, one way to handle it could be to have a chart weight specifiable along with the dependency specification in chart.yaml. The value specified in it will get added as a "helm.io/chart-weight" annotation in each of those charts resources, when the resources are templated. In case of dependency within a dependency, the "helm.io/chart-weight" will be the sum of the all chart-weights encountered till now.
And while each resource order-weight is computed, the chart-weight gets added to its value. For the base chart, the value is 0.

@ashokponkumar It might be worth setting this to draft until you iron/flesh out the solution more?

@ashokponkumar It might be worth setting this to draft until you iron/flesh out the solution more?

sure. Done.

Checking in here to see what’s the status on this. This was opened up in July, and it looks like there is some interest from other community members for this feature.

Checking in here to see what’s the status on this. This was opened up in July, and it looks like there is some interest from other community members for this feature.

@bacongobbler If we can settle on the right technique, I can try to take a stab at implementing it. Here was the last discussion based on the discussion in the developer call.

hi, what is the status on this?

👀

Any update on this effort. I have this issue with deploying gatekeeper via helm. The custom helm chart includes a number of constraint templates and constraints. The templates deploy correctly, but the constraints will not deploy as the templates are not available to all three manager nodes. I need to get the templates fully installed before attempting to reference them with security constraints.


Added pytesseract support for ImageReader

Hi @logan-markewich ,
ImageReader loader used to have an argument "text_type" which can either take "text" or "plan_text" as a value. "text" will use donut models and "plain_text" will use pytesseract to parse images. I think this got missed during the 0.10.00 upgrade. Fixed it so that users have an option to choose if they want pytesseract or DONUT. Let me know in case of any questions. Thanks!

actually, I can do that too, one sec

Thanks @logan-markewich !


Argo does not run workflows(?)

Summary
What happened/what you expected to happen?
I am running the following command.  The workflow exists in the correct namespace, but no pod is generated and nothing appears in the workflow-controller.  I am thinking this must be a configuration problem, but I have been running workflows for several hours on this configuration - it just stopped working(?)
argo submit -n argo  --serviceaccount argo https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml

the last several lines of the workflow-controller logs
time="2021-09-16T18:57:36.224Z" level=info msg="Update leases 200"
time="2021-09-16T18:57:41.073Z" level=info msg="List workflows 200"
time="2021-09-16T18:57:41.074Z" level=info msg=healthz age=5m0s err="<nil>" instanceID=hippocampus-controller labelSelector="!workflows.argoproj.io/phase,workflows.argoproj.io/controller-instanceid=hippocampus-controller" managedNamespace=
time="2021-09-16T18:57:41.228Z" level=info msg="Get leases 200"
time="2021-09-16T18:57:41.232Z" level=info msg="Update leases 200"
time="2021-09-16T18:57:46.246Z" level=info msg="Get leases 200"
time="2021-09-16T18:57:46.254Z" level=info msg="Update leases 200"
time="2021-09-16T18:57:51.259Z" level=info msg="Get leases 200"
time="2021-09-16T18:57:51.265Z" level=info msg="Update leases 200"
time="2021-09-16T18:57:56.283Z" level=info msg="Get leases 200"
time="2021-09-16T18:57:56.295Z" level=info msg="Update leases 200"
time="2021-09-16T18:58:01.299Z" level=info msg="Get leases 200"
time="2021-09-16T18:58:01.306Z" level=info msg="Update leases 200"
time="2021-09-16T18:58:06.340Z" level=info msg="Get leases 200"
time="2021-09-16T18:58:06.352Z" level=info msg="Update leases 200"
time="2021-09-16T18:58:11.375Z" level=info msg="Get leases 200"
time="2021-09-16T18:58:11.397Z" level=info msg="Update leases 200"
time="2021-09-16T18:58:16.414Z" level=info msg="Get leases 200"
time="2021-09-16T18:58:16.420Z" level=info msg="Update leases 200"
time="2021-09-16T18:58:21.426Z" level=info msg="Get leases 200"
time="2021-09-16T18:58:21.437Z" level=info msg="Update leases 200"

I can get the workflows, but there are no pods and the workflows never appear to have been run
 kubectl get workflows -n argo
NAME                      STATUS   AGE
hello-world-2vx27
hello-world-fw9j5
hello-world-mrzvx
hello-world-p4jhc
hello-world-sknsk

Here is the configMap
{
    "apiVersion": "v1",
    "data": {
        "containerRuntimeExecutor": "emmisary",
        "instanceID": "hippocampus-controller",
        "workflowDefaults": "{\"ca.crt\": \"-----BEGIN CERTIFICATE-----Redacted-----END CERTIFICATE-----\\n\", \"metadata\": {\"annotations\": {\"argo\": \"workflows\"}, \"namespace\": \"argo\"}, \"spec\": {\"parallelism\": 3, \"podGC\": {\"strategy\": \"OnWorkflowSuccess\"}, \"securityContext\": {\"fsGroup\": 2000, \"runAsGroup\": 3000, \"runAsNonRoot\": true, \"runAsUser\": 1000}, \"serviceAccountName\": \"dianama\", \"ttlStrategy\": {\"secondsAfterSuccess\": 5}}}"
    },
    "kind": "ConfigMap",
    "metadata": {
        "annotations": {
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"data\":{\"containerRuntimeExecutor\":\"emmisary\",\"instanceID\":\"hippocampus-controller\",\"workflowDefaults\":\"{\\\"ca.crt\\\": \\\"-----BEGIN CERTIFICATE-----Redacted-----END CERTIFICATE-----\\\\n\\\", \\\"metadata\\\": {\\\"annotations\\\": {\\\"argo\\\": \\\"workflows\\\"}, \\\"namespace\\\": \\\"argo\\\"}, \\\"spec\\\": {\\\"parallelism\\\": 3, \\\"podGC\\\": {\\\"strategy\\\": \\\"OnWorkflowSuccess\\\"}, \\\"securityContext\\\": {\\\"fsGroup\\\": 2000, \\\"runAsGroup\\\": 3000, \\\"runAsNonRoot\\\": true, \\\"runAsUser\\\": 1000}, \\\"serviceAccountName\\\": \\\"dianama\\\", \\\"ttlStrategy\\\": {\\\"secondsAfterSuccess\\\": 5}}}\"},\"kind\":\"ConfigMap\",\"metadata\":{\"annotations\":{},\"name\":\"workflow-controller-configmap\",\"namespace\":\"argo\"}}\n"
        },
        "creationTimestamp": "2021-09-16T13:09:40Z",
        "name": "workflow-controller-configmap",
        "namespace": "argo",
        "resourceVersion": "15927506",
        "uid": "84c26fc2-1946-4e23-853c-98db6e0388bc"
    }
}

What Kubernetes provider are you using?
Calico bare metal installation
What version of Argo Workflows are you running?
Argo 3.1.11
What executor are you running? Docker/K8SAPI/Kubelet/PNS/Emissary
Emissary
Did this work in a previous version? I.e. is it a regression?
Are you pasting thousands of log lines? That's too much information.
# Either a workflow that reproduces the bug, or paste you whole workflow YAML, including status, something like:
kubectl get wf -o yaml ${workflow}

# Logs from the workflow controller:
kubectl logs -n argo deploy/workflow-controller | grep ${workflow}

# The workflow's pods that are problematic:
kubectl get pod -o yaml -l workflows.argoproj.io/workflow=${workflow},workflow.argoproj.io/phase!=Succeeded

# Logs from in your workflow's wait container, something like:
kubectl logs -c wait -l workflows.argoproj.io/workflow=${workflow},workflow.argoproj.io/phase!=Succeeded

Message from the maintainers:
Impacted by this bug? Give it a 👍. We prioritise the issues with the most 👍.

Apologies, this appears to be a problem with Kubernetes.


message-subscriber filterMessageType 1.9 Breaking Change

As of 1.9 filterMessageDescription should be used and the message-subscriber example is failing.

I did see that there is a pull request 121 addressing this. It looks like there is more than just this one change in that request though which is why it may not have been accepted yet.

Created PR 128 to address this.


DOC: Cleaned up docstrings on certain built-in pipeline terms.

Cleaned up the docstrings of certain built-in factors so they get displayed properly in the Quantopian documentation. Also added a brief example to the BusinessDaysSincePreviousEvent docstring.
Before:

After:

Coverage decreased (-0.1%) to 87.071% when pulling 1ddcceee9c8fcad302ac9c6f706ab90fb9928511 on fix-builtin-factor-docstrings into 3d482f062c3eef9e44e41d9c4b61562208adda49 on master.

Coverage decreased (-0.1%) to 87.071% when pulling 1ddcceee9c8fcad302ac9c6f706ab90fb9928511 on fix-builtin-factor-docstrings into 3d482f062c3eef9e44e41d9c4b61562208adda49 on master.


Add history

fix https://github.com/jhipster/jhipster-lite/issues/427

Huge work, thanks a lot @Bolo89 !
Could you try to fix the failure with Windows plz? You can have the details here: https://github.com/jhipster/jhipster-lite/runs/5041186201?check_suite_focus=true
Then I'll review it soon.

bounty claimed at: https://opencollective.com/generator-jhipster/expenses/63793

@Bolo89 : approved


Add tests for branch lengths

Integration tests finished for path matrix, now to add tests on a small example for the edge length inference

Finished


SQL Joins and their applications

In SQL join clause is used to link two or more tables. These tables must contain a linked column(s).
Depending on the user's expectations, different joins are used to achieve this.
These include:

cartesian product
inner join
left join
right join
self join
All these joins specify how an SQL server can use data from a particular table to be able to select rows from a different table or rather joins are used to query and access multiple tales' data depending on their logical relationships.

*Key takeaways

Be able to define an SQL join
Identify and implement different types of joins
Ability to differentiate the joins and their appropriate application
Be able o perform SQL queries in any database using joins

References
N/A

Unfortunately, the following articles have already covered JOIN adequately. Feel free to suggest another topic. Thanks
https://www.section.io/engineering-education/mysql-query-optimization-using-indexes-with-examples/
https://www.section.io/engineering-education/mysql-query-performance-optimization-tips/


Private and public Constructors in generic classes

Hello,
we discovered a bug in DryIoc with private static constructors, which is added automaticlally if  a static property is used. This problem seems fixed in https://github.com/dadhi/DryIoc/pull/185
But the problem also persists with non static private constructors.
This happens due the order of constructors in https://github.com/dadhi/DryIoc/blob/master/src/DryIoc/Container.cs#L11821. ctor is set on the first (the public) constructor, in the next iteration step for the private constructor, ctor is not null and it fails.
Code to reproduce:
class Program
{
    class TestClass<T>
    {
        public TestClass()
        {
        }
        private TestClass(int bar)
        {
        }
    }
    static void Main(string[] args)
    {
        var container = new Container();
        container.Register(typeof(TestClass<>));
        container.Resolve<TestClass<int>>();
    }
}

EDIT:
Dryioc <IP_ADDRESS>

I am unable to reproduce on .NET 4.5 and .NET Core App 2.1.

Okay, that's interesting. Some more background for you:

.net core 2.1
DryIoc.dll 4.0.7 from nuget.org

Message from other Testcase:
Test Name:	Test
Test FullName:	tests.DryIocTest.Test
Test Outcome:	Failed
Test Duration:	0:00:00,128

Result StackTrace:
at DryIoc.Throw.ThrowIfNull[T](T arg, Int32 error, Object arg0, Object arg1, Object arg2, Object arg3) in DryIoc\src\DryIoc\Container.cs:line 10647
   at DryIoc.ReflectionTools.SingleConstructor(Type type, Boolean includeNonPublic) in DryIoc\src\DryIoc\Container.cs:line 11079
   at DryIoc.ReflectionFactory.CreateExpressionOrDefault(Request request) in DryIoc\src\DryIoc\Container.cs:line 8346
   at DryIoc.Factory.GetExpressionOrDefault(Request request) in DryIoc\src\DryIoc\Container.cs:line 7869
   at DryIoc.Container.ResolveAndCacheFactoryDelegate(Type serviceType, IfUnresolved ifUnresolved) in DryIoc\src\DryIoc\Container.cs:line 269
   at DryIoc.Resolver.Resolve[TService](IResolver resolver, IfUnresolved ifUnresolved) in DryIoc\src\DryIoc\Container.cs:line 5893
   at tests.DryIocTest.Test() in tests\DryIocTest.cs:line 28
Result Message:	DryIoc.ContainerException : Unable to find a single constructor in Type tests.DryIocTest.TestClass<Int32> (including non-public=False)

Huh, ok, I've tested on the recent master - previews of v4.1.
Do you need it fixed for v4 or can you go with v4.1 preview? (stable soon)

We thought this bug also occurs in 4.1, but we overlooked your constructors-Method. 4.1 is fine, thank you!


wire up delete from statement

Should be able to do a delete from that has a where clause with both tag and field wheres and a time based where

I'm following this issue.

Duplicate of #1647


Invalid node type after 8a8710c

I got this error when using the latest code in the main branch.
Error executing vim.schedule lua callback: [string "<nvim>"]:66: ...ed-0.6.0/share/nvim/runtime/lua/vim/treesitter/query.lua:161: query: invalid node type at position 178
stack traceback:
	[C]: in function '(for generator)'
	[string "<nvim>"]:66: in function <[string "<nvim>"]:61>

The problem can be reproduced after 8a8710c012c (inclusively). The last good commit is bfa794931.
Besides this one, there is another error when executing the BufEnter autocommand, even on bfa794931.
E5108: Error executing lua ...ed-0.6.0/share/nvim/runtime/lua/vim/treesitter/query.lua:161: query: invalid node type at position 18
stack traceback:
	[C]: in function '_ts_parse_query'
	...ed-0.6.0/share/nvim/runtime/lua/vim/treesitter/query.lua:161: in function 'parse_query'
	...lua/neorg/modules/core/norg/esupports/metagen/module.lua:48: in function 'is_metadata_present'
	...lua/neorg/modules/core/norg/esupports/metagen/module.lua:95: in function 'inject_metadata'
	...lua/neorg/modules/core/norg/esupports/metagen/module.lua:123: in function 'on_event'
	...k-dir/pack/home-manager/start/neorg/lua/neorg/events.lua:154: in function <...k-dir/pack/home-manager/start/neorg/lua/neorg/events.lua:136>
	...k-dir/pack/home-manager/start/neorg/lua/neorg/events.lua:158: in function 'broadcast_event'
	...art/neorg/lua/neorg/modules/core/autocommands/module.lua:42: in function '_neorg_module_autocommand_triggered'
	[string ":lua"]:1: in main chunk

Relevant part of my config:
local parser_configs = require("nvim-treesitter.parsers").get_parser_configs()

parser_configs.norg = {
    install_info = {
        url = "https://github.com/nvim-neorg/tree-sitter-norg",
        files = { "src/parser.c", "src/scanner.cc" },
        -- branch = "main",
        revision = "bfa794931ba8eeb62a15c57b0c65e01b63a6f4d3",
    },
}

parser_configs.norg_meta = {
    install_info = {
        url = "https://github.com/nvim-neorg/tree-sitter-norg-meta",
        files = { "src/parser.c" },
        branch = "main",
    },
}

parser_configs.norg_table = {
    install_info = {
        url = "https://github.com/nvim-neorg/tree-sitter-norg-table",
        files = { "src/parser.c" },
        branch = "main",
    },
}

:version
NVIM v0.6.0
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by nixbld

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/nix/store/qyawd05zszdvcrgbvdhr2q4ay6ac4v9r-neovim-unwrapped-0.6.0/share/nvim"

Run :checkhealth for more info

checkhealth:
nvim-treesitter: require("nvim-treesitter.health").check()
========================================================================
## Installation
  - WARNING: `tree-sitter` executable not found (parser generator, only needed for :TSInstallFromGrammar, not required for :TSInstall)
  - WARNING: `node` executable not found (only needed for :TSInstallFromGrammar, not required for :TSInstall)
  - OK: `git` executable found.
  - OK: `gcc` executable found. Selected from { "gcc", "cc", "gcc", "clang", "cl", "zig" }
    Version: gcc (GCC) 10.3.0
  - OK: Neovim was compiled with tree-sitter runtime ABI version 13 (required >=13). Parsers must be compatible with runtime ABI.

## Parser/Features H L F I J
  - jsonc          ✓ ✓ ✓ ✓ ✓
  - yaml           ✓ ✓ ✓ ✓ ✓
  - nix            ✓ ✓ ✓ . ✓
  - bash           ✓ ✓ ✓ . ✓
  - rust           ✓ ✓ ✓ ✓ ✓
  - lua            ✓ ✓ ✓ ✓ ✓
  - html           ✓ ✓ ✓ ✓ ✓
  - python         ✓ ✓ ✓ ✓ ✓
  - javascript     ✓ ✓ ✓ ✓ ✓
  - css            ✓ . ✓ ✓ ✓
  - norg_meta      . . . . .
  - norg_table     . . . . .
  - json           ✓ ✓ ✓ ✓ .
  - vim            ✓ ✓ . . ✓
  - typescript     ✓ ✓ ✓ ✓ ✓
  - tsx            ✓ ✓ ✓ ✓ ✓
  - norg           ✓ . ✓ . ✓
  - toml           ✓ ✓ ✓ ✓ ✓
  - go             ✓ ✓ ✓ ✓ ✓
  - fish           ✓ ✓ ✓ ✓ ✓

It turned out my neorg is outdated (it's the version as of 2021-12-08 even though it's from the latest unstable nixpkgs). Updating neorg to the latest revision fixes all the problems.


As a developer I want to have a fully defined Codecove flow

Further Details
Codecov reports are now integrated in the PR workflow and are delivering results but some decisions and refinements/configurations are still outstanding.
Estimate
S Storypoints
Tasks Checklist

[x] In the team define which code is excluded from the coverage requirement (reasonably) and implement
[ ] In the team define what code coverage criteria should be set as gates for PRs and implement
[x] Set up a label in the project Readme to show the current project coverage %

Team decided to have initially have a target of 70% with a threshold of 5% for both sub components of the application. If the coverage reaches 80% over the coming release than the target will be increased to 80%.

Replace JESTER with Playwright Test Coverage https://github.com/mxschmitt/playwright-test-coverage

Codecov workflow is set and functional but two points remain open:

Codecov ignore seems to not ignore set paths
Due to point 1 and resulting coverage inflation the PR gate has not been set at the agreed on 80% coverage.


Split Message Processing

Split Message Processing
A split is an entirely different animal from a batch. Splits are created and managed with a lot more work. A split is when a single message creates a ton of work - work that is unsuitable for a single consume method. For instance, a 1.21 gigabyte file may have been uploaded, and now needs to be read, parsed, and processed. Ouch!
Getting it started
Initially, a command such as this is sent to a consumer. And the naive implementation just opens the file and starts to whack away at it. And then, the big file shows up...
interface ProcessFile
{
    Guid ProcessId { get; }
    Uri FileLocation { get; }
}

Sequential Splits
In many situations, it's important to keep the file processing in order. So the easiest solution is to support the sequential processing of the file with subsequent messages.
Arbitrary limits are annoying, so focus on time and say process the file for a minute - then take a break. Let the next consumer continue where you left off. Easy, right?
When a split is started, the original message is delivered to subsequent consumers as a Split<T>. This includes data about the split, which can be used by the consumer to continue processing.
interface Split<T>
{
    // uniquely identifies the split, for eventing purposes
    Guid SplitId { get; }

    // when the split was started
    DateTime StartTimestamp { get; }

    // time passed since the split was started
    TimeSpan Elapsed { get; }

    // the actual consumer time spent processing the splits
    TimeSpan Duration { get; }

    // an arbitrary number used for starting the consumer at the next item
    long Offset { get; }

    // the length of the overall process, if available
    long? TotalLength { get; }

    // this is the Nth split so far
    long SplitIndex { get; }

    // there are this many splits (may not be present/used)
    long? SplitCount { get; }

    // the original message
    T Message { get; }
}

Context
If the split includes contextual information to be passed to subsequent consumers, that context can be included with the split, and it a further defined generic type.
interface Split<T, TSplitContext> :
    Split<T>
    where T : class
    where TContext : class
{
    TSplitContext Context { get; }
}

This gives the consumer the ability to pass information to the consumer as processing is performed, avoiding the header overload syndrome.
Starting the split
It's up to the consumer to decide if it wants to start processing on the first command, or immediately delegate the handling to split consumer with a zero offset. Using the split initially is highly recommended, to keep the behavior consist. Perhaps do setup in the initial consumer, and then cleanup in the initial consumer once completed.
async Task Consume(ConsumeContext<ProcessFile> context)
{
    // just do it, on the same queue
    // perhaps a separate consumer same receive endpoint
    // when this returns, the split is already sent to the queue
    var splitInfo = await context.Split();

    // do it, but on a separate queue address
    // keep the source address around so the completion
    // comes back to this queue?
    await context.Split(_splitConsumerAddress);

    // read some of the file, say a header, and then
    // start the split at the offset
    var offset = await _parser.ReadHeader(...);
    await context.Split(offset);
}

Or the context could be added as well.
await context.Split<ProcessFile, FileContext>(offset, new
{
    FileType = "csv",
    ColumnWidth = 80,
    CharacterEncoding = "utf8"
});

Yes, of course interfaces will be supported, this is MassTransit baby!

The various methods would be available to tailor the behavior to what is desirable, and returns information about the split (such as a Guid to identify it, for whatever reason).
async Task Consume<ConsumeContext<Split<ProcessFile> context)
{
    var file = await _fs.Open(context.Message.Message.FileLocation);
    await file.Seek(context.Message.Offset);

    long offset = context.Offset;
    while (context.Elapsed < TimeSpan.FromSeconds(30) && !file.IsEndOfFile)
    {
        // ... do work ...

        offset += bytesRead;
    }

    await file.IsEndOfFile
        ? context.CompleteSplit(offset)
        : context.NextSplit(offset);
}

The last split would either publish or send the completion, depending upon how it was created.
interface SplitCompleted<T>
{
    Guid SplitId { get; }

    T Message { get; }

    // when the split was started
    DateTime StartTimestamp { get; }

    // time passed since the split was started
    TimeSpan Elapsed { get; }

    // the actual consumer time spent processing the splits
    TimeSpan Duration { get; }

    // the last offset completed
    long LastOffset { get; }

    // the length, if it was available
    long? TotalLength { get; }

    // the number of splits that were processed
    long SplitCount { get; }
}

It likely makes sense to add an early-exit, separate from a Fault<T> that can be used to terminate the split early.
context.TerminateSplit(offset, "File was corrupt");

Perhaps also tie into the delay mechanism to slow your roll. Maybe wait thirty seconds before handling the next split. Would of course use the message scheduler context to schedule the message into the future.
context.NextSplit(offset, x => x.Wait(s: 30));

This would send the message back to the same queue, but as a Split with an initial zero offset.

Split reads like its going to do it right then and there. ReprocessAsSplit ?
Should split take an option Endpoint so you can decide where the split might need to happen?

Should split of options if a resource can be broken up and processed in parallel vs in serial?

context.Elapsed <- :clap:

context.Split() is being used as a verb, and yet a Split is a thing. Therefore, some type of verb needs to be put in front of it.
CreateSplit, StartSplit
The final methods are CompleteSplit (finished completely) or TerminateSplit (aborting early due to a file error).

Feels like there is an opportunity to align the verbs with the same verbs used in Sagas

What about...
Or, is this something better, which hides all the complexity under the hood and makes it a simple two-method class...
public class ProcessFileConsumer :
    ISplitConsumer<ProcessFile, FileContext>
{
    async Task<Split<ProcessFile, FileContext>> Start(InitialContext<ProcessFile> initialContext)
    {
        // do some work

        return initialContext.Split(offset, new
            {
                FileType = "csv"
            });
    }

    async Task<Split<ProcessFile, FileContext>> Process(SplitContext<ProcessFile, FileContext> splitContext)
    {
        // work work work

        return splitContext.Next(offset);
        or
        return splitContext.Complete(offset);
    }
}

Ugh, dare I say...
public class ProcessFileConsumer :
    IPartialConsumer<ProcessFile>
{
    Task First();
    Task Next();
    Task Completed(...);
    Task Faulted(...);
}

How very IObserver<T> - in the end I just want to process a large resource. I want it to be easy to do, given a variety of input types - for instance I process a large XML file currently I i've found the easiest way is to process it one child node at a time. I currently "chunk it out" by each child element and then fire off another message to process that chunk. I want to write my code around each "chunk" because its a logical unit.
That said, I like the First vs Next as it fits my model. I like the Task nature as it works well as I have a bunch of async/await in my codez. I think if you did a study on CSV files and XML files you would cover the large majority of the "large" file use cases.

        public interface IPartialConsumer<in TMessage, TContext>
            where TMessage : class
            where TContext : class
        {
            Task<PartialResult<TContext>>  ConsumeInitial(InitialContext<TMessage> context);

            Task<PartialResult<TContext>> ConsumePartial(PartialContext<TMessage, TContext> context);

            Task ConsumeFinal(FinalContext<TMessage, TContext> context);

            Task InitialFault(InitialContext<TMessage> context, Exception exception);

            Task PartialFault(PartialContext<TMessage, TContext> context, Exception exception);
        }

Thinking is that this is sequential, incremental processing of a single thing, so the terminology is different than splitting with concurrent processing.

A+ for Task orientation
ConsumePartial or ConsumeNext
FaultOnInitial? etc

I like the split of consumer (worker) vs observer


How to add hyperlink to an image shape

Hi Scanny,
Please tell me how do I add hyperlink to an image
Here is my script
from pptx import Presentation
import pptx.util
from pptx.util import Inches, Pt

pptfile = r"C:\Users\prashant\NEW - Copy.pptx"
fgr = "gr.png"

for slide in prs.slides:
    for shape in slide.shapes:
            pic = slide.shapes.add_picture(fgr, pptx.util.Inches(1),
                  pptx.util.Inches(0.2),width=pptx.util.Inches(0.8), height=pptx.util.Inches(0.5))
            pic.name = "Picture 999"

    for shape in slide.shapes:
        if shape.name == "Picture 999":
            shape.address = 'https://github.com/scanny/python-pptx'
            # shape.hyperlink.address = 'https://github.com/scanny/python-pptx'    >>Gives Error

prs.save(pptfile)
print("Done!")

From https://python-pptx.readthedocs.io/en/latest/dev/analysis/txt-hyperlink.html it says its a roadmap item... I too would love this feature to be implemented.


Crashes on launch

Description
I've installed the classic stable version and the preview, both crash either immediately or a few seconds after launch.
Steps To Reproduce

Install
Launch

Requirements
Fix crash upon launch.
Files Version
Unsure
Windows Version
10.0.23619
Log File
N/A

Is there a log file in the app directory?

I'd be happy to check, can you direct me to where that location is?
From: Yair @.>
Sent: Sunday, January 21, 2024 6:59 PM
To: files-community/Files @.>
Cc: waughla @.>; Author @.>
Subject: Re: [files-community/Files] Crashes on launch (Issue #14510)
Is there a log file in the app directory?

Reply to this email directly, view it on GitHubhttps://github.com/files-community/Files/issues/14510#issuecomment-1902811076, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AG7D4QV7ISX3O7XC4444HZ3YPWTUHAVCNFSM6AAAAABCEJWGL6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMBSHAYTCMBXGY.
You are receiving this because you authored the thread.Message ID<EMAIL_ADDRESS>

To upload the log, access it from Settings -> About -> Open log location; Or         - Select thedebug.logfile from%localappdata%\Packages\49306atecsolution.FilesUWP_et10x9a9vyk8t\LocalState         - Drag and drop the file to upload as an attachment

That package directory does not exist on my computer.

From: Yair @.>
Sent: Sunday, January 21, 2024 10:01 PM
To: files-community/Files @.>
Cc: waughla @.>; Author @.>
Subject: Re: [files-community/Files] Crashes on launch (Issue #14510)
    - Select the `debug.log` file from `%localappdata%\Packages\49306atecsolution.FilesUWP_et10x9a9vyk8t\LocalState`
    - Drag and drop the file to upload as an attachment```

—
Reply to this email directly, view it on GitHubhttps://github.com/files-community/Files/issues/14510#issuecomment-1903027153, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AG7D4QXS4SGQQHSIKWC2SSDYPXI7VAVCNFSM6AAAAABCEJWGL6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMBTGAZDOMJVGM.
You are receiving this because you authored the thread.Message ID: @.***>

That's for the store version, this is for the preview version %localappdata%\Packages\FilesPreview_1y0xx7n9077q4\LocalState.

OK I did a reinstall and it's the same crash. Attaching log from preview.
Stable classic install crashes at the same point, right after Creative Cloud.
From: Yair @.>
Sent: Sunday, January 21, 2024 10:12 PM
To: files-community/Files @.>
Cc: waughla @.>; Author @.>
Subject: Re: [files-community/Files] Crashes on launch (Issue #14510)
That's for the store version, this is for the preview version %localappdata%\Packages\FilesPreview_1y0xx7n9077q4\LocalState.

Reply to this email directly, view it on GitHubhttps://github.com/files-community/Files/issues/14510#issuecomment-1903054938, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AG7D4QRSSL3CO547TJDK5FLYPXKH3AVCNFSM6AAAAABCEJWGL6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMBTGA2TIOJTHA.
You are receiving this because you authored the thread.Message ID: @.***>

Its crashing at every cloud provider, Adobe, Dropbox, iCloud, OneDrive. Both versions.
I've uninstalled the first three but I cannot touch OneDrive, of which I have three accounts.
From: Kevin Waugh
Sent: Monday, January 22, 2024 12:46 AM
To: files-community/Files @.***>
Subject: RE: [files-community/Files] Crashes on launch (Issue #14510)
OK I did a reinstall and it's the same crash. Attaching log from preview.
Stable classic install crashes at the same point, right after Creative Cloud.
From: Yair @.>
Sent: Sunday, January 21, 2024 10:12 PM
To: files-community/Files @.>
Cc: waughla @.>; Author @.>
Subject: Re: [files-community/Files] Crashes on launch (Issue #14510)
That's for the store version, this is for the preview version %localappdata%\Packages\FilesPreview_1y0xx7n9077q4\LocalState.

Reply to this email directly, view it on GitHubhttps://github.com/files-community/Files/issues/14510#issuecomment-1903054938, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AG7D4QRSSL3CO547TJDK5FLYPXKH3AVCNFSM6AAAAABCEJWGL6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMBTGA2TIOJTHA.
You are receiving this because you authored the thread.Message ID: @.***>

It looks like the log file wasn't attached, I think you need to upload directly to GitHub instead of replying to the email.

@waughla


legend size defaults to 5 when data has length of 1

I am trying to flip between two different graphs and the data is sometimes more than one item and sometimes 1 item. There is no way that I can see to override the default of 5 items when the length of the data is only 1.

Could you provide an example? Which type of legend are you using?

@natehardy closing this for now, let me know if you have an example to provide


Loans: Add reverse rebalancing

https://docs.google.com/document/d/17r9ephKwyuHP64WDR2qdLwtJi8JXfydxrVT7_TnwhpQ/edit

This is blocked by another issue related to assessing rebalancing against all users instead of batches of users

Take the minimum of two numbers:
min(amountNeededToCorrect, 0.05% of group's debt)

We should consider having two separate lists for Reverse Rebalancing vs normal rebalancing or two cursor/index, but this could introduce other issues.


chore(windicss): upgrade templates for v2

Types of changes

[ ] Bug fix (a non-breaking change which fixes an issue)
[x] New feature (a non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Description
Use v2 of the module
Checklist:

[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[ ] I have added tests to cover my changes (if not applicable, please state why)

Is it possible to get this merged? Having quite a few issues pop up from it: https://github.com/windicss/nuxt-windicss/issues/134#issuecomment-969740725


how to change the path="Download/" ?

i want to save the downloaded pictures inside my project folder. i cant change the path in this<external-path name="myexternalimages" path="Download/" />

Why do you still file issues for this project? See README!


change movenet to batch inference

Hi, movenet has pretty good performance and accuracy. So I wanna deploy it on my T4 gpu server.
It accepts input tensor with 4 dims. While the first dim (batch size) cannot be larger than 1.
At the same time, I checked the input dims of tflite model from tf.hub. It is fixed to 1 as well.
I do not know how to change the saved model to dynamic batch size or simply constant number like 10.
So could any one provide batch version of movenet or tell me how to modify by myself?

If you plan to use the model only for inference, then the simplest approach is to apply the model to each tensor in the batch. To speed this up, you could wrap it in tf.map_fn or tf.vectorized_map - see documentation for tradeoffs between the two functions.
Another idea is to manually rewire the saved_model.pb, but this is very error-prone.

@maringeo @arghyaganguly
Thanks for your reply. Actually, the reason I require batch inference is to increase throughput of my gpu. So after reading the doc for tf.map_fn and  tf.vectorized_map. I think they works like for loop and just vectorize to parallel simple computations rather than model inference (need time to double check though).
And for manually rewrite the saved_model.pb. Yes, I was trying but there is no generally used method found so far. Also don't understand why it is error-prone.
Maybe another way is to migrate from gpu to cpu for multi-instance computation.
By the way, I was always curious if models designed for edge inference (movenet for example) can be migrated to gpu server as long as I don't require such high accuracy. Or they are specific for edge device and not quite fit for production on server size which require high throughput.

@maringeo @arghyaganguly Thanks for your reply. Actually, the reason I require batch inference is to increase throughput of my gpu. So after reading the doc for tf.map_fn and tf.vectorized_map. I think they works like for loop and at most vectorize to parallel simple computations rather than model inference (need time to double check though). And for manually rewrite the saved_model.pb. Yes, I was trying but there is no generally used method found so far. Also don't understand why it is error-prone. Maybe another way is to migrate from gpu to cpu for multi-instance computation. By the way, I was always curious if models designed for edge inference (movenet for example) can be migrated to gpu server as long as I don't require such high accuracy. Or they are specific for edge device and not quite fit for production on server side which require high throughput.

Hey! I would like to do the same, to increase my GPU throughput and would like to un batch wise inference on my single GPU. Have you found any solution to that yet?


New Version: VMware.WorkstationPlayer version <IP_ADDRESS>81411

[x] Have you signed the Contributor License Agreement?
[x]Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?

[x] Does your manifest conform to the 1.4 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

@stephengillie - here's another one...thank you!


GoArm Versions

This patch correctly sets the GoArm version and architecture in accordance with the GoArm version rules.

Codecov Report

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

@@           Coverage Diff           @@
##           master     #555   +/-   ##
=======================================
  Coverage   28.42%   28.42%
=======================================
  Files          34       34
  Lines        2016     2016
=======================================
  Hits          573      573
  Misses       1381     1381
  Partials       62       62

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 162d6b9...17db1d1. Read the comment docs.


Fix ODX 2.0 compatibility

ODX file had 2.0.1 as model version

thanks. my exposure to ODX 2.0 datasets is rather limited (read: non-existant), so I suppoose you'll continue to have the "honor" of being the guardian of 2.0 compatibility ;)


Select component improvements

#390
#308
#509
Select Improvements

[x] Add xsmall badges to be used in the Select component
[x] Stop select changing heights on focus
[x] Update styles to match Sketch library
[x] Stop non-active Select labels rendering above other components

@thyhjwb6 Thanks for the feedback.
Regarding snapshot tests: I'm unsure how we would use Chromatic to test for this. The bug originated when the stacking context for the Select wasn't scoped to the component. This meant the Label would be visible above other active selects. We can make a storybook story for two selects, however I don't know if Chromatic supports the ability to trigger different component states? (e.g. triggering the focus state for the top Select to see if the label from the bottom select bleeds through)


Replace scanpy.pl.spatial with squidpy.pl.spatial_scatter

Replace scanpy.pl.spatial with sq.pl.spatial_scatter in tutorials and examples

seems you are not running pre-commits since black fails.


Upgrade React Table to V8

Need
React table V8 has been released https://github.com/TanStack/table this is a complete rewrite in TypeScript that also has some breaking changes in the API. This also has some features that make client-side facet search easier!  We want to upgrade but also want to understand first the changes that this will require in the codebase.
Approach

[ ] Review the v8 documentation and current v7 implementation and explore on a branch what it will take to upgrade.
[ ] Create/Present an upgrade plan
[ ] Upgrade once the upgrade plan is approved and scheduled.

Where React table is currently used

@types/react-table-config.d.ts
Used to redeclare react-table's module.
This module was declared to react-table v7 play well with typescript.

app/apis/azul/common/fileTransformer.ts
Just import react-table's FilterValue type.

app/components/Table/functions.ts
Just import react-table's ColumnInstace type.

app/components/TableCreator/tableCreator.tsx
Import react-table's CellProps and Column types, and create the column configuration used by the react-table's hook and the cell component.

app/components/Table/table.tsx
Uses react-table's hooks to create a table component.
This file uses the API to create a controlled and uncontrolled table.
Also, uses the sort and pagination plugins.

Upgrade approach

@types/react-table-config.d.ts might not be needed anymore, since v8 fully supports typescript. We can try to delete this file.
Create ColumnDefs (v8) is basically the same as creating Columns (v7). Just need to adjust some properties' names.
The sorting function will need changes, since now sort handlers are passed as hook's options, instead of being called by component's onClick. However, this shouldn't be difficult. v8 Still supports manual sorting, which we use to create an uncontrolled table.
Similarly to sorting, pagination will also require some changes. Since the handler functions are passed as hook's options, instead of being called by component's onClick. Pagination still has the manual pagination option, which we currently use to create an uncontrolled table.
Rendering the table on v8 is basically the same as v7. Iterating over the headers and calling the render cell function. Might be necessary just to change the called function's names.

Conclusion

Upgrade to react's table v8 is not difficult. I didn't find any feature that we currently use that is not supported by the new version. We'll need to change the properties' names for the table config and adjust the handlers for sorting and paging.

@BruceRodrigues thanks for the detailed review. Let's go ahead and implement the V8 upgrade! Thanks. D


migrate to pnpm

SInce pnpm v7 and husky are not compatible, Github action failed to install dependencies. I uninstalled husky from our repository.
All commands run by husky are actually in Github action already, there is no  problem without husky.


Conversion of our content to a database

We should take the content in our yml files and convert it to a relational (SQL?) database. Therefore, we need to identify mandatory and optional meta data + we need to design the structure carefully.
We should also explore how similar databases handle their content, because we want to be compatible with them:

https://biii.eu
https://bio.tools/

I guess https://tess.elixir-europe.org is the service you should look at as well. What functionality are you missing on TeSS?

let me check it later :)

Sounds good. Just make sure it's not too late and you are redoing work that was already done :)

redoing work

Hi @bgruening, may I ask, does 'redoing work' mean we have our own database?

Mh, not sure I understand your question, sorry.
But TeSS is a platform for discovering online information and content, including training materials, events and interactive tutorials. So my naive assumption is that they have a database, a webfrontend and a sophisticated search system that overlaps a bit with this project. So it might be worthwhile to look at this.
TeSS is also scraping content from other websites. So you could also annotate your training here with bioschemas and TeSS will automatically find our trainings and integrate it into their DB/website.

ahhh, that's my problem. My question was in relation to your comment "you are redoing work that has already been done :)", which part of the work is this referring to? At first I misunderstood you to mean that we already have our own database。