Bump pyEmby version to account for API changes

Description:
Emby is going through some codebase changes that are altering the API.  This PR accounts for a key change that was breaking things on the latest version.  Code fix is backwards compatible.
Checklist:
If the code communicates with devices, web services, or third-party tools:

[x] Local tests with tox run successfully. Your PR cannot be merged unless tests pass
[x] New dependencies have been added to the REQUIREMENTS variable (example).
[x] New dependencies are only imported inside functions that use them (example).
[x] New dependencies have been added to requirements_all.txt by running script/gen_requirements_all.py.

Your coverage is to bad. Maby a rebase helps here?


SQS queue deleted on TERMINATION notice vs after handler script

@itsdalmo I noticed that we now delete the SQS queue as soon as we get a termination notice vs after the handler script. I would have thought this should happen after the handler script finishes in case it fails. Was that intentional? We don't document anywhere how a failure from the handler script should run, based on the current docs I'd probably just assume it will complete the termination even on failure. Thoughts?


05:26:13
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","listener":"autoscaling","msg":"Polling sqs for messages","queueURL":"https://sqs.us-east-1.amazonaws.com/172840064832/lifecycled-i-022df5779e8fcc9d2","time":"2018-10-04T05:26:13Z"}

05:26:14
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","listener":"spot","msg":"Polling ec2 metadata for spot termination notices","time":"2018-10-04T05:26:14Z"}

05:26:17
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","listener":"autoscaling","msg":"Received an SQS message","subject":"Auto Scaling: Lifecycle action 'TERMINATING' for instance i-022df5779e8fcc9d2 in progress.","time":"2018-10-04T05:26:17Z","type":"Notification"}

05:26:17
{"arn":"arn:aws:sns:us-east-1:172840064832:lifecycled-example-lifecycle:87cf3edc-90ce-45a1-98e5-26f757866f5e","instanceId":"i-022df5779e8fcc9d2","level":"debug","listener":"autoscaling","msg":"Deleting sns subscription","time":"2018-10-04T05:26:17Z"}

05:26:17
{"instanceId":"i-022df5779e8fcc9d2","level":"info","msg":"Received termination notice","notice":"autoscaling","time":"2018-10-04T05:26:17Z"}

05:26:17
{"instanceId":"i-022df5779e8fcc9d2","level":"info","listener":"spot","msg":"Stopped listener","time":"2018-10-04T05:26:17Z"}

05:26:18
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","listener":"autoscaling","msg":"Deleting sqs queue","queue":"lifecycled-i-022df5779e8fcc9d2","time":"2018-10-04T05:26:18Z"}

05:26:18
{"instanceId":"i-022df5779e8fcc9d2","level":"info","listener":"autoscaling","msg":"Stopped listener","time":"2018-10-04T05:26:18Z"}

05:26:18
{"instanceId":"i-022df5779e8fcc9d2","level":"info","msg":"Executing handler","notice":"autoscaling","time":"2018-10-04T05:26:18Z"}

05:26:28
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:26:28Z"}

05:26:38
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:26:38Z"}

05:26:48
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:26:48Z"}

05:26:58
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:26:58Z"}

05:27:08
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:27:08Z"}

05:27:18
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:27:18Z"}

05:27:28
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:27:28Z"}

05:27:38
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:27:38Z"}

05:27:48
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:27:48Z"}

05:27:58
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:27:58Z"}

05:28:08
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:28:08Z"}

05:28:18
{"instanceId":"i-022df5779e8fcc9d2","level":"debug","msg":"Sending heartbeat","notice":"autoscaling","time":"2018-10-04T05:28:18Z"}

05:28:18
{"instanceId":"i-022df5779e8fcc9d2","level":"info","msg":"Lifecycle action completed successfully","notice":"autoscaling","time":"2018-10-04T05:28:18Z"}

05:28:18
{"duration":"2m0.252715704s","instanceId":"i-022df5779e8fcc9d2","level":"info","msg":"Handler finished succesfully","notice":"autoscaling","time":"2018-10-04T05:28:18Z"}

I would have thought this should happen after the handler script finishes in case it fails. Was that intentional? We don't document anywhere how a failure from the handler script should run, based on the current docs I'd probably just assume it will complete the termination even on failure. Thoughts?

It was intentional; even if the handler script fails, we don't have any options since ABANDON or CONTINUE will both proceed with the termination. And even if we could ABANDON, that would just leave us with instances whose handlers fail to execute. I.e. I don't think we have any recourse if the handler script fails, so we might as well clean up immediately since we know that the instance will be terminated anyway?
If you want to retry the handler, we could retry the handler if it exits with an error, but that would require that the handler script is idempotent, so I think it's best that any retry-logic is done by the user directly in their script.

I'd probably just assume it will complete the termination even on failure

The lifecycle action will complete on handler failure, and since we are using CommandContext it should also complete if lifecycled is currently executing the handler but receives a SIGTERM. This is good in the following cases:
Someone hits terminate in the console:
If someone hits terminate in the console the autoscaling group will still be waiting for the lifecycle action to be completed until the heartbeat timeout. So its good to just complete it when we receive a SIGTERM.
The handler has executed long enough that we have hit the max limit for the wait state:

The maximum amount of time that you can keep an instance in a wait state is 48 hours or 100 times the heartbeat timeout, whichever is smaller.
Source: https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html

In our example we have 1min heartbeat timeout, which allows us to stall the termination a max of 1h and 40min. If the handler executes longer than that, lifecycled will receive a SIGTERM and the whole machine has an indeterminable (not documented) amount of time to complete shutdown. As far as I've read, it seems like ~30 seconds after the SIGTERM the machine is killed outright.
All in all, I've tried to make it so that the subscription and queue are guaranteed to be cleaned up no matter if the handler script succeeds/fails, we get a SIGTERM or just otherwise fail to execute - and as fast as possible to avoid ending up in situations where there is no time to clean up. So starting the cleanup immediately when receiving a termination notice seemed prudent since we don't have any recourse and we know that the instance will be terminated in the end anyway.

Yup, I think I agree, just wanted to make sure it was intentional!


Webpack

https://cdn.worldvectorlogo.com/logos/webpack.svg

The new webpack logo is already on the site.


microsoftaccount retrieving access_token accross requests on ASP.NET CORE 2.0

Hi all;
I can't figured out how to retrieve the access_token once authenticated from within the MicrosoftAccount provider.
Well, to be honest, I should be able to retrieve it if it's stored in a data store using the _signinManager instance.
Storing the token in my datastore
await _signInManager.UpdateExternalAuthenticationTokensAsync(info);

Following this issue https://github.com/aspnet/Identity/issues/1452
Making a SQL call on every requests does not seems correct to me.
Getting the value from a cookie / claim / datastore ?
I tried to set the tokens in a cookie, or a claims, but actually, I didn't find anyway to make it work...
Here is my extract code:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddMicrosoftAccount(microsoftOptions =>
{
    var azureAdOptions = Configuration.GetSection("AD").Get<AdConfig>();

    microsoftOptions.ClientId = azureAdOptions.ClientId;
    microsoftOptions.ClientSecret = azureAdOptions.Secret;

    microsoftOptions.SaveTokens = true;

    microsoftOptions.Events.OnCreatingTicket = (option) =>
    {
        option.Properties.IsPersistent = true;
        option.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(5);
        List<AuthenticationToken> tokens = option.Properties.GetTokens() as List<AuthenticationToken>;
        tokens.Add(new AuthenticationToken() { Name = "TicketCreated", Value = DateTime.UtcNow.ToString() });
        option.Properties.StoreTokens(tokens);

        return Task.CompletedTask;
    };

})
.AddCookie()

The microsoftOptions.SaveTokens = true; allows me to retrieve the tokens on call back and then saved tokens using the SigninManager.
It's working, but not want I want, actually...
During the OnCreatingTicket event, I tried several things. My last attempt was to try to set an expired time on the cookie generation:
option.Properties.IsPersistent = true;
option.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(5);

Finally, after sucessfully log in, I try to retrieve my tokens, with several methods, but none of them are working, yet :)
if (User.Identity.IsAuthenticated)
{
    // 1) Using siginmanager
    var info = await _signInManager.GetExternalLoginInfoAsync();

    // 2 Using http context
    string accessToken = await HttpContext.GetTokenAsync("access_token");

    // 3 Using http context with scheme
    string accessToken2 = await HttpContext.GetTokenAsync(MicrosoftAccountDefaults.AuthenticationScheme, "access_token");

    // 4 Using http context with scheme
    //string accessToken3 = await HttpContext.GetTokenAsync(CookieAuthenticationDefaults.AuthenticationScheme, "access_token");

    // 5 Using the Identity.Application scheme
    string at = await HttpContext.GetTokenAsync("Identity.Application", "access_token");

    // 6 Using the Identity.Application scheme
    // Seems to be what signinManager actually did.
    string at2 = await HttpContext.GetTokenAsync("Identity.External", "access_token");

}

I tried to change some properties like the default schema, trying services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) or services.AddAuthentication(MicrosoftAccountDefaults.AuthenticationScheme) but nothing works actually.
Do you have any idea ?

Ok, got it.
You have to save the tokens, since the Identity.External cookie seems to be deleted after the authentication (do not hesitate to correct me if I'm wrong)
So the deal is to add the tokens after Post back authentication
if (result.Succeeded)
        {
            result = await _userManager.AddLoginAsync(user, info);
            if (result.Succeeded)
            {
                var props = new AuthenticationProperties();
                props.IsPersistent = true;
                props.ExpiresUtc = DateTime.UtcNow.AddDays(5);
                props.StoreTokens(info.AuthenticationTokens);
                await _signInManager.SignInAsync(user, props, info.LoginProvider);

                // Add this to add token to datastore
                // Update the token
                await _signInManager.UpdateExternalAuthenticationTokensAsync(info);

                _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
                return LocalRedirect(Url.GetLocalUrl(returnUrl));
            }
        }

This is not an easy path to get something that seems to me a basic scenario in my opinion ?
What do you think ?
Other bonus question : How do you handle the token expiration ?

Duplicate of https://github.com/aspnet/Security/issues/1668, https://github.com/aspnet/Security/issues/1685


1.18 Chinese submission

I have translated the language file for version 1.18 into Chinese. Can I merge it into the mod?

Uploading zh_cn.json…


Differences between SAS Documentation and DLPy Documentation

I was wanting to know which method is recommend to load images using python. SAS documentation states the following:
https://go.documentation.sas.com/?docsetId=casactml&docsetTarget=casactml_loadimages_syntax.htm&docsetVersion=8.2&locale=en
DLPy documentation states the following:
https://sassoftware.github.io/python-dlpy/generated/dlpy.images.ImageTable.load_files.html#dlpy.images.ImageTable.load_files
The methods are both similar but it seems that the method described in SAS's documentation has further options such as recuse for sub-directories.

Depends on your data. If load_files works well (it calls loadImages), just use it. If not, you can switch to loadImages with more options.

Okay, thank you for your response. I assume that if I use loadImages then I need to specify a CasLib compared to using load_files which will create a temporary caslib if not specified

Yes. DLPy tries its best to hide caslib. If you use the action interfaces, you have to use caslib. :)

Pretty much. DLPy drives SAS functionalities under the hood. DLPy tries make most of the operations easy while using default parameters with easy access. Also hiding CAS(SAS) specific terminology so that anyone can pick up and start using it.


[AV v0.7r] Redstone Integrator Not Updating Block

Descripe
I went to open the doors to my reactor room, only to notice that the doors never opened. I entered the password again, exited the program (which leaves the redstone signals on), and went above the doors, destroyed and replaced the redstone dust under the redstone integrator, only for the redstone to suddenly spring to life.
I even removed and replaced the integrator to see if that would change anything, only for nothing to change.
Steps to reproduce

Place down a redstone integrator.
Place redstone under the integrator.
Activate the bottom side.
Remove the redstone dust and place it again.

Version
0.7r (Latest)
Minecraft, Forge and maybe other related mods versions
Forge v36.2.2, Advanced Peripherals v0.7r, Computercraft: Tweaked v1.98.1
Screenshots or Videos
No response
Crashlog/log
No response

Fixed in 0.7.1r


[FEATURE] Send notifications using GitHub username from Contributions Catalog.

Description
Send email notifications to reviewers when new contributions are assigned to them or removed from their list of contributions to review. This can be done using github username.
Create a method to send an email notification, given the github username and message to be sent. This method can then be used to notify the reviewers.
This feature is part of #397 , Key Feature number 9.
Acceptance Criteria
Reviewers get an email notification.

Hi, @minump, please move this to the Events Manager repo. Thanks.

I have updated the title to avoid my future confusion! :-)

Changing the scope to add reviewers email id in reviewer collection and send email via SMTP servers.

We can need to send notifications to reviewers when a Contribution gets added to the system.
We need to look at sending notifications for the below items after some discussion:

Reviewing
Approved
Disapproved
Publishing


Make "pip install -e ." work

Some dependencies are still missing, so I can't run tests
@aronasorman do you want me to give this repo an overhaul regarding tests etc? Or should I wait with the review?

Btw @aronasorman in case you've been fishing around with str() calls in setup.py for Python 2.7, have a look at this issue and who fixed it: https://github.com/pypa/setuptools/issues/190 :)

@aronasorman I'm gonna merge this, but feel free to comment in hindsight, I can make amends.


Installation error GTK

Hello,
I am getting the error in image below while installing.
Do you know how to solve it?

Thank you,
Andrea

Same problem - I am guessing it is because it won't work on Windows 10.  I just tried it on a Win 7 laptop & it worked fine.

Can you try the latest version and see if the error still persists?
I will reopen this issue if necessary- but closing it for now.

Still not working

does your name have a space in it? I think it needs to be quoted.

It showed the msiexec help in a popup window for me.

Same error for min on Windows 10.
Running %LocalAppData%\Temp\gtk-sharp.msi manually and then re-reunning Flickr Downloader solved it.


fixing addon dependency for other addons

#minor#

Approved - what happened to the pullapprove check?

I am wondering that too...  I don't see the component listed in pullapprove - whoever created it might need to add it.  I will look into it.

Probably was created before pullapprove was in the picture


SQL update

Migrate loot.ini to a sql table.
Will use the sql table to keep track of global and normal loot rules. buy items are still stored in the char_settings file.
initial creation of the DB does not import the loot.ini file. this is to be done on one character with /lootutils import
All changes and new items will also be sent over actors to the other characters running on this PC so they stay current in their working tables.

lootnscoot[Gearly] :: Loot Rules Database found, loading it now.

has this always printed Gearly? i never really run it in standalone mode at all, but i guess that has been there in the write.lua that is included.

tried /lootutils import and my clients ground to a half for a few minutes now. not sure if its going to complete at some point, if it does eventually i'll probably also get disconnected from server at same time lol.
this is with a  7350 line loot.ini

I can see the file size of the DB growing slowly so i guess it is in fact writing things

lootnscoot[Gearly] :: Loot Rules Database found, loading it now.

has this always printed Gearly? i never really run it in standalone mode at all, but i guess that has been there in the write.lua that is included.

Yeah I always wondered about that but never bothered to find and change it.

I can see the file size of the DB growing slowly so i guess it is in fact writing things. Completed after about 15 minutes.

new version should drastically reduce that with batches of 500 at a time. can up if needed.


Feat async sinks

In this version, the project has been updated to the latest versions
Also added to netstandard 2.1
In this version, the sinks mode is used async(use PeriodicBatchingSink)

Because the sdk is 2.2 during the old build. The build breaks down

build success. 👍
@merbla


fix haml

version 1.1.0 is broken with haml 6 because it escapes html by default.
please release as 1.2.0.
i have a follow-up to support newer rubies.

Thanks for your continued maintenance work @glaszig 🙇♂
Ready to merge?

Ready to merge?

ready.

please release as 1.2.0.

🙏


++[LIVESTREAM]Tim Tszyu vs Murtazaliev LIVE STREAMS ON TV CHANNEL 20 October 2024

Tim Tszyu start time Date: Saturday, October 19 Time: 8 p.m. ET | 5 p.m. PT Main event start time (approx.): 10:30 p.m. ET | 7 p.m. PT Location: Caribe Royale Orlando
🅻🅸🆅🅴🔴▶ CLICK HERE TO WATCH LIVE ONLINE
🆆🅰🆃🅲🅷🔴▶ CLICK HERE TO LIVE STREAM
Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights Bakhram Murtazaliev vs. Tim Tszyu start time Date: Saturday, October 19 Time: 8 p.m. ET | 5 p.m. PT Main event start time (approx.): 10:30 p.m. ET | 7 p.m. PT Location: Caribe Royale Orlando — Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights The Full Card Main Card Tim Tszyu vs. Bakhram Murtazaliev [IBF super welterweight title] Cesar Mateo Tapia vs. Endry Saavedra [middleweight] Yoenis Tellaz vs. Johan Gonzalez [super welterweight] Daintier Pero vs. Willie Jake Jr. [heavyweight] Justin Viloria vs. Diuhl Olguin [super featherweight] Preliminary card Carlos Jackson vs. Ryan Lee Allen [super bantamweight] Daniel Blancas vs. Marco Delcado Gary Antonio Russell vs. Jaden Burnias Jocksan Blanco vs. Angel IIarrazo Roberto Raul Rivera Gomez vs. Jenn Gonzalez [featherweight] Michael Garcia vs. Carlos Aguilera Martinez The main undercard is set to get underway at 8pm ET / 5pm PT. Catch live Murtazaliev vs. Tszyu results below, beginning at 8 p.m. ET. Main Event (Prime Video, ~ 11:30 p.m. ET) IBF Junior Middleweight Title: Bakhram Murtazaliev vs. Tim Tszyu Preliminary Card (Prime Video, 8 p.m. ET) Middleweight: Cesar Mateo Tapia vs. Endry Saavedra Junior Middleweight: Yoenis Tellez vs. Johan Gonzalez Heavyweight: Dainier Pero vs. Willie Jake Jr. Junior lightweight: Justin Viloria vs. Diuhl Olguin Live
Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights Bakhram Murtazaliev vs. Tim Tszyu start time Date: Saturday, October 19 Time: 8 p.m. ET | 5 p.m. PT Main event start time (approx.): 10:30 p.m. ET | 7 p.m. PT Location: Caribe Royale Orlando — Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights The Full Card Main Card Tim Tszyu vs. Bakhram Murtazaliev [IBF super welterweight title] Cesar Mateo Tapia vs. Endry Saavedra [middleweight] Yoenis Tellaz vs. Johan Gonzalez [super welterweight] Daintier Pero vs. Willie Jake Jr. [heavyweight] Justin Viloria vs. Diuhl Olguin [super featherweight] Preliminary card Carlos Jackson vs. Ryan Lee Allen [super bantamweight] Daniel Blancas vs. Marco Delcado Gary Antonio Russell vs. Jaden Burnias Jocksan Blanco vs. Angel IIarrazo Roberto Raul Rivera Gomez vs. Jenn Gonzalez [featherweight] Michael Garcia vs. Carlos Aguilera Martinez The main undercard is set to get underway at 8pm ET / 5pm PT. Catch live Murtazaliev vs. Tszyu results below, beginning at 8 p.m. ET. Main Event (Prime Video, ~ 11:30 p.m. ET) IBF Junior Middleweight Title: Bakhram Murtazaliev vs. Tim Tszyu Preliminary Card (Prime Video, 8 p.m. ET) Middleweight: Cesar Mateo Tapia vs. Endry Saavedra Junior Middleweight: Yoenis Tellez vs. Johan Gonzalez Heavyweight: Dainier Pero vs. Willie Jake Jr. Junior lightweight: Justin Viloria vs. Diuhl Olguin Live
Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights Bakhram Murtazaliev vs. Tim Tszyu start time Date: Saturday, October 19 Time: 8 p.m. ET | 5 p.m. PT Main event start time (approx.): 10:30 p.m. ET | 7 p.m. PT Location: Caribe Royale Orlando — Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights The Full Card Main Card Tim Tszyu vs. Bakhram Murtazaliev [IBF super welterweight title] Cesar Mateo Tapia vs. Endry Saavedra [middleweight] Yoenis Tellaz vs. Johan Gonzalez [super welterweight] Daintier Pero vs. Willie Jake Jr. [heavyweight] Justin Viloria vs. Diuhl Olguin [super featherweight] Preliminary card Carlos Jackson vs. Ryan Lee Allen [super bantamweight] Daniel Blancas vs. Marco Delcado Gary Antonio Russell vs. Jaden Burnias Jocksan Blanco vs. Angel IIarrazo Roberto Raul Rivera Gomez vs. Jenn Gonzalez [featherweight] Michael Garcia vs. Carlos Aguilera Martinez The main undercard is set to get underway at 8pm ET / 5pm PT. Catch live Murtazaliev vs. Tszyu results below, beginning at 8 p.m. ET. Main Event (Prime Video, ~ 11:30 p.m. ET) IBF Junior Middleweight Title: Bakhram Murtazaliev vs. Tim Tszyu Preliminary Card (Prime Video, 8 p.m. ET) Middleweight: Cesar Mateo Tapia vs. Endry Saavedra Junior Middleweight: Yoenis Tellez vs. Johan Gonzalez Heavyweight: Dainier Pero vs. Willie Jake Jr. Junior lightweight: Justin Viloria vs. Diuhl Olguin Live
Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights Bakhram Murtazaliev vs. Tim Tszyu start time Date: Saturday, October 19 Time: 8 p.m. ET | 5 p.m. PT Main event start time (approx.): 10:30 p.m. ET | 7 p.m. PT Location: Caribe Royale Orlando — Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights The Full Card Main Card Tim Tszyu vs. Bakhram Murtazaliev [IBF super welterweight title] Cesar Mateo Tapia vs. Endry Saavedra [middleweight] Yoenis Tellaz vs. Johan Gonzalez [super welterweight] Daintier Pero vs. Willie Jake Jr. [heavyweight] Justin Viloria vs. Diuhl Olguin [super featherweight] Preliminary card Carlos Jackson vs. Ryan Lee Allen [super bantamweight] Daniel Blancas vs. Marco Delcado Gary Antonio Russell vs. Jaden Burnias Jocksan Blanco vs. Angel IIarrazo Roberto Raul Rivera Gomez vs. Jenn Gonzalez [featherweight] Michael Garcia vs. Carlos Aguilera Martinez The main undercard is set to get underway at 8pm ET / 5pm PT. Catch live Murtazaliev vs. Tszyu results below, beginning at 8 p.m. ET. Main Event (Prime Video, ~ 11:30 p.m. ET) IBF Junior Middleweight Title: Bakhram Murtazaliev vs. Tim Tszyu Preliminary Card (Prime Video, 8 p.m. ET) Middleweight: Cesar Mateo Tapia vs. Endry Saavedra Junior Middleweight: Yoenis Tellez vs. Johan Gonzalez Heavyweight: Dainier Pero vs. Willie Jake Jr. Junior lightweight: Justin Viloria vs. Diuhl Olguin Live
Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights Bakhram Murtazaliev vs. Tim Tszyu start time Date: Saturday, October 19 Time: 8 p.m. ET | 5 p.m. PT Main event start time (approx.): 10:30 p.m. ET | 7 p.m. PT Location: Caribe Royale Orlando — Orlando, Florida The event starts at 8 p.m. ET, and Murtazaliev and Tszyu should make their way to the ring around 10:30 p.m. ET, depending on how long the undercard fights last. Tszyu (24-1) became a dominant force after winning the WBO super welterweight title, first holding interim gold. He proved a point after missing out on a fight against former champion Jermell Charlo by defeating Tony Harrison, Carlos Ocampo and Brian Mendoza. The Aussie lost the belt in a bloody war against Sebastian Fundora in his last outing but is looking to show that was a blip on the radar. “The Soul Taker” is ready to risk it all again against a massive challenge in Murtazaliev. Murtazaliev is a dog. That always presents a tremendous task. He’s strong, and he’s got a competitive edge. I’m looking forward to fighting someone like that,” Tszyu said. “I was on the same card as Murtazaliev once and I do remember thinking that he’s a tall guy, but most of my opponents are taller than me. We gave each other a little eye-to-eye, like we knew we’d see each other down the road.” Murtazaliev (22-0) took out Jack Culcay in April to win the IBF title, earning his 16th win via knockout. The Russian looks to hold onto gold while stopping the determined Tszyu. Bakhram Murtazaliev vs. Tim Tszyu fight card Bakhram Murtazaliev (c) vs. Tim Tszyu for the IBF super welterweight title Yoenis Tellez vs. Johan Gonzalez; Super Welterweights Mateo Tapia vs. Endry Saavedra; Middleweights Carlos Jackson vs. Ryan Lee Allen; Super Bantamweights Damazion Vanhouter vs. Nosa Divine Nehikhare; Cruiserweights Roberto Raul Rivera Gomez vs. Martin Diaz; Featherweights The Full Card Main Card Tim Tszyu vs. Bakhram Murtazaliev [IBF super welterweight title] Cesar Mateo Tapia vs. Endry Saavedra [middleweight] Yoenis Tellaz vs. Johan Gonzalez [super welterweight] Daintier Pero vs. Willie Jake Jr. [heavyweight] Justin Viloria vs. Diuhl Olguin [super featherweight] Preliminary card Carlos Jackson vs. Ryan Lee Allen [super bantamweight] Daniel Blancas vs. Marco Delcado Gary Antonio Russell vs. Jaden Burnias Jocksan Blanco vs. Angel IIarrazo Roberto Raul Rivera Gomez vs. Jenn Gonzalez [featherweight] Michael Garcia vs. Carlos Aguilera Martinez The main undercard is set to get underway at 8pm ET / 5pm PT.


Make JSON parsing centralized and declarative

Right now, we are not using the full capabilities of nlohmann::json.  We don't need special to_json / from_json methods with a bunch of boilerplate; there are macros that optimize all that out.  And we should be using this declarative pattern for all parsing, never passing raw json objects around.
The only possibly compatibility-breaking change here is that the Profile struct now has mandatory fields priorities and expiry.  I inferred the existence and types of these fields from the manual parsing code, but they only appear on the publish side, not the subscribe side; if there are subscriptions objects without these fields, then they will fail parsing.

Talked to Scott offline:

Macro name comes from the library, nothing to be done
Field names are ok as-is, since they match the JSON
Return values can be handled in a follow-on


Include all component declarations when creating descriptors

Fixes #8610.

@chsienki @dotnet/razor-compiler this fixes a regression which blocks aspnetcore to update SDK, PTAL.

@chsienki https://github.com/orgs/dotnet/teams/razor-compiler - Please prioritize. SDK update has been blocked for a long time, and this is the current failure.

Is this ready to go?

@mitchdenny The policy is that it needs two approvals from members of the compiler team.

Thanks @chsienki


utility function proposal: syncWithLocalStorage

Hi. I have little utility-function to sync my signal properties with local storage, which probably could be added to ngextension.
local-storage.ts:
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class LocalStorage {
  get isSupported(): boolean {
    return typeof localStorage !== "undefined";
  }

  setItem<T>(key: string, value: T): void {
    if (!this.isSupported) {
      return;
    }

    try {
      localStorage.setItem(key, JSON.stringify(value));
    } catch (error) {
      if (
        error &&
        ((error as any).name === "QuotaExceededError" ||
          (error as any).name === "NS_ERROR_DOM_QUOTA_REACHED")
      ) {
        console.error(`The ${key} value exceeds the browser storage quota`);
      } else {
        console.error(
          `Error ocurred while serializing the ${key} store value, value not updated`
        );
      }
    }
  }

  getItem<T>(key: string): Partial<T> | null {
    if (!this.isSupported) {
      return null;
    }

    const storedValue = localStorage.getItem(key);

    if (storedValue === "undefined" || storedValue === null) {
      return null;
    }

    try {
      return JSON.parse(storedValue) as T;
    } catch {
      return null;
    }
  }
}

sync-with-local-storage.ts:
export function syncWithLocalStorage(storageKey: string, keysToSignals: Record<string, WritableSignal<any>>): void {
  assertInInjectionContext(syncWithLocalStorage);

  const localStorage = inject(LocalStorage);

  if (!localStorage.isSupported) {
    return null;
  }

  const data = localStorage.getItem<Record<string, any>>(storageKey);

  if (data) {
    for (const key in keysToSignals) {
      const value = data[key];

      if (value !== undefined) {
        keysToSignals[key].set(value);
      }
    }
  }

  effect(() => {
    const storageData: Record<string, WritableSignal<any>> = {};

    for (const key in keysToSignals) {
      storageData[key] = keysToSignals[key]();
    }

    localStorage.setItem(storageKey, storageData);
  });
}

usage:
test = signal<string>('test'); // initial value; will be overwriten with value from localStorage

// call it from here
private localStorageSync = syncWithLocalStorage('testNamespace', {
  test: this.test
});

// or from constructor
constructor() {
  syncWithLocalStorage('testNamespace', {
    test: this.test
  });
}

It will:

create testNamespace key in localstorage with this serialized json structure: {"test": "123"}
get value from localStorage & set it to signal on class init phase (if exists)
trigger on every signal change & update local storage
not throw error in SSR env

Hi, I was also thinking of having something like this one https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event
When the storage changes, we also emit that value back to the signal

Yes, this would be helpful to "notify changes" from another tab and synchronise signals state between tabs with zero efforts

@zip-fa I opened a PR https://github.com/nartc/ngxtension-platform/pull/295 for this.
It's a bit different from what you proposed, but it is similar to an implementation I had created for something else.
Would love to get your feedback on both implementation and your thoughts on ease of use.

Maybe this post will be useful to have local storage type safe ;)
https://blog.herodevs.com/interact-with-browser-storage-type-safe-fee0ad07428f

Closing this as already merged https://github.com/ngxtension/ngxtension-platform/blob/main/libs/ngxtension/inject-local-storage/src/inject-local-storage.ts
We just need docs for it now.


Grapher steps are being executed without --grapher option

Problem
When you run the bare etl command, it tries to build grapher steps as well, and fails due to a lack of MySQL.
Expected behaviour
It should not build grapher steps unless --grapher is used.
Workaround
Use --exclude=grapher

Ah, no sweat. Perhaps --no-grapher-channel should be the default though?

We're gonna use have grapher step independent on MySQL soon. Should etl then build even the grapher channel by default? I'd say yes, if we wanted to build only garden we could run etl garden. Then we could get rid of --no-grapher-channel altogether.

Agree with you @Marigold , now that we're not resolving entity ids in the grapher channel (and thus don't need MySQL there), then it should build by default.


Font when using ui theme light

When the Grafana UI theme is set to light, the font next to the x and y axis look weird. When using the dark theme it looks fine.

Fixed in release v1.0.14
I submitted the fixed version for review, it will probably be available in Grafana Plugins within a few days.
If you want, you can also manually download and install from here

Great, thanks.

The fixed version has been updated in Grafana

@rudibroekhuizen can you please let me know if this issue can be closed?

Yes, this issue can be closed, thanks!


Multiple calls to logout

Fresh laravel 5.2 install. Proof of concept for the issue.
.env
CACHE_DRIVER=array
SESSION_DRIVER=file

routes.php
$this->get('logout', 'Auth\AuthController@logout');

Route::get('/', function() {
  return "test";
});

Storage session directory currently empty. I placed a \Storage::append('file.txt', "1\n"); in the logout() func in the Illuminate\Foundation\Auth\AuthenticatesUsers trait, line 176. Nothing else is changed, the Auth controller redirects to root path which is handled in the route above.
Okay now here is the problem I'm seeing.
If I hit localhost:8000/, laravel creates a session and the session storage directory reflects that with a single file. If I then after hit localhost:8000/logout then the logout() func in the AuthenticatesUsers trait gets called only once. I can do this several times, refreshing the page. All is well.
If I open browser dev tools and delete laravel's session cookies in the browser and refresh localhost:8000/, then laravel creates a new session and the session storage directory now has two files. The old session and the new one. If I hit localhost:8000/ then localhost:8000/logout, the logout() func gets called twice! I assume once for the old session and once for the new session.
This is a problem because often I have event listeners that listen to laravel's native logout event and perform some task meant for only one logout case, but if users delete their session cookie or login from a different browser session, then the logout() func gets called possibly an infinite amount of times relative to the number of new sessions created by users fiddling with their browser session cookies.
Thoughts?

Where are you seeing logout being called when not hitting the logout route?

Logout is called when I hit the logout route. If I created multiple sessions then logout gets called multiple times for each session. \Storage::append('file.txt', "1\n"); provides the proof. file.txt has a 1 for each time that function is called. If I'm using the regular session driver, then that fires the logout event each time.

It also seems that clicking a link generated by  will not cause the logout func to be called multiple times. But in the same situation, hitting /logout via the url bar directly somehow causes the multiple logouts. So I'm completely lost on why this would happen as I thought they both were the same exact get requests.

I couldn't reproduce this on Lravel 5.2.32, using the homestead, fresh install with the given configs:
env
CACHE_DRIVER=array
SESSION_DRIVER=file

routes.php
$this->get('logout', 'Auth\AuthController@logout');

Route::get('/', function () {
    return 'test';
});

Logout func of  Illuminate\Foundation\Auth\AuthenticatesUsers
public function logout()
    {
        \Storage::append('file.txt', "1\n");

        Auth::guard($this->getGuard())->logout();

        return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
    }

Tried this on chrome, deleting the laravel-session cookie, checked the dir, it generates another session file, tried with incognito chrome, also generated a file, internet explorer, private internet explorer and other browsers,
After each attempt i checked the file.txt file inside the storage/app folder and there was only
1

Then i cleared it and tried to reproduce again, generating new sessions with browsers or deleting the cookie with chrome, after that and hitting /logout there was only 1 inside the file.

@fhb12345 There will be a laravel session even if you're not logged in. It will store things like the CSRF token.

Also tried with multiple browsers, for every hit on / with different browsers, theres an extra 1 for each session, after you hit /logout on any of the browsers,

Isn't this to be expected?


Create servers with firewall

Would be great to have a firewalls parameter for createInDatacenter and createInLocation.
https://docs.hetzner.cloud/#servers-create-a-server

Hey @LKaemmerling
this issue seems to be resolved.


Include ajv-formats package

Hi,
ajv alone does not recognize all data formats (eg {"type": "string", "format": "date"}). It must be extended with ajv-formats.
https://ajv.js.org/packages/ajv-formats.html
Do you think ajv-formats package could be added to bruno?

Fixed by #1618


Migrate AseCalculation and AseParser to aiida-core==1.0.0

Dear sphuber, Dear aiida-core team,
I would like to inquire about the status of the migration of aiida-ase to aiida-core>=1.0.0 . My goal is to run GPAW calculations within an aiida workchain. However, in its current state, aiida-ase does not properly load anymore with the latest aiida-core version.
Perhaps I am missing an aiida feature which replaced this plugin altogether? If so, I apologize in advance!
Otherwise, I am also happy to contribute to this issue. The necessary changes seem to be limited to renaming ParameterData to Dict and the adjustment of aiida.orm.calculation.job etc.
Thank you very much!
Best
Alex

Dear Sebastiaan @sphuber
I realize that this issue has been stale for quite some time now, so I hope I do not seem too impatient commenting again already.
I would like to know whether the issue is still relevant. Maybe there has been a new development in aiida since Oct 2019 which entirely replaced  aiida-ase?
Thanks for your reply, I appreciate it!
Best
Alex

Hi Alex. Sorry for the delayed response. I have never used the aiida-ase plugin myself, I just moved it out of the aiida-core source code a few years back when plugins were still hard coded into the source code (there was no actual plugin system yet). I am a but surprised this was still open because I was under the impression that some people were using ASE with AiiDA. I am trying to find out who know in our private communication channels to see who that is (don't actually remember any names). They may have already performed the necessary work but just didn't commit it back to this public plugin. If that is not the case, we can indeed migrate this. The migration from AiiDA v0.x to v1.x was not trivial for plugins and required quite some work. Given that this plugin "only" has a single calculation and parser plugin, the amount of work should be reasonable. I can have a look later to see if I can give a quick shot, but I could use your help in testing since there are no unit tests whatsoever and I don't have any experience with running ASE. I will get back to you

Hi Sebastiaan, thank you very much for the reply!
It would be awesome if this plugin worked with AiiDA v1.x . Of course I am happy to run tests, let me know in which way I can contribute.

@lxknll as you can see, I have merged a PR that migrates the plugin and does a bunch of different stuff that should make it work with Python 3 and AiiDA v1.0 and above. Could you please check out the develop branch and install that. I have also opened a PR #8 that updates the examples. You can maybe try to run that:
#!/usr/bin/env runaiida
# -*- coding: utf-8 -*-
"""Example script of how to perform a GPAW calculation on crystalline silicon using AiiDA."""
from aiida import common
from aiida import engine
from aiida import orm
from aiida import plugins
from ase.build import bulk

Dict = plugins.DataFactory('dict')
StructureData = plugins.DataFactory('structure')
KpointsData = plugins.DataFactory('array.kpoints')
AseCalculation = plugins.CalculationFactory('ase.ase')

# Change the following value to the ``Code`` that you have configured
code = 'bash@localhost'

def main():
    kpoints = KpointsData()
    kpoints.set_kpoints_mesh([2, 2, 2])

    parameters = {
        'calculator': {
            'name': 'gpaw',
            'args': {
                'mode': {
                    '@function': 'PW',
                    'args': {
                        'ecut': 300
                    }
                }
            }
        },
    }

    inputs = {
        'code': orm.load_code(code),
        'structure': StructureData(ase=bulk('Si')),
        'kpoints': kpoints,
        'parameters': Dict(dict=parameters),
        'metadata': {
            'label': 'Si with GPAW',
            'description': 'Test calculation of GPAW using `aiida-ase`.',
            'options': {
                'resources': {
                    'num_machines': 1,
                    'num_mpiprocs_per_machine': 1
                },
                'max_wallclock_seconds': 30 * 60,  # 30 minutes
            }
        }
    }

    process_name = AseCalculation.__name__
    print(f'Running an {process_name}...')
    _, node = engine.run_get_node(AseCalculation, **inputs)
    outputs = node.get_outgoing(link_type=(common.LinkType.CREATE, common.LinkType.RETURN)).all()

    if node.is_finished and node.exit_message:
        state = f'{node.process_state.value} [{node.exit_status}] `{node.exit_message}`'
    elif node.is_finished:
        state = f'{node.process_state.value} [{node.exit_status}]'
    else:
        state = node.process_state.value

    print(f'{process_name}<{node.pk}> terminated with state: {state}')

    if not outputs:
        print(f'{process_name}<{node.pk}> registered no outputs')
        return

    print(f"\n{'Output link':25s} Node pk and type")
    print(f"{'-' * 60}")

    for triple in sorted(outputs, key=lambda triple: triple.link_label):
        print(f'{triple.link_label:25s} {triple.node.__class__.__name__}<{triple.node.pk}> ')

if __name__ == '__main__':
    main()

Just make sure to update the code variable to an actual Code that you setup on your machine. Let me know how that goes and if you experience issues, feel free to open an issue.

Hi @sphuber thank you so much for putting in the work! I will give it a try over the weekend and let you know how it goes.

Hi @sphuber! I have now tested the new version of aiida-ase with your script and several custom GPAW calculations on local machines and remote clusters. Everything seems to be working perfectly! :muscle:
I have one suggestion: perhaps you could update the example script you provided to me (and which is very similar to the one in the official aiida-ase documentation) to make use of the builder workflow encouraged by aiida-core?
#!/usr/bin/env runaiida
# -*- coding: utf-8 -*-
"""Example script of how to perform a GPAW calculation on crystalline silicon using AiiDA."""
from aiida.engine import submit, run_get_node
from aiida.orm import load_code
from aiida.plugins import DataFactory, CalculationFactory

# ASE imports for structure building.
from ase.build import bulk

Dict = DataFactory('dict')
StructureData = DataFactory('structure')
KpointsData = DataFactory('array.kpoints')
AseCalculation = CalculationFactory('ase.ase')

# Change the following value to the ``Code`` that you have configured
code = 'ase@localhost'

def submit_gpaw():
    kpoints = KpointsData()
    kpoints.set_kpoints_mesh([2, 2, 2])

    parameters = {
        'calculator': {
            'name': 'gpaw',
            'args': {
                'mode': {
                    '@function': 'PW',
                    'args': {
                        'ecut': 300
                    }
                }
            }
        }
    }

    metadata = {
        'label': 'Si with GPAW',
        'description': 'Test calculation of GPAW using `aiida-ase`.',
        'options': {
            'resources': {
                'num_machines': 1,
                'num_mpiprocs_per_machine': 1
            },
            'max_wallclock_seconds': 30 * 60,  # 30 minutes
        }
    }

    codes = load_code(code)
    builder = codes.get_builder()
    builder.structure = StructureData(ase=bulk('Si'))
    builder.kpoints = kpoints
    builder.parameters = Dict(dict=parameters)
    builder.metadata = metadata

    run_get_node(builder)

if __name__ == '__main__':
    submit_gpaw()

I feel like this is a little more concise. Also, it might make it easier for beginners when the documentations of aiida-core and aiida-ase make use of the same features.
In any case, thank you so much for your effort and striving to improve aiida. I really appreciate it.
Let me know if there is anything else I can help you with :)
Best wishes
Alex

Thanks for testing Alex. Glad it is working now and it is useful. A few comments about your suggestion to use the builder instead. The dictionary and builder methods are completely equivalent and aiida-core doesn't recommend one over the other. The dictionary method is the simplest and most basic way of specifying inputs for a process. The builder concept was added later as an additional feature that has useful features when used interactively, for example, tab-completion, automatic validation when setting an input and automated documentation. This is described in the documentation. These features are not really useful when used non-interactively, but we wanted to make sure that what works in a shell also works in scripts, so you can still use the builder if you like. Ultimately, both methods are perfectly equivalent and fine to use, but I think for example scripts the dictionary use is simpler for new users since it doesn't introduce a new concept that they might not be familiar with yet.
Another minor thing: I would also not recommend to get the builder from the Code. The reason is that this required the default plugin to be set on the Code, but since this is optional, this approach does not always work. That is why I prefer to be explicit and get it from the process class. This is what Code.get_builder does anyway, it is just syntactic sugar.
Finally, I noticed you removed the code that I added after the submission of the process. Did you do this on purpose because you find the additional code confusing? I can see why because there are quite some lines, but I did this since this will give some interesting information while the process is running and after it has finished. In your example, there will be no output of how to inspect the process or its results. Since these examples might be used primarily by people with very little experience with AiiDA, I thought it might be useful to include some verbose output of what happened.

Hi Matthew! Thank you for your explanations :) I did not want to insinuate that I know the aiida documentation better than you do, of course not, and I am sorry if I did! As a new user, I just felt it might be more homogeneous if both the aiida-core and the aiida-ase documentation used the builder method in their introductory examples. At least for me, the aiida documentation introduces the builder first, so one gets the feeling that this is the preferred way to do things. Nevertheless, I fully agree that it is best to circumvent unnecessary syntactic sugar and every user will be able to understand a python dictionary.
Concerning your final question: I did not find the additional code confusing, actually the extra information is quite interesting. I only removed it for my own application and forgot to add it back before submitting my comment here :)


add lane data to explorer tables

This is technically a core issue since we need to make backend changes, but I'll leave it here since we'll need to add form fields to the explorer anyway.


[project] add/remove file

NOTE: only in test now
close #100

Codecov Report

Merging #120 (78f97a9) into develop (7b8986b) will decrease coverage by 0.30%.
The diff coverage is 0.00%.

@@             Coverage Diff             @@
##           develop     #120      +/-   ##
===========================================
- Coverage    19.13%   18.83%   -0.31%
===========================================
  Files           16       16
  Lines          878      892      +14
===========================================
  Hits           168      168
- Misses         710      724      +14

Impacted Files
Coverage Δ

panel/project-files.rkt
1.44% <0.00%> (-0.37%)
:arrow_down:

Continue to review full report at Codecov.

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


only include valid/invalid/warning report sections in completion email

only include valid/invalid/warning report sections (now mirrors the status of the dashboard)

Looks good to me. The status combination (or appropriate storage in DB) needs to be handled way earlier in the background jobs, but this is not the time to address this.

Agreed - these combine methods are popping up everywhere. Perhaps add them in ifc_validation_models like https://github.com/buildingSMART/ifc-validation-data-model/blob/1ca6f9725c738510ae2218c4cd32f382d1f9ea95/models.py#L898

Perhaps add them in ifc_validation_models like

Yes, but even a lot of these distinction, such as between IA and IP are not relevant anymore, so they need a more coordinated rewrite across all modules. I also don't know if all future prerequisite checks (not sure if there are going to be additional ones) are going to be merged into the schema column.
In general I think we have quite some clean up work to do. Not in the last place, the migration to the proper autogenerated rest API. Evandro asked for a list of such tasks some time ago when you couldn't join. Would be good if you can maintain a list.

@aothms @rw-bsi please capture this clean up tasks in Jira otherwise get lost when we close this pr


Deps aren't detected for test-suite when using stack

Any dependencies unique to the test-suite aren't detected by haskell-ghc-mod while using stack, thus producing erroneous import errors. The workaround is to additionally use a cabal sandbox.

At first glance this looks like ghc-mod problem. @DanielG, thoughts?

Hmm you probably need to run stack test or something first so it does the equivalent of --enable-test. Not sure how stack handles this to be honest.

I've been rigorously using my test-suite, so I can verify that running stack test does not fix the problem.

ghc-mod <IP_ADDRESS> seems to pick those up just fine, so I think this was fixed upstream. Closing.


Fix #61 Add json schemas

The following is a PR to take care of #61
I wasn't sure about the verbiage you would want for the descriptions (these are the details that populate on hover or when showing suggestion details), so you might have to sift through those and tidy them up to your preference.
The only thing that may not be familiar to you, I don't know so I can only assume, is the $ref pulling from github. vscode fortunately allows you to pull json schemas from a store, or just a regular url, or from relative paths. In this case the vscode settings.json path is not in the extension path so you can't use relative paths, but you can call it from the repo it's stored in :) I say all that to say, it will not work until that specific url is in this repo. It's currently set to master, but you can change that to your develop branch if you want to play around with it.
Otherwise, it's your typical schema setup and I additionally updated the activationEvents as discussed so that any .ftsettings file has the benefit of autocomplete and hints as well.
I didn't want to be that kind of guy to ask for something and then not contribute, so if you want to follow up or expand on any of these concepts let me know.
Cheers and thanks again!

Thank you very much for the PR: This is mighty helpful. I will try to check it when I have some free time later this week.


Docker create doesn't work with full image id's, but does with partial

Output of docker version:
Client:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.6
 Git commit:   20f81dd
 Built:        Mon, 04 Apr 2016 16:27:28 +1200
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.6
 Git commit:   20f81dd
 Built:        Mon, 04 Apr 2016 16:27:28 +1200
 OS/Arch:      linux/amd64

Output of docker info:
Containers: 6
 Running: 0
 Paused: 0
 Stopped: 6
Images: 10
Server Version: 1.10.3
Storage Driver: zfs
 Zpool: docker
 Zpool Health: ONLINE
 Parent Dataset: docker/docker
 Space Used By Parent:<PHONE_NUMBER>
 Space Available:<PHONE_NUMBER>48
 Parent Quota: no
 Compression: lz4
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
 Volume: local
 Network: bridge null host
Kernel Version: 4.4.0-15-generic
Operating System: Ubuntu 16.04
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 31.42 GiB
Name: ip-10-2-3-36
ID: QNUV:72CF:XGZA:Y2MT:SQ5B:IE7O:HB7J:MOS2:AFNH:6LME:G7EF:6XCL
WARNING: No swap limit support

Additional environment details (AWS, VirtualBox, physical, etc.):

On AWS, client+server on the same machine

Steps to reproduce the issue:

build an image with docker build -q .
use the image-id from step one in docker create ${IMAGEID} (you have to trim "sha256:" which is confusing, but that's seperate)
watch it fail
use the image-id from step one, but with a single character removed from the end
watch it succeed
profit

Describe the results you received:
$ docker create ...e6fc # fails
Invalid repository name (...e6fc), cannot specify 64-byte hexadecimal strings
$ docker create ...e6f # succeeds
...591a
$

Describe the results you expected:
If partial ID's are accepted, I don't understand why full ID's aren't.
Additional information you deem important (e.g. issue happens only occasionally):
Relatively easy to work around, but having a random "trim one character" piece of code seems... pretty silly (i.e.: ${IMAGEID::-1}).

Looks like a duplicate of https://github.com/docker/docker/issues/20972, which is fixed in Docker 1.11 through https://github.com/docker/docker/pull/21002

wow, how did I not find that. Ok, thanks!

GitHub search can be really bad sometimes, I just knew there was an issue, and how to find it :-)

suppose it's a consequence of being so popular (1400 issues makes me dizzy)


Add cuCIM GDS reader examples

Add getting started guide for GDS example/benchmark
Signed-off-by: Gigon Bae<EMAIL_ADDRESS>

looks good


TF Keras layer_utils_test introducing test cases

Test case introducing for layer_utils.py file under keras package.

Nagging Reviewer @fchollet, @pavithrasv: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 14 days with no activity and the awaiting review label has been applied.

Nagging Reviewer @fchollet, @pavithrasv, @fchollet: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 14 days with no activity and the awaiting review label has been applied.

Nagging Reviewer @fchollet, @pavithrasv, @fchollet: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 29 days with no activity and the awaiting review label has been applied.

Nagging Reviewer @fchollet, @pavithrasv, @fchollet: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 44 days with no activity and the awaiting review label has been applied.

Nagging Reviewer @fchollet, @pavithrasv, @fchollet: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 59 days with no activity and the awaiting review label has been applied.

Nagging Reviewer @fchollet, @pavithrasv, @fchollet: You have been added as a reviewer to this pull request. Please add your review or reassign. It has been 74 days with no activity and the awaiting review label has been applied.

Can one of the admins verify this patch?

I'm going to go ahead and close this PR, because it seems to have stalled. If you're still interested in pursing this (and responding to my comments), please feel free to reopen!


fix(dom): postpone sampling of root element until DOM is ready.

The elementAfterPath$ stream was immediately sampled, while elementAfterPath$ only starts emitting
once the DOM is ready, causing the first emission of elementAfterPath$ to be missed. By postponing
the first sample of elementAfterPath$ until the DOM is ready, we make sure that we don't miss this
first emission.
ISSUES CLOSED: #791

[x] There exists an issue discussing the need for this PR
[ ] I added new tests for the issue I fixed or built
[x] I used make commit instead of git commit

Hi @rmeoc  :)
Thanks for submitting your first PR to Cycle.js, we appreciate any kind of desire to help. Before merging, I noticed you used merge which doesn't reflect exactly the intent of "wait until X happens before doing anything". Perhaps concat would be better? E.g. concat(domReady$, mutation$).
Then, I'm thinking whether to merge this PR before or after the #759 PR is merged, which is a big rewrite of the DOM Driver.
@jvanbruegge what do you think? As far as I can see, the lines modified by this PR are still in the DOM driver rewrite.

@staltz
I agree, I have replaced "merge" with "concat" because that is more clear.
BTW: I also had a look at the tests and I did find a test that seems to be designed to detect this kind of bug. It's in dom/test/browser/src/events.ts: "it should setup click detection on a ready DOM element (e.g. from server)". The test failed to detect this specific bug because the DOM is ready at the moment that the tests runs. I haven't been able to find a good solution for this.

I would merge it before, so we can release a v20 with the fix before releasing v21

@jvanbruegge Are you okay if I merge this and release a new v20?

Yeah, go for it


squid:AssignmentInSubExpressionCheck

This pull request is focused on resolving occurrences of Sonar rule squid:AssignmentInSubExpressionCheck - Assignments should not be made from within sub-expressions
You can find more information about the issue here:
https://dev.eclipse.org/sonar/coding_rules#q=squid:AssignmentInSubExpressionCheck
Please let me know if you have any questions.
M-Ezzat

Just started reviewing :):rocket:

Nice!
Just one comment - the code under the jodd.asm5 package belongs to ASM project, so that one I will skip from any change, so we can easily upgrade to newever versions of ASM.
Hence I will take two other fixes and apply them ! Yeah!

That sounds great :) Thanks !

Closed by cherry-picking (a17a7fd6cf7a63d0c2c70ec7534f1486e2d0b8af)... mmm... delicious!


Update setup.py to read requirements.txt files

Closes #68
See full description and discussion on issue #68 .

On this PR a simple update into documentation was added too with tests content.


[Feedback]: Add support to chapters

Type
Both
Suggestion
Add support to download and merge Chapters from crunchyroll.

Mostly finished implementing this in the mpd-support branch, next release will have chapter support :)

Just noticed this was never closed when the release was made, closing this now as this is a released feature


Feature/level design intro

isPortalLevel: 0
isSurfLevel: 0

Can both these be true?
isPortalLevel: 1
isSurfLevel: 1

Where are they used?

The isPortalLevel is used to determine whether the player can spawn portals in the PortalPlacement.cs script. I need to remove isSurfLevel thanks for the reminder!

isPortalLevel: 0
isSurfLevel: 0

Can both these be true?
isPortalLevel: 1
isSurfLevel: 1

Where are they used?

The isPortalLevel is used to determine whether the player can spawn portals in the PortalPlacement.cs script. I need to remove isSurfLevel thanks for the reminder!

Cool! Thanks :D


Switch pager when swipe and animations are disabled. Fixes #662

Fixes #662
Android doesn't support nested scrollviews/viewpagers. Since that what we use for TabView, nested tab navigators are broken on Android.
This PR changes the implementation to not use ViewPagerAndroid when swipe and animations are disabled to allow nesting tab navigators. When 2 tab navigators are nested, and either the parent/child navigator has swipe and animation disabled, it will work fine.
In future we can change the check to see if only swipe is disabled after I manage to port the library to use native animations.
Tested both on iOS and Android.
cc @grabbou

Looks good to me. Thanks for tackling that issue!

@satya164 Noticing ScrollViews now need flex:1 or bottom tabs gets pushed off screen.
Should be able to see it here https://github.com/onlydave/react-navigation/tree/nested

@onlydave can you create a new issue for that?

good, it solves my problem.


[stdlib] Commenting out a few transparent annotations

To make standard library compile with resiliency on.
rdar://problem/30175030

@swift-ci Please smoke test and merge


Add test for value converter shims in plugins

Adds a test for using value converters as shims with the NodaTime plugin.
Related
#568

@roji Just opened this up to build some tests against the CI server (still having time zone issues with the NodaTime plugin).
I'm not sure if its interesting, or just expected failure, but the DateTime_shim_with_operation test (just added) triggers:
Npgsql.EntityFrameworkCore.PostgreSQL.NodaTimeTest.DateTime_shim_with_operation

System.InvalidCastException : Can't cast database type timestamp to DateTime
   at Npgsql.NpgsqlDefaultDataReader.GetFieldValue[T](Int32 column)
   at lambda_method(Closure , DbDataReader )
   at Microsoft.EntityFrameworkCore.Storage.Internal.TypedRelationalValueBufferFactory.Create(DbDataReader dataReader)

Still need to poke around to see what's getting translated/read, but it looks like some part of the operation is translating.

Can confirm that it's translating:
SELECT (x."BclDateTime" + INTERVAL '2 days') FROM "NodaTimeTypes" AS x

From GetFieldValue<T>:
this = {NpgsqlDefaultDataReader} {Npgsql.NpgsqlDefaultDataReader}
$exception = {InvalidCastException} "System.InvalidCastException: Can't cast database type timestamp to DateTime\r\n   at Npgsql.NpgsqlDefaultDataReader.GetFieldValue[T](Int32 column)\r\n   at Npgsql.NpgsqlDataReader.GetDateTime(Int32 ordinal)\r\n   at lambda_method(Closure , DbDataReader )\r\n   at Microsoft.EntityFrameworkCore.Storage.Internal.TypedRelationalValueBufferFactory.Create(DbDataReader dataReader)\r\n   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext(DbContext _, Boolean buffer)\r\n   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)"View
column = {int} 0
fieldDescription = {FieldDescription} "?column?(timestamp)"View

@roji Just opened this up to build some tests against the CI server (still having time zone issues with the NodaTime plugin).

Oh OK, no problem then. You're having issues running the tests locally because of the localtime timezone we discussed elsewhere?
Good luck on the rest, let me know what you find.

So it looks like the translation happens, but something in the plugin affects the creation/mapping such that the DateTime column is mapped as a timestamp even when .HasColumntType("date") is specified (not shown in these tests).
Not exactly sure what's going on, but going to close this for now.


Get position of first non-matching character

I have a project with a bunch of integration tests which make a requests to a HTTP server we're writing, and then assert that the response matches a regex.
In case of a match, the test continues. In case of a mismatch, the test fails with an error message. The error messages print the regex and then the text, and it's often quite hard to figure out where in the text the regex wasn't able to match.
If we could get the index of the first non-maching character, or the index of the last matching character, then we could point out that position in the response body, which would improve our error messages a great deal.
Would it be possible to provide something like this?
impl Regex {
   fn first_mismatch_position(&self, str: &str) -> Option<usize> {
    todo!()
   }
}

This is basically a duplicate of #678 as far as I can tell. Worded a little differently, but seems to be requesting the same kind of information.
The answer to your question "is it possible" is indeed "yes." But I expect the real question is not just "is it possible," but also, "and if so, could it be added to the public API?" The answer to the first question is yes, but the answer to the second is no. Something like this has to come directly from the underlying search implementation, and that information is simply not available in all the different regex engines, or at least might be different between them and inconsistent. (Perhaps that's not a showstopper.) More to the point, this would require huge changes in all of the internal APIs and likely additional costs as well.
For something super niche like this, I would recommend using regex-automata once #656 lands. In that case, you'll be able to directly control the automaton and write your own search routines and report whatever information you like.
The #678 issue has more discussion including more API design details. If you have follow up questions or what not, I'd prefer discussion be focused there. Thanks.

Thanks for the explanation, that makes sense! I'll follow the other issues.


add support for deprecated controllers

What's this PR do/fix?
Fixes #2638 and adds support for deprecated controllers
Are there unit tests? If not how should this be manually tested?
Added a test to OperationCommandReaderSpec.
Any background context you want to provide?
The change should be clear by itself I guess.
What are the relevant issues?
#2638

We also need this one. Thanks.

@v3rtumnus thanks for the PR! 🤘


No custom ldif import when replication.enabled is set to false

Hi. We were facing some problems/bugs upgrading from 3.0.2 to 4.0.2. The first one:
The schema files (e.g. syncprov.ldif, bsyncprov.ldif, ...) are only mounted if replication.enabled is true. But they are hardcoded in LDAP_EXTRA_SCHEMAS. So when replication.enabled is set to false these fiies cant be found and due to an error the pod will be restarted before reaching the import of custom ldif files defined via customLdifFiles.
After the restart the evaluation of !is_dir_empty "$LDAP_DATA_DIR"; in libopenldap.sh is true, so that the custom ldif files will never be imported.
In short: replication.enabled = false  =>  no import of custom ldif files
The workaround for us was to override the LDAP_EXTRA_SCHEMAS env variable.
Best regards
Björn

Hi @zirrok80 ,
Indeed right now LDAP_EXTRA_SCHEMAS  is harcoded , where it should be a variable in the values and computed into the env variable .
feel free to submit a PR if you feel like it .
it will be available in the next release

Fixed in the last version 4.1.0


Rails 5 compatibility?

I've added gem 'rspec-rails', '~> 3.4' to a new Rails 5 app. This is the error message when running bundle update
Fetching gem metadata from https://rubygems.org/...........
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies........................................................
Bundler could not find compatible versions for gem "actionpack":
  In Gemfile:
    rails (< 5.1, >= 5.0.0.beta1) was resolved to 5.0.0.beta1, which depends on
      railties (= 5.0.0.beta1) was resolved to 5.0.0.beta1, which depends on
        actionpack (= 5.0.0.beta1)

    rails (< 5.1, >= 5.0.0.beta1) was resolved to 5.0.0.beta1, which depends on
      railties (= 5.0.0.beta1) was resolved to 5.0.0.beta1, which depends on
        actionpack (= 5.0.0.beta1)

    rails (< 5.1, >= 5.0.0.beta1) was resolved to 5.0.0.beta1, which depends on
      railties (= 5.0.0.beta1) was resolved to 5.0.0.beta1, which depends on
        actionpack (= 5.0.0.beta1)

    rspec-rails (~> 3.4) was resolved to 3.4.0, which depends on
      actionpack (< 4.3, >= 3.0)

You need to use the master versions of rspec and rspec-rails for now.

For others, I had to list the gems like this to install with Rails 5:
gem 'rspec-core', github: 'rspec/rspec-core', branch: 'master'
gem 'rspec-support', github: 'rspec/rspec-support', branch: 'master'
gem 'rspec-expectations', github: 'rspec/rspec-expectations', branch: 'master'
gem 'rspec-mocks', github: 'rspec/rspec-mocks', branch: 'master'
gem 'rspec-rails', github: 'rspec/rspec-rails', branch: 'master'