text:
Reintroducing the type parameter on Options (previously known as Wrapper).

This PR reverts the internal changes of #206, but keeps the public API compatible to what it introduced. Essentially by adding a default for the type parameter.
However, now in addition to the dynamic dispatch by default, one may also explicitly use static dispatch by specifying a concrete type parameter. This now allows to construct an Options instance in const/static context (or introduces, it depending on the point of view, as it was possible before #206). Which is further facilitated by adding the const fns new_const and with_splitter.
Open Questions

The name of Options::new_const could be changed (maybe to new_static). Or, for instance, the Options::new_const could replace the current Options::new entirely, reverting to a static dispatch by default. Then instead, a Options::new_boxed (or new_dyn or something) could be added which then creates a boxed Options with dynamic dispatch. Yet another alternative, would be to just remove Options::new_const, since the fundamental use-case (const fn) is also covered by Options::with_splitter.
Whether to implement WordSplitter only for Box<dyn WordSplitter> or for all Box<S>
Whether to implement splitter setter method only on the dynamic dispatch variant (aka Options<Box<dyn WordSplitter>>). Then, it might also take an arbitrary impl WordSplitter by value and put it into a Box.
Now, it is also possible to make Options Clone again. Well, at least where the type parameter is Clone, which it isn't for the default Box<dyn WordSplitter>.

comments & other suggestions are welcome

Hi @Cryptjar,
Thanks for catching this! I had not thought about how changing to Box<dyn WordSplitter> would take away functionality, so thanks for restoring it!
As for your questions,

The name of Options::new_const could be changed (maybe to new_static). [...] Yet another alternative, would be to just remove Options::new_const, since the fundamental use-case (const fn) is also covered by Options::with_splitter.

The situation that I to avoid is code like this
enum Wrapper {
    H(textwrap::Wrapper<'static, Standard>),
    N(textwrap::Wrapper<'static, textwrap::NoHyphenation>),
}

from gst-plugins-rs, discussed in #178.
I think I would lean towards let Options::new return a Options<Box<dyn WordSplitter>> by default so that all options can be changed in a uniform way afterwards. The Options::with_splitter constructor would then be the way to go if you want a hard-coded type.

Whether to implement WordSplitter only for Box<dyn WordSplitter> or for all Box<S>

Are you suggesting adding an implementation for Box<S> where S: WordSplitter? I'm not quite sure what the implication of thi is, but if it makes it easier for people to use the library, then I'm all for it :-)

Whether to implement splitter setter method only on the dynamic dispatch variant (aka Options<Box<dyn WordSplitter>>). Then, it might also take an arbitrary impl WordSplitter by value and put it into a Box.

Yeah, good question... I've so far though of the setter method as a builder method — something to use when contructing the Options. I was then thinking people would simply assign to the struct fields afterwards if something should be changed. I figured this would be the simplest API overall.
However, I'm very much curious to hear of better ways to design this.

Now, it is also possible to make Options Clone again. Well, at least where the type parameter is Clone, which it isn't for the default Box<dyn WordSplitter>.

That would be nice :+1:

Thanks for writing a great commit message in your first commit — if you could squash the formatting commit into the first, then I'll be happy to merge this.
No big hurry, though, since I also want to redo the internal wrapping algorithm before I make a new release. I hope to have this out in a week or so.

Sorry, for late response.

Whether to implement splitter setter method only on the dynamic dispatch variant (aka Options<Box<dyn WordSplitter>>). Then, it might also take an arbitrary impl WordSplitter by value and put it into a Box.

Yeah, good question... I've so far though of the setter method as a builder method — something to use when contructing the Options. I was then thinking people would simply assign to the struct fields afterwards if something should be changed. I figured this would be the simplest API overall.
However, I'm very much curious to hear of better ways to design this.

Well, I don't know which one is  good design, but there seems to be three reasonable ways to design the spiltter (builder) setter:

How it is right now:

impl<'a, S> Options<'a, S> {
    /// No type changes allowed, works for all `S`, requires a `Box<dyn _>`
    /// when coming from `new`
    pub fn splitter(self, splitter: S) -> Self {
        Options {
            splitter: splitter,
            ..self
        }
    }
}

Making it more general

impl<'a, S> Options<'a, S> {
    /// Allows type changes, works for all `S` & `T`, requires a `Box<dyn _>`
    /// when it should become `Options<Box<dyn _>>`
    pub fn splitter<T>(self, splitter: T) -> Options<T> {
        Options {
            width: self.width,
            initial_indent: self.initial_indent,
            subsequent_indent: self.subsequent_indent,
            break_words: self.break_words,
            splitter: splitter,
        }
    }
}

Restricting it to only the default type parameter (aka Options<Box<dyn WordSplitter>>)

impl<'a> Options<'a> {
    /// No type changes allowed, works only on `Options<Box<dyn _>>` (such as
    /// get from `new`), but allows all `T`, which is automatically boxed
    pub fn splitter<T: WordSplitter + 'static>(self, splitter: T) -> Self {
        Options {
            splitter: Box::new(splitter),
            ..self
        }
    }
}

While the 1st version is simpler to implement it is the less useful one, since it does not allow to change the type (so has the same effect as reassigning the field). The 2nd seems more useful (as it does more than just reassigning the field, i.e. the type change), but might be easier done by directly using the with_splitter constructor, unless the with_termwidth constructor is preferred. However, for the same reason, it is the most consistent one. The last and 3rd version, has a fundamental incompatibility with the with_splitter as it does an automatic boxing (which makes it in my opinion the ugliest), but maybe one of the more uniquely useful one, as it serves a purpose not directly covered by and other means (as it has auto-boxing unlike with_splitter and assigning the field).
Otherwise, it is pretty much a design question, implementable either way, or even, since there is now a with_splitter constructor, one might leave it out. I don't have a strong preference either, but I got a slight liking for option 2.

Ok, I tried the 2nd version, and got a problem with the tests. Take for instance this one:
fn no_hyphenation() {
    let options = Options::new(8).splitter(Box::new(NoHyphenation));
    assert_iter_eq!(wrap("foo bar-baz", &options), vec!["foo", "bar-baz"]);
}

It would compile just fine, as did up until now, with the 1st version, since new explicitly creates a correctly boxed Options (that is with Box<dyn WordSplitter>), and in version 1, the type is preserved by splitter.
Now, with version 2, the splitter method, just converts it into an Options<Box<NoHyphenation>>, where right now Box<NoHyphenation> does not implement WordSplitter. This could be fixed by a few ways, first, one could expand the impl for WordSplitter on Box to a more general generic impl (as my before mentioned alternative does). Or, second, by coercing the Box<NoHyphenation> into a Box<dyn WordSplitter>, e.g. by placing a type annotation: let options: Options = ... . Alternatively, instead of dynamic dispatch, now and with version 2, also static dispatch could be used simply, by removing the Box making it a simple Options<NoHyphenation>.
As a note, with version 3, the tests also need to be rewritten to remove the Box, but then it would use dynamic dispatch instead of static.
I think, this kinda showcases the look&feel of the API for the different version, so I went on and made it into a list:
// Version 1, dynamic dispatch
let options = Options::new(8).splitter(Box::new(NoHyphenation));
// Version 1, static dispatch (falling back to `with_splitter`)
let options = Options::with_splitter(8, NoHyphenation);

// Version 2, dynamic dispatch
let options: Options = Options::new(8).splitter(Box::new(NoHyphenation));
// Version 2, static dispatch
let options = Options::new(8).splitter(NoHyphenation);

// Version 3, dynamic dispatch
let options = Options::new(8).splitter(NoHyphenation);
// Version 3, static dispatch (falling back to `with_splitter`)
let options = Options::with_splitter(8, NoHyphenation);

Apparently only version 2 allows the dynamic dispatch type of new to be changed to static dispatch, but requires the type annotation to coerce it into a trait object. Also notice that only version 2 allows for static-to-static conversion (i.e. from Options<NoHyphenation> to Options<HyphenSplitter>).

Considering the problem of #178 at hand, there are essentially two ways to tackle it, I'm not sure whether they were both considered. First, what I gonna call 'inner boxing' is what #206 introduced. But when I noticed, that the splitter is the final field of Options, I though, this allows it to be turned into a DST (dynamically sized type), which then allows a strategy I call 'outer boxing'. Both basically serve the same goal, allowing abstracting over the concrete WordSplitter by using a trait object.
However, I figured, that this 'outter boxing' strategy is fairly simple to implement, so I went to implement it for the 0.12.1 version, I guess it will also best demonstrate what I mean by that. Eventually, it really turned out to be a fairly minimal commit and it is still backwards compatible (so it would be even possible to actually release it as 0.12.2):
https://github.com/mgeisler/textwrap/compare/0.12.1...Cryptjar:impl-outside-boxing-in-0.12
I essentially just wanted to show off that option. Honestly, because, if that 'outer boxing' would be adopted instead of the here currently implemented 'inner boxing', one could remove the spacial cases of the Options<Box<dyn WordSplitter>> and revered back to 'only' static dispatch within Options. Then whenever one needs dynamic dispatch or others wants to get rid of the type parameter (as in #178), one could just wrap the entire Options into a Box or Rc, or whatever suite them and coerce it into a trait object. (Notice that I also included two test cases, which show how it could be used).
So in summary, I don't think there is anything wrong with using the 'internal boxing' as it was introduced in #206 and still persists in this PR, but in case that alternative had not been considered before, now (before it gets released) is probably the best time to so.
Regarding the API, I thought I make another list:
// 'inner boxing' (version 2)
// dynamic dispatch
let options: Options<Box<dyn WordSplitter>> = Options::new(8).splitter(Box::new(NoHyphenation));
// static dispatch
let options: Options<NoHyphenation> = Options::new(8).splitter(NoHyphenation);

// 'outer boxing'
// dynamic dispatch
let options: Box<Options<dyn WordSplitter>> = Box::new(Options::new(8).splitter(NoHyphenation));
// static dispatch
let options: Options<NoHyphenation> = Options::new(8).splitter(NoHyphenation);

For the 'inner boxing', I chose the 2nd version since it has the most consistent API, which becomes even more apparent when comparing it to the 'outer boxing' approach. I guess it makes it quite obvious why I call it 'inner' & 'outer' boxing. One thing to notice tho, in my opinion, using the 'outer boxing' approach make the usage of the actual Options API more consistent despite whether the crate user chooses static or dynamic dispatch.

Hi @Cryptjar, thanks for the updates! I'll try to take a look at it tomorrow — I think I roughly understand what's going on, otherwise I'll ask you for help :-) The "outer boxing" API does indeed look very nice and consistent :+1:

unless the with_termwidth constructor is preferred.

I consider that to be a convenience method that people can use if they don't have any particular fancy requirements. If they do, then I'm fine with asking them to use a more complicated and advanced API.

in my opinion, using the 'outer boxing' approach make the usage of the actual Options API more consistent despite whether the crate user chooses static or dynamic dispatch.

If I understand correctly, the with_splitter constructor could be removed then? Since Options::with_splitter(42, Foo) would be equivalent to Options::new(42).splitter(Foo)?

Considering the problem of #178 at hand, there are essentially two ways to tackle it, I'm not sure whether they were both considered.

Nope, they weren't — I have yet to work with an unsized type of my own. It seems like an advanced type, so my gut instinct would be to avoid it unless it's really necessary because it brings some great benefit.

I essentially just wanted to show off that option. Honestly, because, if that 'outer boxing' would be adopted instead of the here currently implemented 'inner boxing', one could remove the spacial cases of the Options<Box<dyn WordSplitter>> and revered back to 'only' static dispatch within Options. Then whenever one needs dynamic dispatch or others wants to get rid of the type parameter (as in #178), one could just wrap the entire Options into a Box or Rc, or whatever suite them and coerce it into a trait object. (Notice that I also included two test cases, which show how it could be used).

Thanks for adding the tests, very useful!
I just pushed a little demo program that I've been working on for some time: #218. In the example, I have code like this:
                Key::Ctrl('b') => options.break_words = !options.break_words,
                Key::Ctrl('s') => {
                    let idx = idx_iter.next().unwrap();  // Next WordSplitter index
                    std::mem::swap(&mut options.splitter, &mut splitters[idx]);
                }

That is, there is one Options instance and it is then manipulated based on interactive input from the user. This works fine because the WordSplitters in splitters are all boxed.
I think the approach you suggest in this PR is compatible with such code — I believe this PR simply adds the possibility of static dispatch in addition to dynamic dispatch via a boxed WordSplitter.
Does the approach in the impl-outside-boxing-in-0.12 branch also support this?

unless the with_termwidth constructor is preferred.

I consider that to be a convenience method that people can use if they don't have any particular fancy requirements. If they do, then I'm fine with asking them to use a more complicated and advanced API.

Fair enough. Actually, the const fn functions serve a similar purpose, since ultimately one could just construct an Options in-place, but for less fancy requirements it would a bit burdensome to specify all fields by hand.

in my opinion, using the 'outer boxing' approach make the usage of the actual Options API more consistent despite whether the crate user chooses static or dynamic dispatch.

If I understand correctly, the with_splitter constructor could be removed then? Since Options::with_splitter(42, Foo) would be equivalent to Options::new(42).splitter(Foo)?

Functional it is true, but unfortunately there is no way to make the splitter method a const fn with current stable Rust (and it does not seem that it is going to, it's something about calling drop, which is generally not a const fn). So, the with_splitter constructor serves the essential purpose of being a const fn.
However, the problem with the splitter method is the generic S which might have a Drop impl, everything else is even Copy, so it is imaginable to change the signature from by-value (self) to by-reference (&self), then the function itself does not have to deal with drop and all other fields can be copied. Through, this would only work with the splitter method, no other builder/setter.
impl<'a, S: ?Sized> Options<'a, S> {
    pub const fn splitter<T>(&self, splitter: T) -> Options<'a, T> {
        Options {
            width: self.width,
            initial_indent: self.initial_indent,
            subsequent_indent: self.subsequent_indent,
            break_words: self.break_words,
            splitter: splitter,
        }
    }
}

// Assuming `new` is a `const fn` too, i.e. static dispatch
static HYP: Options<HyphenSplitter> = Options::new(10);
// Appearently no `drop` is called, and `splitter` just generate a new Options
static NO_HYP: Options<NoHyphenation> = HYP.splitter(NoHyphenation);
// However, this works too, due to some Rust magic.
static NO_HYP_2: Options<NoHyphenation> = Options::new(20).splitter(NoHyphenation);

Considering the problem of #178 at hand, there are essentially two ways to tackle it, I'm not sure whether they were both considered.

Nope, they weren't — I have yet to work with an unsized type of my own. It seems like an advanced type, so my gut instinct would be to avoid it unless it's really necessary because it brings some great benefit.

Well, strictly speaking the approach in the impl-outside-boxing-in-0.12 branch does not make the Wrapper an unsized type, but it allows it to do so. Thus, I guess a normal user would (as before) never have to deal with an unsized value or some such. But for the 'more advanced' users, it allows them to turn it into an unsized type.

I just pushed a little demo program that I've been working on for some time: #218.

Very interesting. Good demo & good use-case.

I think the approach you suggest in this PR is compatible with such code — I believe this PR simply adds the possibility of static dispatch in addition to dynamic dispatch via a boxed WordSplitter.

Yes, that is true, this PR right now is even backwards compatible (with the previous commit).

there seems to be three reasonable ways to design the spiltter (builder) setter:
1. How it is right now:
2. Making it more general
3. Restricting it to only the default type parameter (aka Options<Box<dyn WordSplitter>>)

Those (except for 1), would strictly speaking be no longer backwards compatible, tho it wouldn't impact functionality.

Does the approach in the impl-outside-boxing-in-0.12 branch also support this?

That gave me some hard time thinking. Eventually, I concluded that it is not possible with the impl-outside-boxing-in-0.12 implementation. Apparently, due to the 'outter boxing', an already boxed WordSplitter wouldn't be that useful (actually, since that branch does not have the WordSplitter impl for Box, it is utterly useless). A more intuitive way would be to store a Vec<Box<Options<dyn WordSplitter>>> and just using one of them to layout the text. This however has the disadvantage of storing all configurations redundantly.
It got me further thinking: with that approach, it actually is a bit hard to just replace the splitter (assuming dynamic dispatch) in general, since once you got a Box<Options<dyn WordSplitter>>, you have no longer sized access to the splitter field (as it is an unsized dyn WordSplitter), which makes replacing it rather impossible. So, what I did in the test-cases there was to replace the entire Options with one that happened to have a different splitter. Yet, interestingly, when using my above drafted splitter method (the one with the &self), this pattern becomes much easier, as you can easily obtain a clone of an existing Options, with just the splitter replaced (possibly with a different type), which then can be boxed again and used to replace the entire Options (but it effectively only replaces the splitter). Take for example:
// assuming the `impl-outside-boxing-in-0.12` with the splitter method from above
#[test]
fn boxing_outside_replace_splitter() {
    let mut dyn_box: Box<Wrapper<dyn WordSplitter>> = Box::new(Wrapper::new(10));

    assert_eq!(dyn_box.wrap("foo bar-baz"), vec!["foo bar-", "baz"]);

    // Just replace the splitter keeping the rest of the configuration in place
    dyn_box = Box::new(dyn_box.splitter(NoHyphenation));

    assert_eq!(dyn_box.wrap("foo bar-baz"), vec!["foo", "bar-baz"]);
}

So, that splitter works very well with the 'outer boxing' approach. Additionally, this allows the interactive demo to just use a single Options, the question then would be how to get the various splitter by-value without a Box<dyn WordSplitter>. Well, I ended up using a Vec of closures that would be given the current Options and return a fresh boxed Options with the new splitter but the old settings. I pushed it onto the impl-outside-boxing-in-0.12 branch too (however, I did rebase your interactive demo commit, so it is duplicated there):
https://github.com/mgeisler/textwrap/compare/0.12.1...Cryptjar:impl-outside-boxing-in-0.12
Finally, I just wanted note further, tho I state the 'outer boxing' and 'inner boxing' as different approaches (which they are when solving a concrete problem), they are not mutually exclusive for a library: i.e. one could image to allow a unsized S on Options allowing the 'outter boxing' approach and at the same time have impl of WordSplitter for Box (maybe also for Rc & friends) for the 'inner boxing' approach. Then each user can choose which approach to take. However, when it comes to convenience function, they could easily urge the user to go for only one of them.

Well, I thought about these issues again. And it seems to me, that there are actually two different use-cases if comes to trait objects (dynamic dispatch), besides the more traditional use-cases where static dispatch is sufficient:

The use-case I call 'library style', which is what I deduced that #178 needs. As I understood it, the author of #178 is writing a library and wants to allow his users to specify some arbitrary text wrapper or more specifically any WrapOptions (which didn't exist back then). The maybe most idiomatic way to express this is by a trait object of that trait (i.e.: dyn WrapOptions).
So the requirement here is only halfway solved by #206 (which also precede the WrapOptions trait). Yet, due to the introduction of that trait (#213) it is now possible for any user to implement their own WrapOptions, thus what I called 'inner boxing' is insufficient for this 'library style' use-case.

The use-case I call 'dynamic configuration' which is what the interactive demo (#218) needs, is a bit like a strategy pattern. In this case one could also choose WrapOptions trait object especially if dealing with additional user defined WrapOptions. However, as seen in the interactive demo, it is more like switching between hyphenation and simple word-wrapping that only needs to change the splitter but nothing else. And apparently, the easiest way to do this seems to be using a boxed WordSplitter i.e. Options<Box<dyn WordSplitter>>, which is what I called 'inner boxing'.

One point to notice here, is that in 1st use-case 'library style' it is preferable to allow the broadest set of implementation & configurations, thus a Box<dyn WrapOptions> is superior over a Options<Box<dyn WordSplitter>> (which only allows the Options struct but not a usize). Additionally, since this use-case is described as a 'library style', the entire configuration would be done by the user, so for the library there is hardly any reason to interact (i.e. like altering some configs) with the WrapOptions other than using it to wrap text. Thus, the problems with the 'outer boxing' that I described in last comment about difficulties when trying to change the splitter, do not really apply here.
On the other hand, in 2nd use-case 'dynamic configuration' one does want to actively alter the configuration, thus using a general trait object (like a Box<dyn WrapOptions>) makes things very complicated, and it becomes easier to have some concrete type (like a Options) which can be easily inspected and each configuration can be altered individual, thus a Options<Box<dyn WordSplitter>> seems to be best here.
Also notice, that a Box<dyn WrapOptions> is similar to what I called 'outer boxing' but actually goes beyond what I described previously (which was a Box<Options<dyn WordSplitter>>). So I would call the Box<dyn WrapOptions> more like the 'proper outer boxing'.

In summary, I would recommend, to support both use-cases the 'inner boxing' and the 'proper outer boxing'. I will open a new PR for implementing the 'proper outer boxing'. However, when considering both, I would change the API to static dispatch by default, i.e. changing Options::new from returning a Options<Box<dyn WordSplitter>> to a simple Options<HyphenSplitter>.
Two reasons here. First, static dispatch didn't seem to be an issue for the average user, and it is the only supported 'operation mode' in v0.12, so everyone using textwrap today is using static dispatch. It does not seem very reasonable to me to change that.
Second, when the default would be dynamic dispatch via inner boxing, most people would going to use it (simply because Options::new returns it), which would be not so nice for the 1st use-case 'library style' from above, since there one really wants the 'proper outer boxing'. However, if they get their values from the user, and they use the 'default way' (i.e. 'inner boxing') these options would need to be boxed again into a 'properly outer boxed' Option i.e. a doubly boxed Options.

I update this PR now to use static dispatch by default (962455c). In this context I made the Options::new now also a const fn and changed the splitter function to the 2nd version I described earlier:

Making it more general

impl<'a, S> Options<'a, S> {
    /// Allows type changes, works for all `S` & `T`, requires a `Box<dyn _>`
    /// when it should become `Options<Box<dyn _>>`
    pub fn splitter<T>(self, splitter: T) -> Options<T> {
        Options {
            width: self.width,
            initial_indent: self.initial_indent,
            subsequent_indent: self.subsequent_indent,
            break_words: self.break_words,
            splitter: splitter,
        }
    }
}

Thanks so much for the updates! I think it looks really good now. I like how you're able to basically remove all the noisy Box::new(...) calls I had to insert back in #213 — the new API looks cleaner while also being more flexible than before.
I've just merged my rewrite which dropped WrapIter (but kept Options, of course!) and I think it should be fairly simply to rebase your changes on top of the latest master. Then I'll be more than happy to merge them!

I just rebased this PR.

Thank you for the patience with the repeated changes and thanks for fixing a problem I didn't even realize I had introduced :-)

authors: Cryptjar mgeisler

repo: mgeisler/textwrap


text:
Shortcut keys stop displaying after first few items

The shortcut hot keys have stopped displaying after the first few items:

Todoist is pushing so many updates I may have missed when it actually happened, but I'm on v4197. Chrome is 116.0.584.140

I just made an account to say: yes, please fix this!

Fixed in version 179!  Sorry for the delay, been rather busy with other things.

source: gharchive/issue

authors: San88-source mgsloan paymarkconnex

repo: mgsloan/todoist-shortcuts

license: MIT

license_type: permissive

license_source: github-api


text:
🛑 Traffic Dashboard Mediahuis België is down

In 776349a, Traffic Dashboard Mediahuis België (https://traffic.mediahuis.be/api/system/status) was down:

HTTP code: 503
Response time: 421 ms

Resolved: Traffic Dashboard Mediahuis België is back up in f51ddf4 after 1 hour, 4 minutes.

repo: mh-data-science/upptime


text:
Question about extra agents

Hello Marcel,
I'm wondering if it's possible to specify a destination or goal for the extra_agents when modifying a scenario. Is there a way to make them move towards a particular point?

Hi @invinciblenuonuo,
This feature does unfortunately not exist. The extra_agents are controlled by idm policies that follow the current lane.
If you want them to move to a certain location, you need to adapt the route generation used in this function


text:
"Incorrect AES key length" error when clicking on "Install Addon"

My .env
HOST_URL="https://mediafusion.local"
POSTER_HOST_URL="https://mediafusion.local"
MONGO_URI="mongodb://mongodb:27017/mediafusion"
REDIS_URL="redis://redis:6379"
PROWLARR_URL="http://prowlarr:9696"
PROWLARR_API_KEY=679c6c05d77c444bbd2a4a6428ecfabf
PROWLARR_IMMEDIATE_MAX_PROCESS=5
PROWLARR_IMMEDIATE_MAX_PROCESS_TIME=15
PROWLARR_SEARCH_INTERVAL_HOUR="24"
IS_SCRAP_FROM_TORRENTIO="false"
ENABLE_RATE_LIMIT="false"
ENABLE_TAMILMV_SEARCH_SCRAPER="false"
SECRET_KEY=48bddf52-4282-430e-99f0-4976be5348f3
mkcert version 1.4.4
Mediafusion container log
024-05-29 10:28:57 docker-compose-mediafusion-1      | [2024-05-29 00:28:57 +0000] [10] [ERROR] Exception in ASGI application
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   + Exception Group Traceback (most recent call last):
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   |     yield
2024-05-29 10:28:57 docker-compose-nginx-1            | 172.22.0.1 - - [29/May/2024:00:28:57 +0000] "POST /encrypt-user-data HTTP/1.1" 500 21 "https://mediafusion.local/configure" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 190, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   |     async with anyio.create_task_group() as task_group:
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 680, in aexit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   |     raise BaseExceptionGroup(
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   +-+---------------- 1 ----------------
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     | Traceback (most recent call last):
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 411, in run_asgi
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     result = await app(  # type: ignore[func-returns-value]
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 69, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     return await self.app(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await super().call(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/applications.py", line 123, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.middleware_stack(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive, _send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/api/middleware.py", line 76, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     return await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |            ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/api/middleware.py", line 38, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/api/middleware.py", line 288, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/api/middleware.py", line 92, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     return await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |            ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/api/main.py", line 58, in add_cors_header
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.simple_response(scope, receive, send, request_headers=headers)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/cors.py", line 148, in simple_response
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 65, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await app(scope, receive, sender)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 756, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.middleware_stack(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 776, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await route.handle(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await self.app(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 77, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     await app(scope, receive, sender)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 72, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     response = await func(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                ^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raw_response = await run_endpoint_function(
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     return await dependant.call(**values)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/utils/wrappers.py", line 23, in wrapper
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     return await func(*args, **kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/api/main.py", line 515, in encrypt_user_data
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     encrypted_str = crypto.encrypt_user_data(user_data)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/mediafusion/utils/crypto.py", line 18, in encrypt_user_data
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     cipher = AES.new(settings.secret_key.encode("utf-8"), AES.MODE_CBC, iv)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/AES.py", line 228, in new
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     return _create_cipher(sys.modules[name], key, mode, *args, **kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/init.py", line 79, in _create_cipher
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     return modes[mode](factory, **kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/_mode_cbc.py", line 274, in _create_cbc_cipher
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     cipher_state = factory._create_base_cipher(kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/AES.py", line 90, in _create_base_cipher
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     |     raise ValueError("Incorrect AES key length (%d bytes)" % len(key))
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     | ValueError: Incorrect AES key length (36 bytes)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     +------------------------------------
2024-05-29 10:28:57 docker-compose-mediafusion-1      |
2024-05-29 10:28:57 docker-compose-mediafusion-1      | During handling of the above exception, another exception occurred:
2024-05-29 10:28:57 docker-compose-mediafusion-1      |
2024-05-29 10:28:57 docker-compose-mediafusion-1      | Traceback (most recent call last):
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 411, in run_asgi
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     result = await app(  # type: ignore[func-returns-value]
2024-05-29 10:28:57 docker-compose-mediafusion-1      |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 69, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     return await self.app(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await super().call(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/applications.py", line 123, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.middleware_stack(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive, _send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/api/middleware.py", line 76, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     return await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |            ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/api/middleware.py", line 38, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/api/middleware.py", line 288, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/api/middleware.py", line 92, in dispatch
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     return await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |            ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     with collapse_excgroups():
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in exit
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     self.gen.throw(typ, value, traceback)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await self.dispatch_func(request, call_next)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/api/main.py", line 58, in add_cors_header
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await call_next(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise app_exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive_or_disconnect, send_no_error)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.simple_response(scope, receive, send, request_headers=headers)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/cors.py", line 148, in simple_response
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 65, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await app(scope, receive, sender)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 756, in call
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.middleware_stack(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 776, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await route.handle(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await self.app(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 77, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise exc
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     await app(scope, receive, sender)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/starlette/routing.py", line 72, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     response = await func(request)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                ^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raw_response = await run_endpoint_function(
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     return await dependant.call(**values)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/utils/wrappers.py", line 23, in wrapper
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     return await func(*args, **kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/api/main.py", line 515, in encrypt_user_data
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     encrypted_str = crypto.encrypt_user_data(user_data)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/mediafusion/utils/crypto.py", line 18, in encrypt_user_data
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     cipher = AES.new(settings.secret_key.encode("utf-8"), AES.MODE_CBC, iv)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/AES.py", line 228, in new
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     return _create_cipher(sys.modules[name], key, mode, *args, **kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/init.py", line 79, in _create_cipher
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     return modes[mode](factory, **kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/_mode_cbc.py", line 274, in _create_cbc_cipher
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     cipher_state = factory._create_base_cipher(kwargs)
2024-05-29 10:28:57 docker-compose-mediafusion-1      |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-29 10:28:57 docker-compose-mediafusion-1      |   File "/home/mediafusion/.local/share/virtualenvs/mediafusion-ZmKbvzsi/lib/python3.11/site-packages/Crypto/Cipher/AES.py", line 90, in _create_base_cipher
2024-05-29 10:28:57 docker-compose-mediafusion-1      |     raise ValueError("Incorrect AES key length (%d bytes)" % len(key))
2024-05-29 10:28:57 docker-compose-mediafusion-1      | ValueError: Incorrect AES key length (36 bytes)

The key length needs to be 32 characters. The current one is 36 characters. I have just updated the document to correctly create a secret key with 32 characters.
You can remove 4 characters from the secret key in the .env file.
Alternatively, you can remove the existing key and create a new one with the following command:
$guid = [System.Guid]::NewGuid().ToString("N").Substring(0, 32)
Add-Content -Path .env -Value "SECRET_KEY=$guid"

yep, reduced key length in .env worked

repo: mhdzumair/MediaFusion


text:
Use label with regex

I have multiple labels that can match, is there a way to use regex?

There is no regex support today. Can you share more information about your use case?

I am currently using this
name: Pull Request Labels
on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize]
jobs:
  label:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: mheap/github-action-required-labels@v5
        with:
          mode: minimum
          count: 1
          labels: "Backport not needed, Required Backport 5.4"
          add_comment: true

But I have multiple Required Backport labels for example with 5.4, 5.5, and act. Since this always changes, I don't want to maintain this, just use regex if available

Is there a plan to implement it? or some kind of a workaround ?

I've just released v5.3.0 with regex support
Try this:
name: Pull Request Labels
on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize]
jobs:
  label:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: mheap/github-action-required-labels@v5
        with:
          mode: minimum
          count: 1
          labels: "Backport not needed\n Required Backport \d\.\d"
          use_regex: true
          add_comment: true

Note that regex labels must be newline delimited, not comma separated

Thanks @mheap , it doesn't seem to work yet, I have this configuration
name: Pull Request Labels
on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize]
jobs:
  label:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: mheap/github-action-required-labels@v5
        with:
          mode: minimum
          count: 1
          labels: "backport/none\n backport \\d.\\d"
          use_regex: true
          add_comment: true

When i set the label to be backport/none it's working as expected

But when i set it to backport 5.2 it's not
![image](https://github.com/mheap/github-action-required-labels/assets/9914527/1d0aeb4a-c1b8-4ab1-bcbf-761446c811d6)

@mheap It seems to be related to the \n when i just put backport X.X it's working without any issues

So it is working, all i need is `labels: "backport/"

@mheap Working now :-) , Thanks

@mheap one more question. Can I limit this GitHub action to work only when the ref branch is a specific branch?

Yes, see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-including-branches

authors: mheap yaronkaikov

repo: mheap/github-action-required-labels


text:
Code Review Exercise

Hey Hossain! Pretty cool the app you have made...there is nothing to say about the code in JS, is done with ES6 best practices.  The only thing I would suggest is to improve the styling, you can put a awsome background.  Thanks for sharing your project!

Hey Hossain! Pretty cool the app you have made...there is nothing to say about the code in JS, is done with ES6 best practices. The only thing I would suggest is to improve the styling, you can put a awsome background. Thanks for sharing your project!

authors: JuanDBta mhnazary

repo: mhnazary/Temperature-Converter


text:
Support for quic 46

1. What would you like to have changed?
Yes... quic seems to have updated again to version 46...
Latest chrome don't love quic version 44 anymore and is not using it...
So can caddy add support for quic version 46?
2. Why is this feature a useful, necessary, and/or important addition to this project?
Since support for quic is an really attractive feature of caddy as an web server, I think it would be great and important to continue supporting & maintaining quic.
3. Please link to any relevant issues, pull requests, or other discussions.
Since quic standard is quickly evolving and git repository of quic's rfc is updating every half day , I would argue maybe it's better to wait for the rfc to finalize and then implement it afterwords, then chrome maybe willing to communicate with host even if it's one / two version behind.
(Sorry for my bad english orz

Which version are you testing with?
Chrome Canary (75.0.3732.0) still speaks QUIC 43.

Chrome 73.0.3683.75 (Official Build) (64-bit)

Then you're probably on an experiment. We won't support that.

fine.......................

sorry...........

authors: marten-seemann wusatosi

repo: mholt/caddy

license_source: bigquery


text:
API SYNO.SurveillanceStation.Camera does not exists

DSM:7.2.x
Surveillance Station:9.2.0-11289
synology_dsm.exceptions.SynologyDSMAPINotExistsException: {'api': 'SYNO.SurveillanceStation.Camera', 'code': -2, 'reason': 'Unknown', 'details': 'API SYNO.SurveillanceStation.Camera does not exists'}

Hi @ohyeah521
Do you have a bit more context and details?

D:\>pydsm_test.py
Creating Valid API
D:\pydsm_test.py:8: DeprecationWarning: verify_ssl is deprecated, use ssl=False instead
  connector=aiohttp.TCPConnector(verify_ssl=False)
Traceback (most recent call last):
  File "D:\pydsm_test.py", line 44, in <module>
    asyncio.run(main())
  File "C:\Python3\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "D:\pydsm_test.py", line 10, in main
    await do(session)
  File "D:\pydsm_test.py", line 23, in do
    camera_id = cameras[0].camera_id
                ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'SynoCamera' object has no attribute 'camera_id'

pydsm_test.py source code:
import asyncio
import aiohttp
from synology_dsm import SynologyDSM

async def main():
    print("Creating Valid API")
    async with aiohttp.ClientSession(
        connector=aiohttp.TCPConnector(verify_ssl=False)
    ) as session:
        await do(session)

async def do(session: aiohttp.ClientSession):
    api = SynologyDSM(****************)
    await api.login()

    surveillance = api.surveillance_station
    await surveillance.update() # First update is required

    # Returns a list of cached cameras available
    cameras = surveillance.get_all_cameras()

    # Assuming there's at least one camera, get the first camera_id
    camera_id = cameras[0].camera_id

    # Returns cached camera object by camera_id
    camera = surveillance.get_camera(camera_id)

    # Returns cached motion detection enabled
    motion_setting = camera.is_motion_detection_enabled

    # Return bytes of camera image
    await surveillance.get_camera_image(camera_id)

    # Updates all cameras/motion settings and cahce them
    await surveillance.update()

    # Gets Home Mode status
    home_mode_status = await surveillance.get_home_mode_status()

    # Sets home mode - true is on, false is off
    await surveillance.set_home_mode(True)

if __name__ == "__main__":
    asyncio.run(main())

I did some testing and found that this error occurs when the SurveillanceStation service crashes. 'details': 'API SYNO.SurveillanceStation.Camera does not exists'
D:\pydsm_test.py:8: DeprecationWarning: verify_ssl is deprecated, use ssl=False instead
  connector=aiohttp.TCPConnector(verify_ssl=False)
Traceback (most recent call last):
  File "D:\pydsm_test.py", line 44, in <module>
    asyncio.run(main())
  File "C:\Python3\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "D:\pydsm_test.py", line 10, in main
    await do(session)
  File "D:\pydsm_test.py", line 17, in do
    await surveillance.update() # First update is required
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\api\surveillance_station\__init__.py", line 81, in update
    raw_data = await self._dsm.get(self.CAMERA_API_KEY, "List", max_version=7)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\synology_dsm.py", line 239, in get
    return await self._request("GET", api, method, params, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\synology_dsm.py", line 311, in _request
    url, params, kwargs = await self._prepare_request(api, method, params, **kwargs)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\synology_dsm.py", line 282, in _prepare_request
    raise SynologyDSMAPINotExistsException(api)
synology_dsm.exceptions.SynologyDSMAPINotExistsException: {'api': 'SYNO.SurveillanceStation.Camera', 'code': -2, 'reason': 'Unknown', 'details': 'API SYNO.SurveillanceStation.Camera does not exists'}


text:
twisted-error on Fedora23

When I try to install the tor-browser via the tor-launcher I get the following error on Fedora 23:
Download error: Connection was refused by other side: 111: Connection refused. <class 'twisted.internet.error.ConnectionRefusedError'>
python-txsocksx is at version 1.15.0.2-1 apparently (package name is python-txsocksx-1.15.0.2-1.fc23.noarch)
Any ideas what I can do to fix this on my side?

torbrowser-launcher is at version 0.2.2

Tried it now with installing txsocksx via pip and cloned this repo and still get the same error.

This looks like you are missing certificates. On Debian I could solve a similar situation by installing the ca-certificates packages.
Also you might want to try 0.2.3 which was released yesterday :)

@h01ger thanks. 0.2.3 works :)

repo: micahflee/torbrowser-launcher


text:
add_signature method not working

Hello, I have a ts code that works fine when I try to do: transaction.addSignature(notary, bs58.decode(sigStr));
On python on the other hand, it's returning:
Traceback (most recent call last):
  File "c:\Users\Downloads\Solana\Solana\test.py", line 260, in <module>
    asyncio.run(test())
  File "C:\Users\AppData\Local\Programs\Python\Python39\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Users\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 642, in run_until_complete
    return future.result()
  File "c:\Users\Downloads\Solana\Solana\me_launchpad.py", line 254, in test
    tx_instructions.add_signature(pubkey=PublicKey(infos.notary), signature=base58.b58decode(str(sig_str)))
  File "C:\Users\AppData\Local\Programs\Python\Python39\lib\site-packages\solana\transaction.py", line 271, in add_signature
    raise ValueError("unknown signer: ", str(pubkey))
ValueError: ('unknown signer: ', 'A8b43w4efa2G6T4pQR9Hif8nj5A3ow2bnx6dAzYJBffP')

I am 99% sure that the my python code and the ts codes are 1:1 and this is the last step needed for my transaction.
I previously add the infos.notary as a signer through anchorpy like this:
remAccounts.append(AccountMeta(pubkey=PublicKey(infos.notary), is_signer=True, is_writable=False))
Yet when I try to add a signature it gives that first error.
Could you please help me out?
I'm currently using the latest version of both, solanapy and anchorpy. Python version is 3.9.10

#182 Error was due to this, could you please take a look?

repo: michaelhly/solana-py


text:
resnet50_ibn_a.pth can not download

Can you give me a baidu cloud link? Thank you !

Hi, you can download the pre-trained weight at: https://pan.baidu.com/s/1yEvkJBP0mmoLP-vGaAxdeA

Thank you very much!
------------------ 原始邮件 ------------------
发件人: "Hao Luo"notifications@github.com;
发送时间: 2019年10月10日(星期四) 上午9:57
收件人: "michuanhaohao/reid-strong-baseline"reid-strong-baseline@noreply.github.com;
抄送: "weili"1538517531@qq.com;"Author"author@noreply.github.com;
主题: Re: [michuanhaohao/reid-strong-baseline] resnet50_ibn_a.pth can notdownload (#90)
Hi, you can download the pre-trained weight at: https://pan.baidu.com/s/1yEvkJBP0mmoLP-vGaAxdeA
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

authors: michuanhaohao visionxy

repo: michuanhaohao/reid-strong-baseline


text:
micro-ros agent initializes and creates nodes, topics only after unplugging and plugging back the USB everytime

Issue template

Hardware description:
Raspberry Pi 4 Model B

RTOS:
Using micro-ROS with Raspberry Pi Pico.

Installation type:
Followed the installation steps from Teensy with Arduino section from the Tutorials of micro-ros website.

Version or commit hash:
Using humble

Actual behavior
when I run the command
 ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyACM0
I get the below output
[1722173514.344108] info     | TermiosAgentLinux.cpp | init                     | running...             | fd: 3
[1722173514.345154] info     | Root.cpp           | set_verbose_level        | logger setup           | verbose_level: 4

and does nothing. After I unplug the USB and Plug it back I get the below output and all my nodes are active. Which is the expected behavior, but why do I need to unplug and plug the USB every time? How can I solve this?
[1722173654.738771] info     | TermiosAgentLinux.cpp | init                     | running...             | fd: 3
[1722173656.288891] info     | Root.cpp           | create_client            | create                 | client_key: 0x0DA77874, session_id: 0x81
[1722173656.289134] info     | SessionManager.hpp | establish_session        | session established    | client_key: 0x0DA77874, address: 0
[1722173656.328959] info     | ProxyClient.cpp    | create_participant       | participant created    | client_key: 0x0DA77874, participant_id: 0x000(1)
[1722173656.331903] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x0DA77874, topic_id: 0x000(2), participant_id: 0x000(1)
[1722173656.333897] info     | ProxyClient.cpp    | create_subscriber        | subscriber created     | client_key: 0x0DA77874, subscriber_id: 0x000(4), participant_id: 0x000(1)
[1722173656.336467] info     | ProxyClient.cpp    | create_datareader        | datareader created     | client_key: 0x0DA77874, datareader_id: 0x000(6), subscriber_id: 0x000(4)
[1722173656.339489] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x0DA77874, topic_id: 0x001(2), participant_id: 0x000(1)
[1722173656.341205] info     | ProxyClient.cpp    | create_publisher         | publisher created      | client_key: 0x0DA77874, publisher_id: 0x000(3), participant_id: 0x000(1)
[1722173656.344010] info     | ProxyClient.cpp    | create_datawriter        | datawriter created     | client_key: 0x0DA77874, datawriter_id: 0x000(5), publisher_id: 0x000(3)
[1722173656.346707] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x0DA77874, topic_id: 0x002(2), participant_id: 0x000(1)
[1722173656.348612] info     | ProxyClient.cpp    | create_publisher         | publisher created      | client_key: 0x0DA77874, publisher_id: 0x001(3), participant_id: 0x000(1)
[1722173656.351384] info     | ProxyClient.cpp    | create_datawriter        | datawriter created     | client_key: 0x0DA77874, datawriter_id: 0x001(5), publisher_id: 0x001(3)
[1722173656.353954] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x0DA77874, topic_id: 0x003(2), participant_id: 0x000(1)
[1722173656.355947] info     | ProxyClient.cpp    | create_publisher         | publisher created      | client_key: 0x0DA77874, publisher_id: 0x002(3), participant_id: 0x000(1)
[1722173656.358593] info     | ProxyClient.cpp    | create_datawriter        | datawriter created     | client_key: 0x0DA77874, datawriter_id: 0x002(5), publisher_id: 0x002(3)
[1722173656.361138] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x0DA77874, topic_id: 0x004(2), participant_id: 0x000(1)
[1722173656.363170] info     | ProxyClient.cpp    | create_publisher         | publisher created      | client_key: 0x0DA77874, publisher_id: 0x003(3), participant_id: 0x000(1)
[1722173656.365905] info     | ProxyClient.cpp    | create_datawriter        | datawriter created     | client_key: 0x0DA77874, datawriter_id: 0x003(5), publisher_id: 0x003(3)

You will need to add re-connection support.
https://github.com/micro-ROS/micro_ros_arduino/blob/jazzy/examples/micro-ros_reconnection_example/micro-ros_reconnection_example.ino
Use of Humble is not recommended for new designs. You should move to current LTS stable release Jazzy and Ubuntu 24.04.

You may check my wiki.
https://github.com/hippo5329/micro_ros_arduino_examples_platformio/wiki

You should check if /dev/ttyACM0 exists. "ls /dev/ttyA*" .
The arduino examplea without re-connection will timeout and enter error_loop(), if it failed to connect the agent.

This solved my issue. Thanks.


text:
esp32 installation error

when i run the command :ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32
it starts properly but stops at the exact same step as mentioned in image and gives error of permission denied
checked updates but everything is set for display only and no process is currently running as seen in photo still the error
ROS2 version - foxy
Thanks in advance

In which step do you have this error? This is related to a missing sudo. Tell me details about your process.

Anyway, meanwhile we debug and fix this permission issue, if you are targeting micro-ROS for ESP32 check this port: https://github.com/micro-ROS/micro_ros_espidf_component

Thanks for the instant reply, and will check the esp-idf component method,
And yeah it looks like an sudo error. My process is simple :

git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
2.rosdep update && rosdep install --from-path src --ignore-src -y
3.colcon build
4.source install/local_setup.bash
5.ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32

I have tried this probably like 3 times now , but it stops at same step eveytime

I see that the error is in the apt of this line.
This was added https://github.com/micro-ROS/micro_ros_setup/pull/220.
Should we find another way of installing pip3 and virtualenv? Maybe we can just check if the packages are installed and raise an error telling the user that they are needed, because of course we can't assume root permission in this creation script.
Thoughts @jamoralp?

Well i just deleted the two lines: apt install -y python3-pip ,pip3 install virtualenv from create.sh
And then installed them manually.
Later when i ran : ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32 , there was no error.

The error is clearly coming from there. I will think about a better way to solve this. Probably warning the user about which packages are required to be installed in case they don't already exist in the system is the better solution.

Well i just deleted the two lines: apt install -y python3-pip ,pip3 install virtualenv from create.sh
And then installed them manually.
Later when i ran : ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32 , there was no error.

for anyone else - dont forget to re-run colcon build after making these changes ^^^.
i forgot too :smile:

Please see https://github.com/micro-ROS/micro_ros_setup/pull/231

Closing since #231 merged. Please reopen if problems related to this issue.


text:
Mocha/Nock: encodedParams Issue

Unable to mock API calls because nock can not pick up the encoded query params. I emulated your current test suite set-up, to no luck.
Output from nock.recorder.rec():
nock('https://demo-shop.myshopify.com:443', {"encodedQueryParams":true})
  .put('/admin/orders/4476182279.json', {"order":{"tags":"one,two,three"}})
  .reply(200, ["1f8b080aaa03000000ffff","ec57db8edb3610fd15417d6981f5429464cbf2533749fb96a6a893a726106892b28995488517efbac1fe7b86a46ef63a97a2796c8005a2e1903373e6cc21fd29968a32156f3ec59cc69b3c2f56689da6c5fa26662de64dbc8935a6b8d5254a7edd3bcb2d916d7c1393466a462b6ce28db04d0306c5b0e92d719aa0d502250b54bc45d9262f3679b248f24d92c04edbd1e78ee9f26d9a6c50b2c9d2d151d876e752cb0af8bf340cdc89940dac1879cf047c62c44a426b8258b1ae770949basdf38295a97aa0428776f6c4548509619dd1558bd53d335cec874802b76efb4f28c972d8af58cd9482f54a73877d38a3c1825eda08d4c29ae69c0dde560127b41c1398215b594d27d4c981917b692ff2f519006e6320ab217f47d33e1749b0e152cc4c5a5a058773ca84e13577ec395bb0aa192c9d928469fd3d8ca5ecc8fda923924a3ef85cba6bb840d5f560f7d3550d4c066881cb43332b2229838efefd21f01b12318aefac198c1d3eb55048d573b8721d1a9642f62e64cbcc41d240f011c86790f4dd4dcb7c890a4741dbd4bc69fcf90309fb2ee1474fab3e92c17bc7ba1d86835d3137d1d6ee3451bc73d89f7f45bf73a5cd7bf1c66b8a67b3c1c4545f979280514862dea189db9049d0a7f5ba480a54944bd0a723561c8b506a9614cb72992e57192c186e1a57eb4bdc69dbb0b30c75f4de2649ba8afe62aefce84f284b47d19d353202aeb187e8e7ed81773a6247a64e511abd86asdf27dff5c13aa33729d6bfe24f9df39b32ee298e2600df39315195a0139d6e93426c03941a1efd17620c844ef75afcf20545ff00cf2328aea410a36e93740addd557f85cc3385a2ace18e26c03ec3f6c088e912810bc84bfea59c3fab7707c7bb7231a5c075edde33b5d3a241f72075dff37e1d81294f96d1ca1ca2bb23bb8dee3a731b2137a77d0971069a82966899640e00df9a788b41e294bbbaa13560fec75d00719923b40e843d727f5dc1cc34bc964a70ecd1832e2a7ffb034d187553ee34dedd1a53862f24d76cca301d41906d87c569ba68a06fd6b5232b6e8b75b22a90bb09c5beb72e509adee6ab3ccf8ae538c2befa6888d0e753f55d7db79de53e185fde01e12716fd0feb8f8475360efd250b2f062b68ff41ac36b29d3dcad710142154e4df7a947ff16df7df1ee7a8f48ed92641a3e3551a5c03de8ba9ae7a2983129c723907269cf2d1f129abbb7003f46f427f56781a5cfe32093f06861b543965a0c31b23d4dbdac6f00e6bfd05ed608faced663f05c21be78e1810a2e1a2dbf93b6096c6c50399b21a4398f96cb844e17955ae57abdcbd44be1ba40b367e7b9c9ed1f9fa24fdfbd9b998bd6b537b95fd57987e7d2asdf0000ffff","0300d4ea6asdfa20e0000"]

Any thoughts?

I'm not sure if I understand the issue correctly but in our test suite we encode the query parameters before hand and append them to the path, see https://github.com/microapps/Shopify-api-node/blob/5e79840bb074b1c2d9ca908b9d92adadfee56201/test/asset.test.js#L45.
If this doesn't help can you clarify or provide more details?
Thanks.

Closing due to inactivity.

repo: microapps/Shopify-api-node


text:
Change charts in filter inspection to parallel charts

Use https://github.com/sgratzl/chartjs-chart-pcp

Done

repo: microbit-foundation/cctd-ml-machine


text:
Ingress and Nougat

I have just updated my ROM to LineageOS 14.1 (Android Nougat).

wiped the phone
flash the rom
follow installation instructions
copy NetworkLocation.apk to /system/priv-app/
reboot

The microg self-check is all ticked (apart from play store installed).
But Ingress displays this message
Google Play services
com.nianticproject.ingress.NemesisApplication relies onGoogle Play services, which is not supported by your device. Contact the manufacturer for assistance.

Ingress is unusable as it displays
Scanner disabled; Location inaccurate

Location is found with SatStat and HereGPSLocation (both network and GPS).
Have I missed something?

Hi JohnnyTech
I just downloaded the ingress App on my Phone
Resurrection Remix (based on LineageOS 14.1)
and i had no problems.
I had a similar problem two weeks ago...
How did you patched for signature spoofing ?

Nevermind
,,The microg self-check is all ticked (apart from play store installed)."
Did you installed the FakeStore? Its a dummy App that spoofs the existance of the Play Store.
You can find it here: https://github.com/microg/android_packages_apps_GmsCore/wiki/Downloads

I didn't see FakeStore in F-Droid so I disabled all repositories apart from https://microg.org/fdroid/repo and then it appeared.
Note that v0.0.1 is marked as release but v0.0.2 is newer, maybe @mar-v-in needs to tag it in Github.
But, thank you @Herny64, installing it and rebooting has worked. I must have done it with Marshmallow but forgotten about it as I didn't think that having a store was important..
FYI I used Tingle for signature spoofing - it has never let me down.

For reference, if you don't have Play Store or Fake Store or another app that identify as Play Store many apps won't detect Google Play services.
PS: If you use GmsCore you don't have to copy NetworkLocation.apk to /system/priv-app/ but GmsCore.apk (and if you don't have a ROM that can load native libraries directly from the apk you have to also manually extract them).


text:
Introduce BOM module

While investigating support for Pulsar in Micronaut Test Resources,
we figured out that the Pulsar module isn't included in the Micronaut BOM.
Prior to adding it to the Micronaut BOM, it would be nice to align this
module with the other Micronaut modules so that it publishes a BOM.
This is what this commit does: it adds a pulsar-bom module. As part
of the process, I cleaned up the build, which was setup in a weird way,
with test modules applying modules which are normally only for published
modules.
This also imples renaming the root project to the convention recognized
by the BOM plugin.

@melix Thanks. Although conflicts a lot of stuff I did locally for the next version :D . I cleaned up couple of things and moved a bunch of stuff. However, I think it's better this way as I was working alone and didn't have enough time to keep up to date with changes that Micronaut official team made - thus the "weird way" of the setup currently. So it actually helps me a lot and I'll try to invest some time this week to push even more changes.

source: gharchive/pull-request

authors: harissecic melix

repo: micronaut-projects/micronaut-pulsar