Cannot compile on windows following thorvg commit #8866c36

Godot version
4.0 custom 5bc87025f41566179352ae62478fcb2a141cfdb0
System information
Windows 10, GTX 1060
Issue description
Following commit 8866c365829896bf6b4c8ec4be25c161ccaf7282 I think, because it work before.
I cannot compile anymore on Windows
scons: Reading SConscript files ...

scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly
File "E:/Developpement/msys64/home/antca/godot/SConstruct", line 3, in <module>
Configuring for Windows: target=release_debug, bits=default
Using MinGW
Checking for C header file mntent.h... (cached) no
scons: done reading SConscript files.
scons: Building targets ...
[  5%] Linking Static Library main/libmain.windows.opt.tools.64.a ...
[ 22%] Compiling thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp ...
=====
b'thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp: In function \'const char* _simpleXmlSkipXmlEntities(const char*, const char*)\':\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:104:17: error: \'strncmp\' was not declared in this scope\n  104 |             if (strncmp(itr, xmlEntity[i], xmlEntityLength[i]) == 0) {\n      |                 ^~~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:33:1: note: \'strncmp\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\n   32 | #include "tvgXmlParser.h"\n  +++ |+#include <cstring>\n   33 | \nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp: In function \'const char* _simpleXmlUnskipXmlEntities(const char*, const char*)\':\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:122:17: error: \'strncmp\' was not declared in this scope\n  122 |                 strncmp(itr - xmlEntityLength[i], xmlEntity[i], xmlEntityLength[i]) == 0) {\n      |                 ^~~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:122:17: note: \'strncmp\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp: In function \'bool simpleXmlParseW3CAttribute(const char*, simpleXMLAttributeCb, const void*)\':\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:461:17: error: \'strlen\' was not declared in this scope\n  461 |     end = buf + strlen(buf);\n      |                 ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:461:17: note: \'strlen\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:468:28: error: \'strchr\' was not declared in this scope\n  468 |         char* sep = (char*)strchr(buf, \':\');\n      |                            ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp:468:28: note: \'strchr\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\n'
=====
scons: *** [thirdparty/thorvg/src/loaders/svg/tvgXmlParser.windows.opt.tools.64.o] Error 1
scons: building terminated because of errors.
[Time elapsed: 00:00:05.590]

Steps to reproduce
Git pull
Compile on windows "scons platform=windows use_mingw=yes target=release_debug use_lto=yes"
Minimal reproduction project
No response

Does this solve it?
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
index 2e3d5928d9..28122b71f1 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
@@ -22,6 +22,7 @@

 #include <ctype.h>
 #include <string>
+#include <cstring>

 #ifdef _WIN32
     #include <malloc.h>

No, but different error

scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly
File "E:/Developpement/msys64/home/antca/godot/SConstruct", line 3, in <module>
Configuring for Windows: target=release_debug, bits=default
Using MinGW
Checking for C header file mntent.h... (cached) no
scons: done reading SConscript files.
scons: Building targets ...
[ 22%] Compiling thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp ...
=====
b'thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp: In function \'std::string svgUtilURLDecode(const char*)\':\nthirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp:218:19: error: \'strlen\' was not declared in this scope\n  218 |     auto length = strlen(src);\n      |                   ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp:26:1: note: \'strlen\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\n   25 | #include "tvgSvgUtil.h"\n  +++ |+#include <cstring>\n   26 | \nthirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp: In function \'std::string svgUtilBase64Decode(const char*)\':\nthirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp:246:19: error: \'strlen\' was not declared in this scope\n  246 |     auto length = strlen(src);\n      |                   ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp:246:19: note: \'strlen\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\n'
=====
scons: *** [thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.windows.opt.tools.64.o] Error 1
scons: building terminated because of errors.
[Time elapsed: 00:00:05.888]

Try adding #include <cstring> to the /thirdparty/thorvg/inc/thorvg.h, it seems to be missing from multiple files.
It's MinGW only issue, MSVC build it without problems.

This fixes it for me:
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
index def8ae169a..cf103774c5 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
@@ -51,6 +51,7 @@

 #define _USE_MATH_DEFINES       //Math Constants are not defined in Standard C/C++.

+#include <cstring>
 #include <fstream>
 #include <float.h>
 #include <math.h>
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
index 2b62315de8..32685ee620 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
@@ -50,6 +50,7 @@

 #define _USE_MATH_DEFINES       //Math Constants are not defined in Standard C/C++.

+#include <cstring>
 #include <math.h>
 #include <clocale>
 #include <ctype.h>
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
index 8701fe32b1..ae17634f31 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
@@ -49,6 +49,7 @@
 */

+#include <cstring>
 #include <string>
 #include "tvgMath.h"
 #include "tvgSvgLoaderCommon.h"
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
index d5b9cdcf7b..9f269b29a2 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
@@ -20,6 +20,7 @@
  * SOFTWARE.
  */

+#include <cstring>
 #include <math.h>
 #include <memory.h>
 #include "tvgSvgUtil.h"
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
index 2e3d5928d9..1571aa4e25 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
@@ -20,6 +20,7 @@
  * SOFTWARE.
  */

+#include <cstring>
 #include <ctype.h>
 #include <string>

diff --git a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
index 9450d80e88..9dd57e5a89 100644
--- a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
+++ b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
@@ -24,6 +24,8 @@
 #include "tvgTvgSaver.h"
 #include "tvgLzw.h"

+#include <cstring>
+
 #ifdef _WIN32
     #include <malloc.h>
 #else

Try adding #include <cstring> to the /thirdparty/thorvg/inc/thorvg.h, it seems to be missing from multiple files. It's MinGW only issue, MSVC build it without problems.

This one is correct! Thanks

I can't compile on MSVC2017 (14.1) because of the same library. I get the following error:
tvgSwRenderer.cpp
thirdparty\thorvg\src\lib\sw_engine\tvgSwRenderer.cpp(597): error C3861: 'max': identifier not found
thirdparty\thorvg\src\lib\sw_engine\tvgSwRenderer.cpp(598): error C3861: 'max': identifier not found
thirdparty\thorvg\src\lib\sw_engine\tvgSwRenderer.cpp(599): error C3861: 'min': identifier not found
thirdparty\thorvg\src\lib\sw_engine\tvgSwRenderer.cpp(600): error C3861: 'min': identifier not found
scons: *** [thirdparty\thorvg\src\lib\sw_engine\tvgSwRenderer.windows.tools.64.obj] Error 2
scons: building terminated because of errors.
[Time elapsed: 00:00:38.518]

@wareya This should now be fixed by #56989.

@wareya This should now be fixed by #56989.

Yep, that fixed it. Thanks!

I thnk problem is back with some recent commit
b'thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp: In function \'void _copyStyle(SvgStyleProperty*, const SvgStyleProperty*)\':\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:43:56: error: \'strdup\' was not declared in this scope\n   43 |         if (from->fill.paint.url) to->fill.paint.url = strdup(from->fill.paint.url);\n      |                                                        ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:62:60: error: \'strdup\' was not declared in this scope\n   62 |         if (from->stroke.paint.url) to->stroke.paint.url = strdup(from->stroke.paint.url);\n      |                                                            ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp: In function \'void cssCopyStyleAttr(SvgNode*, const SvgNode*)\':\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:123:62: error: \'strdup\' was not declared in this scope\n  123 |     if (from->style->clipPath.url) to->style->clipPath.url = strdup(from->style->clipPath.url);\n      |                                                              ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:124:54: error: \'strdup\' was not declared in this scope\n  124 |     if (from->style->mask.url) to->style->mask.url = strdup(from->style->mask.url);\n      |                                                      ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp: In function \'SvgNode* cssFindStyleNode(const SvgNode*, const char*, SvgNodeType)\':\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:135:73: error: \'strcmp\' was not declared in this scope\n  135 |             if ((!title && !(*child)->id) || (title && (*child)->id && !strcmp((*child)->id, title))) return (*child);\n      |                                                                         ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:24:1: note: \'strcmp\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\n   23 | #include "tvgSvgCssStyle.h"\n  +++ |+#include <cstring>\n   24 | \nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp: In function \'SvgNode* cssFindStyleNode(const SvgNode*, const char*)\':\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:149:44: error: \'strcmp\' was not declared in this scope\n  149 |             if ((title && (*child)->id && !strcmp((*child)->id, title))) return (*child);\n      |                                            ^~~~~~\nthirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp:149:44: note: \'strcmp\' is defined in header \'<cstring>\'; did you forget to \'#include <cstring>\'?\n'
=====
[ 27%] scons: *** [thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.windows.opt.tools.64.o] Error 1```


Can not create window when running through renderdoc in latest git

I tend to use renderdoc under windows for OpenGL-debugging, and ever since I compiled GLFW from the latest git I haven't been able to debug my applications with renderdoc. Switching GLFW back to <IP_ADDRESS> (NuGet in Visual Studio) fixes this issue.
This might not be GLFW's fault, but I still think it would be very useful to track this issue down. Renderdoc is the best (if not the only good) GPU debugger out there for windows, that works with both AMD and NVidia, I think it's important to preserve compatibility with it.
EDIT: Missed crucial info: The problem I get is glfwCreateWindow fails, complaining about "Win32 failed to create window"

Not trying to step on any toes, but I tried reproducing this (since it sounds like it's likely a renderdoc bug), but running with the 'heightmap' sample from master it works OK for me.

@baldurk Hmm same results for me, heightmap examples work through renderdoc. I will try to create a minimal reproducable example!

I've had a similar issue in my projects, but I'm not sure if it's related. In my case it was because I called 'glfwInit' in an entry point within a dll, which my main project was linked to. This works just fine when running the program regularly, but when running it via RenderDoc, the problem the OP posted occurs.
If I don't use the dll entry point to initialize GLFW, RenderDoc can run it without a problem.
I've attached a minimal example to this post, but as I said, I'm not sure it's actually related.
test_glfw.zip

@Sciolyte Do not call those functions from DllMain. There are severe restrictions on what you are allowed to do from DllMain and GLFW does many of them at init.

 Changing this to a more expected behaviour (non-static singleton instance for every class instance that needed it) fixed the issue for me

@haikarainen Thank you for the follow-up!


Output as tensor/image array to create pipeline

Hi Team ,
Have you created any example on face recoginition. I can see detection related example but create complete pipeline does your API support output as tensor/np array rather than saving in file.

The code can be modified to return output as tensor or numpy array, the bounding boxes and scores. Will check and revert back to you on it.


Response Compression

Middleware and other components
Client need to advertise they accept encoding
Server side - 3 components:
behind IIS - build it dynamic response compression -- IIS has a predefined list it will attempt to compress - well documented elsewhere. If you app is behind IIS you get this, must explicitly turn off.
-- IIS vs. Middleware, might as well use IIS, not sig different
-- NGinx similar - do not use middleware,
Middleware for kestrel or web-listener directly exposed to the client without IIS/nginx
Middleware doesn't support wildcards in  - text/* must say text/html and enumerate 8 defaults -see this
sample in repro shows how to supply your own see this
highlight enable for HTTPS
compression + encryption has risks. See https://en.wikipedia.org/wiki/CRIME - ask Barry for ref.
must opt into it.

Unlike IIS, the middleware does not add a Vary: Accept-Encoding header on the way out when it compresses the response. Should I ask over in Basic Middleware repo about that?

Unlike IIS, the middleware does not add a Vary: Accept-Encoding header on the way out when it compresses the response.

@JunTaoLuo

Unlike IIS, the middleware does not add a Vary: Accept-Encoding header on the way out when it compresses the response.

There is an issue for this now at https://github.com/aspnet/BasicMiddleware/issues/187

nginx nor apache does compression by default, you must enable it in the config.

Good community articles

https://blogs.msdn.microsoft.com/webdev/2016/10/25/announcing-asp-net-core-1-1-preview-1/
https://ievangelist.github.io/blog/asp-net-core-optimization/

"Thank you, sir! May I have another?" - Chip (Kevin Bacon) - Animal House, 1978
@Rick-Anderson @tdykstra @spboyer I'm on a bit of a roll with middleware-type docs. Is this one covered? I'm about to be free, as the bulk of the work is done now on Response Caching Middleware and URL Rewriting.

Go for it.

Thanks ... and I'm glad you said 'yes' ... I already started working on it. :smile:

@Rick-Anderson Do you want me to take what's above and build the outline? --- or do you want an outline from a dev on the team?

WIP on this ... I'm still looking at online resources.

Introduction

Response compression defined
Value of response compression + size savings example
Accept-Encoding header

Response Compression Middleware

Mention/link sample
MimeTypes

Default list reference
Wildcards not supported

When to use Response Compression Middleware

Not behind IIS/NGinx/Apache
How to disable IIS compression with web.config

Security - https://en.wikipedia.org/wiki/CRIME + discuss with [@]blowdart
Package - Microsoft.AspNetCore.ResponseCompression
Service configuration

Providers
i. GzipCompressionProvider and GzipCompressionProviderOptions
ii. CustomCompressionProvider
MimeTypes (how to add them)

Add Vary: Accept-Encoding header manually https://github.com/aspnet/BasicMiddleware/issues/187

Additional Resources

Application Startup - startup.md
Middleware - middleware.md
Apache response compression reference
NGinx response compression reference
IIS Response Compression Module reference

@danroth27  can you let me know the dev contacts for this? I'll set up a skype meeting to go over the outline.

@muratg
I think it's @Tratcher

@Tratcher Do you want to co-author this?
I'll do the draft .... and then you'll have the option of :boy: :gun: shooting me in the head when you see it. :smile:

Outline looks good, though it almost goes too deep into HTTP compression and middleware implementation details. Do you need more detail from me? If so then schedule something.

goes too deep into HTTP compression and middleware implementation details

I'll keep that in mind. We can always cut some bits out if the draft goes too far anywhere. I'm working on this one tonight, so put the brakes on me if we need more discussion.

@tdykstra I've updated this outline to match what we're doing for URL Rewriting Middleware. It moves the middleware section headings up one level. I'll title it Response Compression Middleware and place it in the Performance area if that's the correct spot.

You can just say "Using compression with dynamically generated pages can lead to security problems such as the Crime and Breach attacks, Linking to wikipedia is fine.

Linking to wikipedia is fine.

Ok, so you prefer Wikipedia? I'm not a big fan myself, but I'll happily swap the linked content on your advice.

I think people know wikipedia as a general resource, so they trust it. Whether that's a good idea or not is out of scope :D

Whether that's a good idea or not is out of scope

... but when explaining complicated concepts in the docs tho. :smile:
I wish we had an MSDN security doc that we could link there. Let me look around and see if MS has anything better, and I'll let you know if I find anything good. From an educational perspective, Wikipedia makes me cringe a little bit.
I'll update the text of that section when I get back from the :muscle: gym :muscle:. I have a few :beer: calories I need to address here. lol

I think "can lead to security problems" covers it. Honestly I'm not sure I'd want to see an MSDN beginners guide to CRIME grin

I really don't think they even have anything good. I did a quick check and nothing turned up.
I'll swap for Wikipedia at your discretion. I'll get that in this afternoon.

It's not clear what happens when both IIS compression and the middleware are enabled. Does IIS hosting disable the middleware? If an app can be hosted on both IIS and Kestrel, is it needed to explicitly disable the middleware by verifying in code if it's currently hosted on IIS?

@malylemire1 ... We've recommended going with the IIS compression and not using the middleware ...
https://learn.microsoft.com/aspnet/core/performance/response-compression#when-to-use-response-compression-middleware
Hypothetically, one wouldn't sweat Response Compression Middleware when you're just testing locally with IIS Express with the IIS module working.
I'm going to lock this down because we don't discuss/work on closed issues/PRs. You can open an issue from the bottom of an English-US article with the This page feedback button and form, which adds metadata to your issue and pings the author of the article automatically.
However, I think to discuss this further because it might not be an actionable scenario for docs, you might just want to reach out to the community. I kind'a suspect that that might be the response you get here, so you might just want to reach out on public support channels to discuss your scenario further. We recommend ...

Stack Overflow
ASP.NET Core Slack
ASP.NET Gitter


UnknownAllocationDevice for XNNPACK

Hey there, thanks for the nice package. I am trying to use xnnpack but get the following error:
called `Result::unwrap()` on an `Err` value: UnknownAllocationDevice("XnnpackExecutionProvider")

This is my code:
ort = { version = "2.0.0-rc.5", features = [ "xnnpack"] }

        let session = Session::builder()
            .unwrap()
            .with_optimization_level(GraphOptimizationLevel::Level3)
            .unwrap()
            .with_intra_threads(4)
            .unwrap()
            .with_execution_providers([ XNNPACKExecutionProvider::default().build().error_on_failure())
            .unwrap()
            .commit_from_memory(onnx_model)
            .unwrap();

As I understand for XNNPACK static libraries should be provided automatically. Is there another option I am not seeing?
Thanks!

This was fixed in https://github.com/pykeio/ort/commit/6807a680570757943a1f39b89eb4b61c35f75f5e; until rc6 releases, you can use ort as a git dependency:
[dependencies]
ort = { git = "https://github.com/pykeio/ort.git", rev = "6807a680570757943a1f39b89eb4b61c35f75f5e", features = [ "xnnpack" ] }

Ah ok, thanks for the Info! :)


NaN.0 showing up as evaluation of math.Acos(1.1)

What version of CUE are you using (cue version)?

$ cue version
cue version v0.8.2

go version go1.22.2
      -buildmode exe
       -compiler gc
       -trimpath true
     CGO_ENABLED 0
          GOARCH arm64
            GOOS darwin

Does this issue reproduce with the latest stable release?
I belive that's the version I have.
What did you do?
I ran cue eval -e "math.Acos(1.1)" - </dev/null and saw that the output was:

NaN.0

What did you expect to see?
From reading the spec it appears that Cue the language does not have the concept of NaN and Infinity values for floats.  It means that it need to handle expressions that generate NaN or Infinity in some other way, like signaling an error.
Other other expressions that generate such values that I tried seems to give me an error, for instance:
$ cue eval -e "0.0 / 0.0" - </dev/null
failed arithmetic: division undefined:
    --expression:1:1

What did you see instead?

NaN.0

Which is not valid cue code at all.

See https://github.com/cue-lang/cue/issues/3168; I'm going to close this as a duplicate but please feel free to add more cases or examples as comments under that issue.


Use securityConfigSecret  correctly

Description
Fix problem with securityConfigSecret not mounting
Issues Resolved
no issue created
Check List

[ x ] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Hi @rmarku you need to update charts version, update changelog, and sign off the DCO.
Please see this PR for example: #152
Thanks.

Also it will be good to create an issue for it?

Any updates @rmarku ?
Thanks.

Are there any updates here? I have found the same issue with securityConfigSecret, and was about to open another issue with the same resolution, but found this open... So any updates?

Are there any updates here? I have found the same issue with securityConfigSecret, and was about to open another issue with the same resolution, but found this open... So any updates?

Hi @JunaidChaudry I didnt see any updates from the owner of this PR.
If you have any solution, would you kindly open a new PR to fix it?
We would close this PR once a new one is up.
Thanks.

@peterzhuamazon , I just created a new PullRequest# 209 https://github.com/opensearch-project/helm-charts/pull/209 for the bug. Let me know if I should also create an issue for it

Hi @rmarku we are closing this one in favor of #209 since there is no response from your for some time.
Thanks.


Chat history across devices

Steps to Reproduce:

Go chat with copilot using same github account buf different devices
I can't seem to get access of different chat history across devices

https://github.com/microsoft/vscode-copilot-release/issues/991


ansible/missioncontrol - Issue 120 missioncontrol variables

PR Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

[x] Title of the PR starts with installer/product name (e.g. [ansible/artifactory])
[x] CHANGELOG.md updated

What this PR does / why we need it: Fixes #120 where there are two variables for missioncontrol_version
Which issue this PR fixes : fixes #120
Special notes for your reviewer:

I have read the CLA Document and I hereby sign the CLA

recheckcla

I have read the CLA Document and I hereby sign the CLA

recheckcla

Thanks for the PR - we identified this in our internal testing, and  already fixed internally  , It will be released along with next release

Closing this , Fix is available in #124 124


worker status saved after changing it's state

worker status saved after changing it's state

Awesome, thx for help


Writable socket not set up correctly

2024-07-02 08:02:58,661 ERROR howitz VENV/lib/python3.11/site-packages/howitz/error_handlers.py:46:: Exception in /get_events: :
Traceback (most recent call last):
  File "VENV/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "VENV/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "VENV/lib/python3.11/site-packages/howitz/endpoints.py", line 503, in get_events
    table_events = get_current_events()
                   ^^^^^^^^^^^^^^^^^^^^
  File "VENV/lib/python3.11/site-packages/howitz/endpoints.py", line 166, in get_current_events
    current_app.event_manager.get_events()
  File "VENV/lib/python3.11/site-packages/zinolib/controllers/zino1.py", line 576, in get_events
    self._verify_session()
  File "VENV/lib/python3.11/site-packages/zinolib/controllers/zino1.py", line 526, in _verify_session
    raise ValueError
ValueError

_verify_session raises ValueError if the session hasn't been set up correctly. The Zino1EventManager must have been constructed correctly by running Zino1EventManager(session) and the session cannot be None.
Given a manager-object manager:
If we have lost the connection and it has been cleaned up correctly (via manager.disconnect()`` then manager.session.requestwill be None, which will raise the ValueError next time something runs_verify_session`.


tesseract:x64 build failure

Host Environment

OS: Windows 10

To Reproduce
Steps to reproduce the behavior:
./vcpkg install tesseract:x64-windows
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:136 (message):
    Command failed: C:/DEV/vcpkg/downloads/tools/cmake-3.14.0-windows/cmake-3.14.0-win32-x86/bin/cmake.exe --build . --config Debug --target install -- -v
    Working Directory: C:/DEV/vcpkg/buildtrees/tesseract/x64-windows-dbg
    See logs for more information:
      C:\DEV\vcpkg\buildtrees\tesseract\install-x64-windows-dbg-out.log

Call Stack (most recent call first):
  scripts/cmake/vcpkg_build_cmake.cmake:96 (vcpkg_execute_build_process)
  scripts/cmake/vcpkg_install_cmake.cmake:24 (vcpkg_build_cmake)
  ports/tesseract/portfile.cmake:47 (vcpkg_install_cmake)
  scripts/ports.cmake:91 (include)

Hi @traczu120, thanks for posting this issue. I can't reproduce it locally with vcpkg latest source. Could you provide your build log?
C:\DEV\vcpkg\buildtrees\tesseract\install-x64-windows-dbg-out.log
Thanks.

@traczu120 , we can't repro this issue, everything build successfully for me, please reopen this issue and attach the failure logs if it still be an problem for you.


AddTokensToLock test

Closes: #XXX
Description

For contributor use:

[ ] Targeted PR against correct branch (see CONTRIBUTING.md)
[ ] Updated relevant documentation (docs/) or specification (x/<module>/spec/)
[ ] Added a relevant changelog entry to the Unreleased section in CHANGELOG.md
[ ] Re-reviewed Files changed in the Github PR explorer

Codecov Report

Merging #926 (1e991a1) into main (ccccc53) will decrease coverage by 0.00%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #926      +/-   ##
==========================================
- Coverage   20.53%   20.53%   -0.01%
==========================================
  Files         193      193
  Lines       24997    24996       -1
==========================================
- Hits         5134     5133       -1
  Misses      18921    18921
  Partials      942      942

Impacted Files
Coverage Δ

x/lockup/keeper/synthetic_lock.go
67.56% <100.00%> (-0.29%)
:arrow_down:

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 ccccc53...1e991a1. Read the comment docs.

Nice! This is great that it tests that the accumulation store for AddTokensToLock works, and every different method of querying the synthetic locks!
We also need tests for superfluid side, for doing AddTokensToLock on a lock with a superfluid delegation. We need to check that it increases the corresponding delegation / maintains invariants accordingly. (Though perhaps best done by making a function for all the invariants expected)


Bug: Changelog template not included in npm package

Version: 3.3.0
When I run nx g @jscutlery/semver:install, after selected apps I need. then got error:
generateFiles: No files found in "/Users/kyan/test-demo/node_modules/@jscutlery/semver/src/generators/install/__files". Are you sure you specified the correct path?

I checked the code from npm, https://www.npmjs.com/package/@jscutlery/semver?activeTab=code there are no __files exists

I experienced this error as well. Doesn't seem to be there with version 3.1.0

maybe a file missing in the last release? same problem here.


✨♻‼ Rewrite myst-nb

This PR encompasses a top-to-bottom re-write of myst-nb!
It is mainly back compatible, for general users of the extension, with some more technical breaking changes listed below.

Highlights

docutils API/CLI with command line tools, e.g. mystnb-docutils-html

Made possible by:

re-working notebook output rendering to be within the initial parse (rather than a post-transform)
moving to use of "native" docutils nodes with attributes

Including glue role/directives!

Multi-level configuration (conf.py < notebook level metadata < cell level metadata)

Configuration is defined in single class, which is used to generate both docutils and sphinx configuration
New config options including: nb_number_source_lines, nb_remove_code_source, nb_remove_code_outputs, nb_render_error_lexer
See auto-generated config documentation: https://myst-nb--380.org.readthedocs.build/en/380/use/config-reference.html#auto-generated-config

Parallel friendly (e.g. sphinx-build -j 4 can execute four notebooks in parallel)
Page specific loading of ipywidgets JS (sphinx >= 3.5)
Added raw cell rendering
Added MIME render plugins
Better log info/warnings, with type.subtype to suppress
Reworked jupyter-cache integration to be easier to use (including parallel execution)
New glue:md role/directive includes nested parsing of MyST Markdown (see https://myst-nb--380.org.readthedocs.build/en/380/use/glue.html#the-glue-md-role-directive)
Removes dependencies: jupyter-sphinx, ipywidgets and nbconvert

New API Logic
The API is much clearer/cleaner (see also https://myst-nb--380.org.readthedocs.build/en/380/api/index.html)
The parsing of a notebook consists of a number of stages, with each stage separated into a separate module:

myst_nb.configuration: The configuration is set (from a file or CLI)
myst_nb.docutils_ / myst_nb.sphinx_: The Parser is called with an input string and source
myst_nb.read: The parser reads the input string to a notebook node (possibly using a custom format reader)
myst_nb.execute: The notebook code outputs are potentially updated, via execution or from a cache
myst_nb.preprocess: The notebook is "pre-processed" in-place (e.g. to coalesce output streams and extract glue outputs) (this could eventually be pluggable, akin to nbconvert.preprocessors)
myst_nb.parse: The notebook is converted to a Markdown-It tokens syntax tree
myst_nb.render: The syntax tree is transformed to a docutils document AST (calling the renderer plugin)
The docutils document is processed by docutils/sphinx, to create the desired output format(s)

Breaking changes

A number of configuration option names have been changes, in order for all of them to share the nb_ prefix.

All old names are currently still allowed, and their conversion to the new name automated, with a warning emitted, except...
nb_render_priority config is replaced by nb_mime_priority_overrides, which have different format/semantics

The AST structure, for code cells etc,  is completely changed.
ipywidgets needs to be specifically installed, if required for use
The code cell output render is completely re-written, meaning existing render plugins will no longer work.
glue directives/roles are more restricted on how they work cross-document (only working on the same page by default).

glue:any directive allows for a doc option, and glue:any/glue:text allow the (relative) doc path to be added before a ::.

ah just some minor test regression diffs, which should be easy to fix

@choldgraf, @mmcky, @AakashGfude definitely you can initially try installing this branch locally and running the documentation build (e.g. tox -e docs-clean and tox -e doc-update, potentially after changing something in conf.py to trigger a re-build)

Also cc @bryanwweber for the new render plugin (any one else?)
You can look at it in https://github.com/executablebooks/MyST-NB/blob/refactor-mystnb/myst_nb/render.py, but I'll explain more in due course,
and also want to add an example of extending it in https://myst-nb--380.org.readthedocs.build/en/380/use/formatting_outputs.html#customise-the-render-process

Also note I would also we can "revamp" the documentation, but maybe do that in a separate PR (incorporate into #302?)

Ok just diffs failing on Windows, where we use the absolute path for image outputs, rather than a relative one (the expected behaviour) will fix that later

Thanks for the heads up @chrisjsewell! I took a quick look just now, and it doesn't seem to be very easy to extend/plug in a new renderer, e.g. my Bokeh one. The reason is because I need to add a new MIME type, which means the render function needs a new if branch, which then requires copy-pasting the existing code into my plugin and then extending it.
Ideally, something like the class might grow the ability to register new render functions and the main method loops over the registered functions to render outputs would make for easy extensibility.

Heya,

Ideally, something like the class might grow the ability to register new render functions and the main method loops over the registered functions to render outputs would make for easy extensibility.

Hmm, yeh registering seemed perhaps a bit overly complex (happy for code suggestions though)
My thinking was, that the easiest way to extend would be to override the render_unknown method:
class NewNbElementRenderer(NbElementRenderer):
    def render_unknown(self, data: MimeData) -> List[nodes.Element]:
        if data.mime_type == "cutom mime type":
            return my_custom_nodes
        return super().render_unknown(data)

FYI, when I say multi-level configuration, an example would be:
conf.py:
nb_execution_mode = "cache"
# this would set the default for every output traceback
nb_render_error_lexer = "ipythontb"

mystnb_page.md:
---
kernelspec: ...
mystnb:  # this is the current default top-level key, but open to discussion
   # this overrides the global configuration for this notebook
   execution_mode: "off"
   render_error_lexer: "other"
---

```{code-cell} ipython3
---
render:
   # override for this cell only
   error_lexer: "none"
---
...
```

Heya,

Ideally, something like the class might grow the ability to register new render functions and the main method loops over the registered functions to render outputs would make for easy extensibility.

Hmm, yeh registering seemed perhaps a bit overly complex (happy for code suggestions though) My thinking was, that the easiest way to extend would be to override the render_unknown method:
class NewNbElementRenderer(NbElementRenderer):
    def render_unknown(self, data: MimeData) -> List[nodes.Element]:
        if data.mime_type == "cutom mime type":
            return my_custom_nodes
        return super().render_unknown(data)

this is pretty simple @bryanwweber, and doesn't involve any copy/paste?
(another thought, was that perhaps within the API there would be a method to notify that certain javascript needs to be loaded to HTML pages containing a certain mime type, this is currently semi-hardcoded for only ipywidgets)

Thanks @chrisjsewell! Overriding a function in that way would only permit one extension to be loaded at a time, right? Plus, it's not clear why render_unknown() should be overridden, if I know the MIME type, it's not unknown (although this could be documented). In other code, I've seen the use of importlib.metadata to find entry points from installed packages, although I can't find a real-world use right now (I'll keep looking, I thought it was in IPython but I can't find it now). The docs are here: https://docs.python.org/3/library/importlib.metadata.html#entry-points It should be reasonably simple to add some code to __init__ for the renderer to check for entry points, I hope (although I don't know for sure 😜 ) 😄

@bryanwweber the render plugin is already loaded via the importlib.metadata

@bryanwweber the render plugin is already loaded via importlib.metadata 😉

Ah, awesome! Then do you think it would be possible to store a list/dict of render functions for MIME types and use that to call the appropriate function, rather than the branching structure now?

Looks nice! How does mimetype priority get taken into account for mime bundles?

Then do you think it would be possible to store a list/dict of render functions for MIME types and use that to call the appropriate function, rather than the branching structure now?

Well there is different use cases here: you want to handle an unknown (by the default renderer) mime type which is fair. But also others want to override existing mime types, plus also override rendering of stdout/stderr/tracebacks.
So having an entry point for registering new mime types, could possibly be an additional thing, but I still don't think it accounts for all user requirements

Then do you think it would be possible to store a list/dict of render functions for MIME types and use that to call the appropriate function, rather than the branching structure now?

Well there is different use cases here: you want to handle an unknown (by the default renderer) mime type which is fair. But also others want to override existing mime types, plus also override rendering of stdout/stderr/tracebacks.
So having an entry point for registering new mime types, could possibly be an additional thing, but I still don't think it accounts for all user requirements

I think if the entry-point loader was able to overwrite objects in the dictionary, it'd be able to satisfy both cases. I'm thinking something like (on my phone so please excuse the pseudo-code)
class JPEGRenderer:
    def render(self, data):
        pass  # rendering logic

class Renderer:
    def __init__(self):
        self.renderers = {"image/jpeg": JPEGRenderer,...}
    # load additional renderers from entry points and update the dict
    def render(self, mine, data):
        self.renderers[mime].render(data)

Then an extension just has to provide an object that has a render method and some way of telling Renderer what MIME type it should work for.
Obviously, this is only one way to approach the problem, and it may be out of scope for this PR. "Good enough" and working software is better than "perfect" and not-working software 😄

Still planning to address the mime type rendering stuff 😉
But what I've just added, I think is pretty cool: for text/markdown outputs, you can now set if you want it rendered as commonmark (default, previously hard-coded), gfm (https://github.github.com/gfm/), or myst.
See:

https://myst-nb--380.org.readthedocs.build/en/380/use/formatting_outputs.html#markdown
https://myst-nb--380.org.readthedocs.build/en/380/use/glue.html#the-glue-md-role-directive

You mentioned that glue functionality doesn't work across pages - is your plan to add this back in before we merge this in? Or can you explain the situation with glue more generally?

So yes, currently, glue only works for keys within the same page.
This means that it can hook into the same (new) rendering mechanism as standard notebook outputs and, because it is done during the parsing phase, means:

You limit any issues of outputs "missing" crucial docutils/sphinx/sphinx-extension transforms/post-transforms (e.g. https://github.com/executablebooks/jupyter-book/issues/1429), i.e. it can be a bit brittle
It works both for sphinx and for docutils-only (single page) processing

I can see, though, why it is a shame to lose this functionality, so perhaps we could at least re-introduce it in a more "limited" fashion:
In 1dd2e64, I added code in the sphinx parser, so that glue outputs are now cached (written to file) and the keys, per document name, are stored on the build environment. This means, at a later stage (in a post-transform, you can quickly look if a document has a particular glue key and, if so, load its output.
Not sure for glue roles (where you can't as easily set options), but for glue directives, I could envisage having a doc option, e.g.:
```{glue:} key
:doc: another/docname
```

If doc is set (disallowed for docutils-only parsing), then we create a "pending" node for that directive (rather than using a local key).
Then, in a post-transform, we look at that document metadata to see if it has the key (rather than requiring keys to be unique over all documents).
Then, if so, we load the output and run the conversion to docutils nodes.

this is the tricky part, because you then have to duplicate "special" conversion code for these conversions and run into issues described above.
You could, perhaps, start out limiting it to only the glue:text directive/role, because obviously just creating simple literal nodes at later stages should not be a problem. It is when you start tying to get fancy and create image nodes etc that you run in to potential problems

one final thought
another use mechanism, I could envisage at a later date, and may fit in more with the "live" execution of notebooks model,
is that, instead of only allowing unique keys per notebook, the key you are referencing is its "last state", e.g.
```{code-cell}
a = 1
```

{{ a }}

```{code-cell}
a = 2
```

{{ a }}

would output a as 1 then 2.
Ideally here, you are not even requiring the user to specify the "glue" keys via the code cell, but perhaps an intermediate that would certainly be possible (see https://github.com/jupyter/nbclient/pull/160#issuecomment-1005905731) is something like:
```{code-cell}
---
user_expressions: {"a": "a"}
---
a = 1
```

{glu:}`a`

```{code-cell}
---
user_expressions: {"a": "a"}
---
a = 2
```

{glu:}`a`

If you run e.g. mystnb-docutils-html5 tests/notebooks/complex_outputs.ipynb --nb-execution-mode="off" > test.html, you will now get an HTML page with all the required CSS loaded 😉

@chrisjsewell I have been building out test branches on the quantecon projects.
They are building nicely in general. I will go through with a closer look later this evening.
Just a minor question re: command line output
What does PK=1 mean when notebooks are executed, such as:
lecture-python-programming.myst/lectures/about_py.md: Using cached notebook: PK=1 [mystnb]

What does PK=1 mean when notebooks are executed

It means Primary Key, and is the reference for the record stored in the jupyter-cache database, for example you should be able to do:
$ pip install jupyter-cache[cli]
$ jcache cache show -p docs/_build/.jupyter_cache 1
ID: 1
Origin URI: /Users/chrisjsewell/Documents/GitHub/MyST-NB-actual/docs/examples/basic.md
Created: 2022-01-12 00:19
Accessed: 2022-01-12 00:19
Hashkey: b272acfb118246679626f127085bbb07
Data:
  execution_seconds: 3.0643314559999997

could maybe change it from ID to PK

What does PK=1 mean when notebooks are executed

It means Primary Key, and is the reference for the record stored in the jupyter-cache database, for example you should be able to do:
$ pip install jupyter-cache[cli]
$ jcache cache show -p docs/_build/.jupyter_cache 1
ID: 1
Origin URI: /Users/chrisjsewell/Documents/GitHub/MyST-NB-actual/docs/examples/basic.md
Created: 2022-01-12 00:19
Accessed: 2022-01-12 00:19
Hashkey: b272acfb118246679626f127085bbb07
Data:
  execution_seconds: 3.0643314559999997

Oh I see 👍 -- that is a handy reference number. Thats a good example to add to the docs too.

Thats a good example to add to the docs too.

I would certainly like to highlight jupyter-cache more, and the fact that you can execute the notebooks outside of the docs build, etc.
However, one issue at the moment is that it doesn't work well with MyST Markdown or custom format notebooks, because the "conversion function" is not recorded by jupyter-cache.
For example,you can get:
$ jcache stage list
...
nbformat.reader.NotJSONError: Notebook does not appear to be JSON: "---\njupytext:\n  text_representation:\...

This is what https://github.com/executablebooks/jupyter-cache/pull/74 will hopefully eventually fix

Hey, thank you @chrisjsewell for the very exciting work on the myst-nb rewrite.
I am planning on utilizing the custom myst_nb.read functionality.
Do have an open to-do list, that I maybe could contribute to?
Thanks! :)

thanks @choldgraf in identifying some cross-document glue cases. @chrisjsewell I was wondering if we could keep the current glue behaviour and if a glu directive is found by myst-nb that can't be resolved it leaves it to be resolved (in a far more limited way) by sphinx?

A proposal for mostly keeping glue functionality
I was thinking about this a bit more today, and I think your proposal of
```{glue:} key
:doc: another/docname
```

Is a nice path forward. I noticed it's similar to how @wlach implemented glue functionality in irydium.
For roles (or to simplify invocation with directives), we might also support some page metadata like:
glue:
  import:
  - path: path/to/stats_ntbk.ipynb
    id: stat
  - path: ../path/to/viz_ntbk.ipynb
    id: viz

And then pasting it in could be invoked like:
Here's a visualization of the distribution:

```{glue:} viz:myplotkey
```

And the mean is {glu:}`stat:mymeankey` +/- {glu:}`stat:myvarkey`.

So there's no "central store" that glue has to know about, and at parse time the paths specified in doc: or imports: simply must be valid notebook files that can be read with jupytext (or perhaps that can be referenced against jupyter_cache.
In the future, key could also point to something stored in user_expressions, or maybe we could even find a way to extend this to cases like "import an entire cell input, cell output, or markdown cell", provided that they had a unique ID attached to them.
Could this give us a path forward on this PR?
also curious if @rowanc1 has thoughts on this API design, given that I think CurveNote has similar kinds of functionality for "refer to pieces of another notebook"

On the Curvenote side, we reference a particular cell-output of a notebook by a UID, given that cellIds are now part of the notebook standard, it would be great to be able to refer to those directly without doing anything in Python land. (doc=, id=) It would also be fantastic if this were somewhat pluggable, so that you could provide a function to help resolve keys (for example, maybe some of the plots/outputs eventually come from a different project?!).

Having updated to jupyter-cache v0.5.0, you can now start to see how the integration with myst-nb/jupyter-book would work.
On building the myst-nb docs, part of the stdout is:
Using jupyter-cache at: /Users/chrisjsewell/Documents/GitHub/MyST-NB-actual/docs/_build/.jupyter_cache

Once the docs are built, we can use the jcache CLI to look at this cache:
$ jcache notebook -p /Users/chrisjsewell/Documents/GitHub/MyST-NB-actual/docs/_build/.jupyter_cache list
  ID  URI                               Reader      Added             Status
----  --------------------------------  ----------  ----------------  ---------------
   1  docs/examples/basic.md            myst_nb_md  2022-03-02 04:50  ✅ [1]
   2  docs/examples/coconut-lang.md     myst_nb_md  2022-03-02 04:50  ✅ [2]
   3  docs/examples/custom-formats.Rmd  nbformat    2022-03-02 04:50  ❗ (unreadable)
   4  docs/examples/interactive.md      myst_nb_md  2022-03-02 04:50  ✅ [4]
   5  docs/use/execute.md               myst_nb_md  2022-03-02 04:50  ✅ [5]
   6  docs/use/formatting_outputs.md    myst_nb_md  2022-03-02 04:50  ✅ [6]
   7  docs/use/glue.md                  myst_nb_md  2022-03-02 04:50  ✅ [7]
   8  docs/use/hiding.md                myst_nb_md  2022-03-02 04:51  ✅ [8]
   9  docs/use/markdown.md              myst_nb_md  2022-03-02 04:51  ✅ [9]
  10  docs/use/orphaned_nb.ipynb        nbformat    2022-03-02 04:51  ✅ [10]

You can see that the .md files are now stored with a specific reader (entry point), so that jupyter-cache knows how to read them, outside the documentation build.
Reading custom formats is a bit more tricky, I probably won't address that in this PR.

At the least, can we define the plan for re-adding this functionality so that if folks aren't happy, we can tell them there's a plan in the works to add the functionality back in?

I've opened https://github.com/executablebooks/meta/issues/681, with my detailed thoughts on the topic.
I think we should move the conversation on this topic over to there

To see whether this feature is being used in a cross-page way, I searched for {glue: using the new github code search
So I suspect that using glue across pages is not the majority of use-cases, but is a significant number.

Thanks, it's certainly important information to consider, although I don't think we should be completely beholden to current usage, when developing the long-term strategy 😬 Particularly if it is going to be problematic, for any usage of myst outside of sphinx

I noticed it's similar to how @wlach implemented glue functionality in irydium.

Maybe copy this over to https://github.com/executablebooks/meta/issues/681

So there's no "central store" that glue has to know about, at parse time the paths specified in doc: or imports: simply must be valid notebook files that can be read with jupytext
Could this give us a path forward on this PR?

This does not seem to address if/when documents have been executed though, for example

what happens if the doc references a document that has yet to be executed?
what happens if a notebook's code is changed, but there are other documents that reference it via doc?

what do you think about "leaving" the unresolvable cases and passing that down into sphinx to resolve

I'm unclear what you mean by this, given sphinx has no built-in way of handling jupyter noteboook outputs?

I was under the impression that glue is currently resolved as a sphinx.transform which put limitations around support for various output mime types. I guess I was wondering if the parser came across a cross-document glue request then it could leave the syntax (as it is currently) and let the sphinx.transform resolve it (with limitations around mime types). But maybe I've misunderstood the current architecture. I don't think is a great solution anyway if the support for mime types varies between in-page and cross-page

Ideally, something like the class might grow the ability to register new render functions and the main method loops over the registered functions to render outputs would make for easy extensibility.

@bryanwweber see https://myst-nb--380.org.readthedocs.build/en/380/use/formatting_outputs.html#customise-the-render-process

glue is now available cross-document, for a small subset of roles/directives/mime types: https://myst-nb--380.org.readthedocs.build/en/380/use/glue.html#pasting-from-other-notebooks

@chrisjsewell — I'm excited that this was merged!  As someone following this project, thank you for doing this!


migrate command throwing an error

Subject: Migrate classic redshift DB to django model
Problem

I have an AWS redshift database that is used by the python flask app. The database has lot of tables and data. Currently, we are migrating the flask app to python Django. I just created a new django project and provided redshift DB details in the settings.py as suggested.

DATABASES = {
    'default': {
        'ENGINE': 'django_redshift_backend',
        'NAME':  <db name>,
        'USER': <user name>,
        'PASSWORD': <db password>,
        'HOST': 'xxx.xxxxx.ap-south-1.redshift.amazonaws.com',
        'PORT': '5439',
    }
}

'python manage.py makemigrations' - succeeded
'python manage.py migrate - error msg: django.db.utils.NotSupportedError: column "content_type__app_label" specified as distkey/sortkey is not in the table "auth_permission"
Procedure to reproduce the problem
1. install Django - 2.1.15, django_redshift_backend, python 3.7
2. update settings.py to use redshift config
3. run makemigrations and migrate

Error logs / results
python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying auth.0001_initial...Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 204, in handle
    fake_initial=fake_initial,
  File "/usr/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 115, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/usr/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 129, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/usr/local/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 97, in database_forwards
    schema_editor.create_model(model)
  File "/usr/local/lib/python2.7/site-packages/django_redshift_backend/base.py", line 209, in create_model
    self.execute(sql, params or None)
  File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 136, in execute
    cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/usr/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/usr/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
django.db.utils.NotSupportedError: column "content_type__app_label" specified as distkey/sortkey is not in the table "auth_permission"

Expected results
results in success. Create tables for admin user.
Create model file from existing db using inspectdb
Environment info

OS: Mac
Python version: 3.7
Django version: 2.1.15
Django-Redshift-Backend version:  1.1.0

I came across the same issue. Please let me know in case of any solution available.
It Will be a great help, thanks.

I also facing the same issue.

I also faced the same problem trying to run migrate on a brand new Django project, on the admin models.
What happens is that redshift-backend tries to add a SORTKEY parameter to the CREATE TABLE statement, and for that it uses the model._meta.ordering list. The problem is that, in Django, you can specify columns from other models in ordering. For this columns, the list will show an entry in the format "model__column", which is invalid for Redshift, since it's not a valid column for that model. This is specially true for Django content_types.
I also noticed that, even if you fix this issue to only add columns from the same model on the SORTKEY, it will throw another exception when some migration tries to delete a column that is part of the SORTKEY (which, also, the default migrations for Django Admin do).
The only way I found to work around this issue was to remove the SORTKEY parameter from the CREATE TABLE statements created by this component. I did this by commenting lines 533:539 in base.py on the django_redshift_backend package.
I this this is also related to issue #37 .

@sebastiaopf Thank you for the detailed report!
I think it is because of the idea of using Model.Meta.ordering for SORTKEY (https://github.com/jazzband/django-redshift-backend/pull/20).
It seems to me that having a separate setting value, for example sortkey, would solve this problem.
The other problem you mentioned, the use of functions not supported by Redshift such as unnest(), can be addressed if we know what kind of SQL is being generated by what kind of ORM queries.
Since this backend is based on the postgres backend, it is affected by the addition of features to the base. Each time this happens, we need to adjust the SQL syntax and functions that are not available in Redshift. However, since these backend developers can't keep track of everything by themselves, it would be great if you could let us know when you find something.

fixed by https://github.com/jazzband/django-redshift-backend/pull/97.


[uart/dv] Add reset with stress

make uart agent support reset and add covergroup
update csr read & check by calling csr_hw_reset_seq
check if it's reset before calling DV_CHECK_EQ in seq

Signed-off-by: Weicai Yang<EMAIL_ADDRESS>

@sriyerg I have updated this PR as we discussed, PTAL


Upgrade Kundera to support Cassandra version 2.1.+

Currently Kundera-cassandra code is compatible with 2.0.4. Upgrade it to support Apache Cassandra version 2.1.x version and enable UDT support via JPA embeddable.

Fixed with Kundera-2.15.1.Support for Collection type UDT is enabled with Kundera-2.16.


FR: Have window and full screen mode

Prerequisites

[ ] I'm using latest version: 1.2.0
[x] I've checked [Known issues]
[x] I've checked [Open issues]

Description
Have a windowed and full screen option. I often switch between the two and want stretchly to remind me of breaks in both.
Operating system: Windows 10

Hi there, could you please explain more? I am not sure if I understand. You can pick between Window and Fullscreen already, what would you like to have?

Ah, I seem to have misunderstood. I'm guessing it means that it shows the breaks as a  window or full screen? "Shows breaks in window / full screen" is a bit ambiguous...I thought it meant that the breaks would only show if you are in a windowed mode or in full screen...still though, if the breaks are windowed does that mean I should be able to drag them and minimise them? I don't seem to be able to do that

Hi @AgentDiamond , yeah, it means whether you want breaks to appear in fullscreen or as a window.
In both cases, you can't move or minimize them.

Would be good to have them minimisable...can be intrusive to have a huge window appear. Maybe a sound only option would be good with different sounds for short and long breaks
Get Outlook for Androidhttps://aka.ms/ghei36

From: Jan Hovancik<EMAIL_ADDRESS>Sent: Saturday, October 24, 2020 4:36:53 PM
To: hovancik/stretchly<EMAIL_ADDRESS>Cc: AgentDiamond<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [hovancik/stretchly] FR: Have window and full screen mode (#729)
Hi @AgentDiamondhttps://github.com/AgentDiamond , yeah, it means whether you want breaks to appear in fullscreen or as a window.
In both cases, you can't move or minimize them.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/hovancik/stretchly/issues/729#issuecomment-715941438, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AFIVKNXIJD5PTC26CYZ3FKLSMLYBLANCNFSM4SIUX65Q.

Ah well, that's the philosophy of Stretchly, I want it to be obtrusive so it forces to take a break :)


fine-tuning config on COCO

Thanks for your awesome work.
Would you like to share the fine-tuning setup such as the number of training epochs, learning rate and optimizer configs, as I did not find corresponding in your paper.

I assume you are looking at the captioning task, and here is the parameters, shown in the suppl. of the paper.

feel free to pose any questions you have.

Thanks for sharing the details. Did you use any regularization methods such as dropout  & weight decay?  Seems that there is no dropout used in the pre-training?


Change home page URL?

Current home page URL is: https://www.youtube.com/feed/music
Compare to this page for Youtube Music: https://www.youtube.com/music
It seems that the latter has more options and categories to browse and is likely to only improve as Youtube Red becomes Youtube Music.

Hello @markstos. It makes sense, thanks for your tip.

Done in YouTube 2.0.3.


Fix mpt circuit lookups

Cargo.lock didn't pick up this commit: https://github.com/scroll-tech/mpt-circuit/pull/98/commits/b4f152b1f843e4b1364d2006c0b8eaccdb4fe0d3, which fixes the hi/lo -> lo/hi swap.

finally can pass now , will merge..


Docs Website: Tooltip animation tooltip text is wrong.

Docs Website: https://sailboatui.com/docs/components/tooltip/#Animation
In the Tooltip page, Animation section, the tooltip text is incorrect:

Could be used in the same order as I suggested in issue #1, in this way, the user will see the animation on all placements.

Fix typo

Damn, my bad, I didn't notice the docs are on the same repo. Next time I'll issue a PR.

It's ok, Sailboat UI is just the beginning, we didn't describe it clearly.


404 errors with every upload

I keep on being shown 404 errors in the UI when I upload new projects.
I am using docker version 1.5.2. UI looks all good, but when I use the project uploaded via UI, or docatl, nothing seems to be inserted successfully, or at least it cannot be shown.
I tried uploading the following items converted to .zip

single index.html file
complete sphinxs output directory
pdf file
example directory under /docs in DOCATL repo

None of them seem to be able to be rendered after the upload.

Can you share an example of what you upload?


Mouse scroll not working on firefox

I have been using this iframe resizer with malihu scorller. I am adding the iframe  dynamically here is my code
$("#elemId_container").find(".slider-content-wrap").html("  ");
$("#elemId_container .iframe-container").mCustomScrollbar({
autoHideScrollbar: true,
axis:"yx",
});
$("#elemId_iframe").iFrameResize()
It's working in chrome but mouse scroll not working on firefox 39

I'll have a quick look, but need a link to a simple test case.

first is there cross domain issue with this framework. It worked when i hosted in the public server. But not on localhost, though it worked on chrome.

It works cross domain. Try the examples.

Closing due to no response.


Annotated logs, stdout cleanup, and headless display

These improvements were mostly discussed in #1, with a couple of extra ideas I got since then:

uefi-logger's output is annotated with the log level on a line-by-line basis.
Headless vs non-headless QEmu configurations are now much closer to each other. Basically, the only difference is whether QEMU spawns an X11 window with the display or not.
The Python code intercepts QEMU's output and strips ANSI escape sequences from it before forwarding it to stdout, so the UEFI code cannot mess up your terminal anymore.

I can indeed merge! Will wait a bit for the remaining discussions to settle before doing so.


Optimize grpc header magic number

Commit Message:
Additional Description:
Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional API Considerations:]

@delphisfang can you explain a bit the reason for this change, please?
/wait-any

@delphisfang can you explain a bit the reason for this change, please?
/wait-any

@yanavlasov Many thanks for your review.  When I was reading source code of this prependGrpcFrameHeader() function, set "header[0] = 0" made me confused. To one who is not that familiar with gRPC Frame Header Fields (like me), zero value is a litlte bit indirect. Therefore I suggest replacing zero value with  macro GRPC_FH_DEFAULT, just to make this code snippet a little bit more readable.


[feature request] Support partitioned topic reader.

The cpp client has already support partitioned topic reader.
https://github.com/apache/pulsar-client-cpp/pull/154
For now, use node client to create a reader on a partitioned topic, it will throw an error:
[Error: Failed to create reader: OperationNotSupported]
Any plan to upgrade the dependencies of the CPP client ?

We need wait for CPP 3.2.0 release.


RuntimeError: On detection mode, it is mandatory to provide binary labels y in [0,1].

Hi,
I am passing the below input to the LogisticCalibration, but it is giving the runtime error.
`confidence_scores = np.array([0.70745564, 0.71694]
matched = np.array([1, 1] # as both are boxes are matched with the ground truth's
relative_x_position = np.array([0.7543349742889405, 0.24766819924116135])
input = np.stack((confidences_scores, relative_x_position), axis=1)
lr = LogisticCalibration(detection=True, use_cuda=False)    # flag 'detection=True' is mandatory for this method
lr.fit(input, matched)
calibrated = lr.transform(input)
`

Thanks

Thanks for pointing out, I will fix this asap.


which function is same as api.get(path_id,byte_range) in python3 onedrivesdk?

I'm writing onedrivefs in python3 this onedrive sdk, i'm referring existing code of onedrive-fuse-fs in that read fuction has used this code
def read(self, path, size, offset):
path_id = self._resolve(path)
return self.api.get(path_id, byte_range='{}-{}'.format(offset, offset+size))
i want to implement similar thing i've used download function from http-provider file that look like :
def read(self, path, length, offset):
return authed_usr.client.item(id=authed_usr.folder[path]).download(path)
i'm downloading same file in that folder and folder dictionary gives the item id, but its not working as expected invalid arguement and File type unknown (application/octet-stream) is not supported such errors showing up.
i'm attaching that file where it is implemented.
onedrivefs.txt

On which line? It was hard to understand what you're saying.

My question is which function in onedrivesdk will give output same as api.get() method.
the .download() function is returning full file at once, but i want it in chunks as api.get method is giving.

On which line? It was hard to understand what you're saying.

line number 98 in onedrivefsnew.txt
in this file i've tried different methods but none of them worked
and what i want is in onedrivefsold.txt line number 191
onedrivefsold.txt
onedrivefsnew.txt

Try playing around with autocomplete. That's how I find most functions in this library. BTW this repo is abandoned.

Thank you for reaching out and for your patience. This SDK is being officially deprecated. See #209 for more information


CleanBC: Change streaks to dots in legend

Open in MURAL
CleanBC JIRA to GH Integration - CITZ – BCDS – Data Systems and Services

duplicate of #49


Create CONTRIBUTING

By adding contributing guidelines pull requests like #260 would get accepted faster / wouldn't get translated in the first place :octocat:
Here's GitHub's documentation about this subject: https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors

❤

❤

❤

:\

:)

Great

good

❤

:)


train

Hello, can the code be trained on jetson nano b01

Hi,
Have not tried it so I wouldn't know. The trained model can be deployed on jetson nano devices though.


Fix typo in README :D 'Database' -> 'DatabaseCleaner'

@hoshinotsuyoshi Thank you! 👍

Thank you! :)


Preserve path when writing files

Given the following example
gulp.task('version', function(){
  gulp.src(['./config/setup.json', './style.css', './package.json'])
  .pipe(bump({type:'major'}))
  .pipe(gulp.dest('./'));
});

when outputting files, right now gulp.bump writes them all in the project root (./) without taking into account the relative paths of every single file. So, in example, ./config/setup.json is being copied into a new file, ./setup.json, instead of simply updating the source inside ./config/.
I think that a more intuitive and desirable behavior would be to preserve the file paths and simply overwrite the source files when gulp.dest is set to ./.

Your task is written to only have one output folder. gulp-bump does not handle any paths or writes in any way.
https://gulpjs.com/docs/en/getting-started/working-with-files

Thank you, I checked and solved by adding { base: './' } to gulp.src.


Tidy up code generation and generated code

Refactor the code generation code into smaller methods, with indentation managed by SourceBuilders#withIndent (rather than being hard-coded everywhere).
Order the generated code more logically, with value type subclasses last (previously they were placed with the method that returned them, but that ends up rather unreadable), and build between clear and buildPartial. This fixes #24.

Hey Holger,
This one looks scary at first, but it's split into three commits, and the really big one is pure refactoring (as verified by the exact-character-match CodeGeneratorTest), so there's no need to verify every line. Just let me know if you think the refactoring has improved matters!
Cheers,
Chris

Scary indeed.  :-)


Improve performance of bridge to the new diagnostics formatter

The bridge to the new diagnostics formatter was performing a lot of extra computation to re-parse source files and build up the line table. Cache those so we don't rebuild them from one diagnostic to the next.

https://github.com/apple/swift-syntax/pull/2498
@swift-ci please smoke test

https://github.com/apple/swift-syntax/pull/2498
@swift-ci please smoke test

@swift-ci please smoke test Windows


Check and refactor endpoints

The recent changes introduced in #11 need to be implemented for all endpoints and checked for breaking the work flow.

Needs team discussion. The current merge of #11  aka #9 has introduced some changes that at best will essentially halt refactoring the rest of the code following the introduced changes until general endpoint layout is more finite.
Generally, outsourcing business logic away from the endpoint router definition itself is fine to some extend. However, having to pass all header args and/or params from the router endpoint definition into another function (basically 1:1) is tedious, (arguably) more confusing, and unnecessary repetition of code (utils and facade refactors imho make sense - core dowsn't so much). This either needs re-thinking in the sense that maybe we're doing something wrong by passing so many args in the first place and that should really be a JSON object as opposed to several args. Or  I'm not seeing the obvious, clever/elegant way the merge is suggesting. TB discussed.

I prefer separating out the router in any case, even if it means things are a little as you say "tedious". The bottom line is having "core" which is framework agnostic is important enough in its own right in my opinion.
But having said that, if we move to using fast api dependencies then things are a lot simpler as a lot of the values passed are not longer necessary as what is passed in is what has been created based on those values. In other words, we will no longer have to pass in all the headers
.

Yeah, "tedious" shouldn't be an excuse. It's more about not ending up with things like this (example):
@router.post(
    "/write-schema-and-credential-definition",
    tags=["credentials"],
    response_model=SchemaResponse,
)
async def write_credential_schema(
    schema_name: str,
    schema_version: str,
    schema_attrs: List[str] = Query(None),
    api_key: Optional[str] = Header(None),
    wallet_id: Optional[str] = Header(None),
    tenant_jwt: Optional[str] = Header(None),
):

try:
    result = await write_cred_schema_in_core(locals())  # or even passing them in explicitly
except:
...

and then having a a function in core eg:
async def write_cred_schema_in_core(*args, **kwargs):  # or redefining the args here all over again
   result_1 = await having_fun_accessing_parent_args(abstruse_parent_args_that_arent_obvious_here)
   ....
   result_n = having_fun_for_the_nth_time_accessing_parent_args(abstruse_parent_args_that_arent_obvious_here)
   return something_useful

So maybe I'm not seeing the good way to go here. Just want to avoid the above example.

Open for suggestions here really. If there is a good way to keep /core and not having to following something along the lines of the above example, please, provide another example.
After some time of trying to trying to mend what's there into this pattern I personaly would refrain from it alltogether. If there is a better way than factoring out the logic into utils and facades (this makes sense), please, do tell/propose. Just this refactoring into /core/{wallet.py, verifier.py, ...} to essentially do the same things in a different place under a different name and passing lots of params has more downsides to me than benefits. It adds complexity, makes following the code more confusing and as per example above introduces the necessity to obfuscate logic that was clear prior.
Any help and constructive feedback welcome.

I've been building my api's this way for 20 years and what can I say, I like it.
It's something akin to the "service layer pattern" - where the router is the "service layer" and the core is the business logic.
I feel is is a worthwhile a pattern or approach to use when building api's for the following reasons:

it separates concerns - the service layer (router in this case) is responsible for exposing the functionality to the outside world and that is where the fast api dependency. That is the focus of that context. When working there all you need to think about is how this method is exposed to the world - and other fast api mechanism, like for example, fast api dependencies. When working in "core" all you need to think about is meeting the business requirement of the call - no fastapi dependency to think about
It means you can test the "core" code without worrying about what web framework is being used
It means you can add for example, logging, and you only need to add it to the service layer.
It means if you want to add security you only add that in the service layer - core doesn't have to worry about (obviously won't work for all cases but will for cases where only a specific role is required for access to a method).
Means you can orchestrate fairly easily. In core you have all your transactions and if you need to call two "transactions" to achieve something you can. For example, the create wallet and assign public did - that can be 2 or 3 method calls into core and be exposed by one service layer method.
Means you can change your framework without affecting your core code.
Means you can expose your core logic by other means again without having to change your core code.
Means you can easily expose the same core method to a different end point - maybe with different security requirements
The data payload structure and or format can be changed without changing the core methods. Obviously adding a field would require core to be changed but we can remove a field and the core methods don't change - though this only really works when this pattern is extended such that there is a dto model (i.e. there is a model that the api uses to interact with the outside world and another model that is used internally by the api) - again separating concerns. The internal model focuses on the internal needs and the external model focuses on the external needs. Fastapi does a very good job of this when you use it along with sql alchemy. It pretty much follows and enables this dto pattern very well. I'm not suggesting we adopt this approach as well.
Methods can be "stacked" i.e. one service call can call two methods and return results without changing the core methods.
Exception and error handling need not be done in core and can thus be done consistently in the router or service layer.

Yes there's a price to pay with because of the extra layer of abstraction that seems more trouble than its worth from some perspectives - if you don't see the above points as useful then yes, you might find it cumbersome.
There is some argument to be made that says we don't need this layer - at least now - yes, but saying we will add this layer when we need it doesn't really work as in my experience that never happens. It's too expensive to add this layer later but if we've already got it and we need it, we will have it.
Is my approach a relic of the other languages and frameworks I've worked on? No, I don't think so. I feel that building api's with this pattern is a good thing no matter the language or framework you're building on.
And are we actually passing a lot of parameters? No - I've used this pattern when passing upwards of 5 - 10 parameters and have still felt it's worth it. Is a parameter object necessary? not really in python as python has keyword parameters and also has no method overloading so a wrapper object to contain the parameters is not worth it.
And apropos the example - using *args and **kwargs is defoes not an option. We must include all the parameters the method in core takes quite clearly. The "core" context method must be more clear than the service layer method. In the service layer this would be acceptable (*args and **kwargs) but certainly not in the core context.
Does it add complexity? I don't think so. What it does do is take 1 problem and make it two smaller problems. So it breaks one big problem into two smaller problems - thereby reducing complexity because I now have two separate smaller problems where I can focus on one to the exclusion of the other.

Cool, thanks for the elaborate answer (partially to questions I didn't ask). We can agree to disagree then. Again, I do see some of the benefits you mention - doing otherwise would be denying the obvious. However, I disagree with some, for instance the part about *args, **kwargs - it's never been meant as an argument against including all params. I just thinks it makes for ugly code. In the end I guess it's a matter of preference and style. Similarly we had parting views on using classes previously, where I just think making everything a class (eg ledger delegate or introducing uplink) aka being very OOP for the sake of being OOP is not a pattern I want to follow.
But it's ok for me to disagree. And please don't get me wrong, there's a lot of cool things you've introduced to the project and comments you gave for improving my code.

So I'm happy to forgo this pattern - in the interests of moving forward and harmony. It's not something that I'm "go to the stake" for...
But if we don't use this pattern I would definitely not want to have a folder called "routers" and have the business logic in there.
Thought we'd take inspiration from our solidified api definition:
So a proposed folder structure:
admin

governance
dids.py
schemas.py
wallets.py

I'd also be okay with this:
admin

governance

dids

router.py (or something else - not entirely happy with calling it router but at least the reader know where to start - and it seems to be somethign of a convention)

schemas

router.py

wallets
router.py

Be very readable for the dev coming in.
And both are similar to the way acapy is structured (second one more).
I'm not sure which one I prefer - both options have their strengths and weaknesses - probably the former is better since there's less folders. The latter would be better when more code is requried and we need more than one module to hold it. If you look at acapy code it follows this pattern (the second one). If a router.py is required then the second option as it has that.

Cool. Very much appreciate the flexibility! Thank you. Both suggestions look good at a first glimpse, but let me have a look tomorrow morning before so I can make a more educated comment😅


Empty global context appearing in ViewListActivity

Sometimes when we load the ViewListActivity, a thread passes an empty global context.
Originally posted by @waridh in https://github.com/CMPUT301F23T01/Sigma-Blue/pull/117#discussion_r1394615641

This version of the bug had been solved.


Possible title data parsing issue

Is there a known reason on why it seems to not parse correctly the title meta data from the IDs in the attached image?

Those are the only ones (from my installed titles) that appears to have blank meta data.
The Data Management do display titles names correctly.
System Info:
O3DS XL (11.2.0-35U + A9LH + Luma3DS)
System Language: Portuguese
BTW, version 2.4.8 is a build from my own fork, but this issue applies to all official releases from 2.X.X

I imagine it might be because the title's Portuguese title, description, and publisher are empty.

You are right. By changing the system language to English, the data is parsed correctly.
So, altough this is mostly a title issue, I would recommend to try reading title data from default system region language (English as a fallback in U and E regions).
I can try to implement this stuff and send you a PR later..

Can you try this build? It should fall back to a default language based on your region if the title for your language is empty.
https://www.dropbox.com/s/t16uhlqszg39nhu/FBI.zip?dl=1

I can confirm it works for region U device.
This is probably what Data Management does too.

Changes pushed.