Line after h1,h2,h3 should be normal text

Feature Request 🛍

When a user is writing an h1, h2, or h3 and presses enter to make a new line, the new line should be normal text.
see how Google docs has this functionality in this video:
https://www.loom.com/share/c45fcd3bd1374217823b6e447fd0d1d5
Use Case
User is writing a heading and wants to write some text under that heading. They press enter and the text under the heading is automatically set to normal text.

I am bumping this one, I think it's important. Having to select "normal" text after typing every headline is tedious.

I am bumping this one, I think it's important. Having to select "normal" text after typing every headline is tedious.

Do we think someone might still want a way to do new lines inside a title? You can definitely do it in markdown.
Maybe:

default should be a new paragraph after the title
shift-return should stay within the title (in a way symmetric to shift-return for hard breaks inside a paragraph)

I think shift+return should create a line break within the header paragraph and keep the header formatting. If a user presses return, that should create a new paragraph that is normal text

I think shift+return should create a line break within the header paragraph and keep the header formatting. If a user presses return, that should create a new paragraph that is normal text

I like that

Hello, Is this issue up for grabs?

Hello, Is this issue up for grabs?

Yup, I just assigned it to you. Thanks!


Fixing notify messages.

Fixed a problem with notify messages. The issue was with a default CSS rule, white-spaces: nowrap; I've added an extra class for this specific message with white-space: normal !important; rule to overwrite the defaults.
Also, I've added "hiding message on click" behaviour, previously it was impossible to close notification, and using "autohide in x seconds" isn't a good idea for errors messages either, so closing on click is quite an option.

Looks soooo much better. Thanks, Vitaly :D


IdentityServer on Core 2.0 - Claims from ProfileService are lost

I started some tests with the yesterday released identityserver for aspcore 2.0
I extended the QuickStarter hybrid sample with the following test profile service.
I register the  profileservice and I can see that  GetProfileDataAsync is called and claims are added to the IssuedClaims list.
But when looking at the claims in the mvc client all claims that were added are missing on the client side.
I checked it in the Controller of the "Secure" page.
If I remember right, in the previous versions creating the profile service was everything I needed to do when  GetClaimsFromUserInfoEndpoint is set to true in the client.
what am I missing?
Test Profile Service
public class ProfileService : IProfileService
 {
     public Task GetProfileDataAsync(ProfileDataRequestContext context)
     {
         //Extend here for custom data  and claims like email from user database
         context.IssuedClaims.Add(new Claim(ClaimValueTypes.String, "foo@mail.foo"));
         context.IssuedClaims.Add(new Claim("MyClaim", "a"));

         return Task.CompletedTask;
     }

     public Task IsActiveAsync(IsActiveContext context)
     {
         context.IsActive = true;
         return Task.FromResult(true);
     }
 }

Client Configuration
   services.AddAuthentication(options =>
                {
                    options.DefaultScheme = "Cookies";
                    options.DefaultChallengeScheme = "oidc";
                })
                .AddCookie("Cookies")
                .AddOpenIdConnect("oidc", options =>
                {
                    options.SignInScheme = "Cookies";

                    options.Authority = "http://localhost:5000";
                    options.RequireHttpsMetadata = false;

                    options.ClientId = "mvc";
                    options.ClientSecret = "secret";
                    options.ResponseType = "code id_token";

                    options.SaveTokens = true;
                    options.GetClaimsFromUserInfoEndpoint = true;

                    options.Scope.Add("api1");
                    options.Scope.Add("offline_access");
                });
        }

check the raw token first (https://jwt.io).

Also - if claims from userinfo seem to be missing. There is a new way to map them in the MS handler in the client. Check the events they have and also have a look at the new ClaimsActions.

thx for the hint ill check the token. which events do you mean exactly?

In the Token I can't see my claims
here the body

{
  "nbf":<PHONE_NUMBER>,
  "exp":<PHONE_NUMBER>,
  "iss": "http://localhost:5000",
  "aud": "mvc",
  "nonce": "636428881921830890.OTA5Y2I4YTYtZDQwZi00NzRlLTg5NDctMjUyZjU0MjkyMzY4ZmFiMTliYzYtZmQxNS00OGZlLTllNmMtYzA0ZGM1NmNiYzc1",
  "iat":<PHONE_NUMBER>,
  "c_hash": "GFeK1HBOh07iT5v-d42Teg",
  "sid": "e2e8907e82d8bd5e58380754ace19efb",
  "sub": "f4f46aa5488f3c803723b7d6cb1761b05f164590ae50df93bf36c508af0e5a2a",
  "auth_time":<PHONE_NUMBER>,
  "idp": "Google",
  "amr": [
    "external"
  ]
}

To isolate the problem i took freshly the mention quickstarter guide. There its the same behavior.
Code-Steps:

I copied the profile service form above in the template.
added profile service to service collections
added profile service to identity.

Test:
Signed in with google and opened the secure page. Claims are not there

Got it.
I missed to set
options.GetClaimsFromUserInfoEndpoint = true;
in the identityserver config

Ok, glad you sorted it out. I just pushed an integration test to show that custom profile services are working properly: https://github.com/IdentityServer/IdentityServer4/commit/1ce9d2d973954bd4ae43e782c37e33c88153b1f6


No example or code for BasicAuthentication

Hi,
I cant find any reference on how i can set basic authentication credentials when initializing SolrNet in a asp.net core 2.0 project.
I am using SolrNet,Microsoft DependencyInjection package with the following code in Starup.cs
services.AddSolrNet("http://localhost:81/solr");
Please help!
With regards,
Dimitris

I think we will have to add support for it in the form of an overload to AddSolrNet. I’ll try to free some time  next week to get that functionality in.

That will be perfect! Thank you so much - keep up the good work!

In the next release, 1.0.8 (somewhere this week I guess), you can now control the HttpClient during service configuration.
See https://github.com/SolrNet/SolrNet/blob/master/Microsoft.DependencyInjection.SolrNet.Tests/MicrosoftDependencyFixture.cs#L112 for an example on how to set basic Authentication headers.

@gjunge should I release 1.0.8?

I want to see if we can get #407 in as well.

Hi again!
I just downloaded the updated SolrNet Nuget package (1.0.8), i used the new AddSolrNet overload EXACTLY as described on the example above, but when i try to connect to Solr, i get a "The remote server returned an error: (401) Unauthorized."
Any ideas? Thank you!

Can you check with Fiddler if SolrNet is sending the right headers, and check if they are the same headers as you sent when using your browser.

Hi @gjunge , thank you for the reply!
Here are the results of my investigation:

In my startup.cs i configure SolrNet, with this code:

var credentials = System.Text.Encoding.ASCII.GetBytes("myUsername:myPassword");
var credentialsBase64 = Convert.ToBase64String(credentials);
services.AddSolrNet("http://localhost.fiddler:81/solr/myCoreName", options =>
 {
    options.HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentialsBase64);
});

(I use ".fiddler" in my url, just for debug purposes)
Then, in my SearchController constructor, i inject Solr like this:
private readonly ISolrBasicOperations<Document> Solr;

public SearchController(ISolrBasicOperations<Document> solr)
{
    Solr = solr;
}

Up to this point, everything seems ok, because when i debug the solr object, i can see that the "solr -> connection -> HttpClient -> DefaultRequestHeaders -> Authorization has a valid value: "{Basic ZGltaZRyaXM6NTIzNA==}", exactly the same as the credentialsBase64 var in my startup.cs
But, when i execute a query, i get a 401 response and fiddler shows that no Authorization Header is set!
Hope that this helps!
Have a nice day!

I just tested it, and I do get the Authentication header in Fiddler.
How are you executing the queries? Are you using Query or QueryAsync ?

Hi again, sorry for the late reply - i was out of town...
Well, seems that you found the solution: I was using Query but when i switched to QueryAsync, everything worked just fine!
It seems, that the non async function needs a fix!
Thank you for the support!

It is kind of a known issue, the AutoSolrConnection uses the new HttpClient for Async only (since HttpClient is Async only), and falls back to the old SolrPostConnection  for Sync calls.
Perhaps we should make AutoSolrConnection include a setting whether to allow Sync calls, and have that turned off by default in the SolrNet.Microsoft.DependencyInjection package.

Hi, is this issue solved in the latest version? I tried to use Basic Authentication in combination with AutoSolrConnection. When I launch a Query I get 'Unauthorized'. When I use the same credentials with SolrConnection, everything works fine.
`Startup.InitContainer();
var sc = new ServiceCollection();
//my credentials
var credentials = System.Text.Encoding.ASCII.GetBytes(SolrUserName + ":" + SolrPassword);
//in base64
var credentialsBase64 = Convert.ToBase64String(credentials);
//use the options to set the Authorization header.
sc.AddSolrNet(solrAppUrl, options => { options.HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentialsBase64); });
//test
var provider = sc.BuildServiceProvider();
var injectionConnection = provider.GetRequiredService<ISolrInjectedConnection>() as BasicInjectionConnection;
var connection = injectionConnection.Connection as AutoSolrConnection;
Startup.Init(connection);`

Is there any solution yet?
I am still getting "The remote server returned an error: (401) Unauthorized.".
Thanks

@fatihyildizhan Hi, have you tried the async methods, as mentioned above?

Hi,
I compiled the answers above and created a simple .NET 5 project. You may check the Readme as well.
https://github.com/bau-global/SolrNET5WebAPI

Startup

var credentials = Encoding.ASCII.GetBytes("username:password");
var credentialsBase64 = Convert.ToBase64String(credentials);
services.AddSolrNet<WeatherForecast>("https://solr-server-ip:port/solr/name", options =>
{
  options.HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentialsBase64);
});

Controller
SolrQueryResults<WeatherForecast> results = await _solr.QueryAsync(new SolrQuery($"summary: {parameter}"));

To fix the usage of sync calls we needed to patch some SolrNet code to actually use BasicAuthHttpWebRequestFactory instead of the hardcoded HttpWebRequestFactory:
        /// <summary>
        /// For sync calls <see cref="AutoSolrConnection"/> falls back to <see cref="PostSolrConnection"/>.
        /// The creation is handled inside <see cref="AutoSolrConnection(string, HttpClient)"/> and cannot be intercepted/modified.
        ///
        /// Patch 1:
        /// <see cref="AutoSolrConnection(string, HttpClient)"/> creates an inline instance of <see cref="SolrConnection"/> that contains a 'hardcoded' constraint on <see cref="HttpWebRequestFactory"/>.
        /// This inline instance gets passed into <see cref="PostSolrConnection(ISolrConnection, string)"/>
        ///
        /// We need to obtain the instance of <see cref="PostSolrConnection"/> and modify the private field that was passed through the constructor.
        ///
        /// Patch 2:
        /// Whenever a <see cref="PostSolrConnection"/> instance is created, <see cref="PostSolrConnection(ISolrConnection, string)"/>  also contains a 'hardcoded' constraint on <see cref="HttpWebRequestFactory"/>
        ///
        /// This method uses reflection to find both <see cref="PostSolrConnection.HttpWebRequestFactory"/> fields and sets it to use <see cref="BasicAuthHttpWebRequestFactory"/> using the passed <paramref name="solrCredentials"/>.
        /// </summary>
        private static void SetBasicAuthInAutoSolrConnection(AutoSolrConnection autoSolrConnection, NetworkCredential solrCredentials)
        {
            if (autoSolrConnection != null)
            {
                var basicAuthFactory = new BasicAuthHttpWebRequestFactory(solrCredentials.UserName, solrCredentials.Password);

                // get PostSolrConnection property reference from AutoSolrConnection
                var syncFallbackConnectionProperty = autoSolrConnection.GetType().GetProperty("SyncFallbackConnection", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

                // get actual PostSolrConnection instance from AutoSolrConnection
                var postSolrConnection = syncFallbackConnectionProperty.GetValue(autoSolrConnection);

                SetBasicAuthHttpWebRequestFactory(postSolrConnection, basicAuthFactory);

                // get conn property reference from PostSolrConnection
                var connProperty = postSolrConnection.GetType().GetField("conn", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

                // get actual SolrConnection instance from PostSolrConnection
                var solrConnection = connProperty.GetValue(postSolrConnection);

                SetBasicAuthHttpWebRequestFactory(solrConnection, basicAuthFactory);
            }
        }

        private static void SetBasicAuthHttpWebRequestFactory(object instance, BasicAuthHttpWebRequestFactory basicAuthHttpWebRequestFactory)
        {
            // get HttpWebRequestFactory property reference from PostSolrConnection
            var httpWebRequestFactoryProperty = instance.GetType().GetProperty("HttpWebRequestFactory", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);

            // set BasicAuthHttpWebRequestFactory on instance
            httpWebRequestFactoryProperty.SetValue(instance, basicAuthHttpWebRequestFactory);
        }

And use it like this whenever we create a AutoSolrConnection:
        private static ISolrConnection CreateAutoSolrConnection(string solrUrl, Action<SolrNetOptions> setupAction, NetworkCredential solrCredentials)
        {
            if (string.IsNullOrWhiteSpace(solrUrl)) throw new ArgumentNullException(nameof(solrUrl));

            // deviation from documentation code: make sure AutoSolrConnection uses our HttpClientHandler with credentials.
            var httpClientHandler = new HttpClientHandler
            {
                AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
                Credentials = solrCredentials
            };

            var httpClient = new HttpClient(httpClientHandler);

            var connection = new AutoSolrConnection(solrUrl, httpClient);

            // deviation from documentation code: make sure AutoSolrConnection internals use BasicAuthHttpWebRequestFactory
            SetBasicAuthInAutoSolrConnection(connection, solrCredentials);

            if (setupAction == null) return connection;

            // Allow for custom headers to be injected.
            var options = new SolrNetOptions(connection.HttpClient);
            setupAction(options);
            return connection;
        }

I'll create a PR that allows us to have more control over the type of factory in code asap.

Created PR: https://github.com/SolrNet/SolrNet/pull/583


Node sas binding OSX 64-bit

ERROR in Missing binding /workspace/node_modules/node-sass/vendor/linux-x64-48/binding.node
Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 6.x
Found bindings for the following environments:

OS X 64-bit with Node.js 6.x

This usually happens because your environment has changed since running npm install.
Run npm rebuild node-sass to build the binding for your current environment.
@ ./~/style-loader!./~/css-loader!./~/resolve-url-loader!./~/sass-loader?sourceMap!./~/bootstrap-loader/lib/bootstrap.styles.loader.js!./~/bootstrap-loader/no-op.js 4:14-164
ERROR in ./src/containers/App/style.scss
Module build failed: Error: Missing binding /workspace/node_modules/node-sass/vendor/linux-x64-48/binding.node
Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 6.x
Found bindings for the following environments:

OS X 64-bit with Node.js 6.x

This usually happens because your environment has changed since running npm install.
Run npm rebuild node-sass to build the binding for your current environment.
at Object. (/workspace/node_modules/node-sass/lib/index.js:15:11)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object. (/workspace/node_modules/sass-loader/index.js:4:12)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at DependenciesBlock.loadPitch (/workspace/node_modules/webpack-core/lib/NormalModuleMixin.js:193:17)
at DependenciesBlock.loadPitch (/workspace/node_modules/webpack-core/lib/NormalModuleMixin.js:186:21)
at DependenciesBlock.loadPitch (/workspace/node_modules/webpack-core/lib/NormalModuleMixin.js:223:61)
at DependenciesBlock.doBuild (/workspace/node_modules/webpack-core/lib/NormalModuleMixin.js:241:4)
at DependenciesBlock.build (/workspace/node_modules/webpack/lib/NormalModule.js:84:14)
at Compilation.buildModule (/workspace/node_modules/webpack/lib/Compilation.js:126:9)
at Compilation. (/workspace/node_modules/webpack/lib/Compilation.js:398:8)
at /workspace/node_modules/webpack/lib/NormalModuleFactory.js:58:13
at NormalModuleFactory.applyPluginsAsyncWaterfall (/workspace/node_modules/tapable/lib/Tapable.js:75:69)
at onDoneResolving (/workspace/node_modules/webpack/lib/NormalModuleFactory.js:38:11)
at onDoneResolving (/workspace/node_modules/webpack/lib/NormalModuleFactory.js:121:6)
at /workspace/node_modules/webpack/lib/NormalModuleFactory.js:98:13
at /workspace/node_modules/webpack/node_modules/async/lib/async.js:726:13
at /workspace/node_modules/webpack/node_modules/async/lib/async.js:52:16
@ ./src/containers/App/index.js 13:0-23
Child extract-text-webpack-plugin:
+ 1 hidden modules
ERROR in Missing binding /workspace/node_modules/node-sass/vendor/linux-x64-48/binding.node
Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 6.x

Found bindings for the following environments:
  - OS X 64-bit with Node.js 6.x

This usually happens because your environment has changed since running `npm install`.
Run `npm rebuild node-sass` to build the binding for your current environment.

Error occurred because your Dockerfile copied the contents of node_modules when you installed them on your OS X environment. When node saw that you were trying to install them again on a different operating system, it issued this error


LSP[sumneko_lua] Your workspace is set to /home/XYZ. Lua language server refused to load this directory. Please check your configura tion.learn more here

Hello!
Recently every time I open up a .lua file I always get this error
LSP[sumneko_lua] Your workspace is set to '/home/zhifan'. Lua language server refused to load this directory. Please check your configura tion.[learn more here](https://github.com/sumneko/lua-language-server/wiki/Why-scanning-home-folder)
but I don't know how should I fix it.
The Language Server itself still works even if the message shows up

@c3n21 This is something I've seen when opening some of my lua files. I think it is a issue with the language-server itself since I do not use this project.
Cause for me is that I open lua files that are in my dofiles. If I open lua files that are not in repo tracked from home, all is good. Also if I rename ~/.git to ~/.git.b, lsp stops giving me errors

I get the same warning.

I found cause of this.
This is because there are files in your home directory that match these root patterns, such as .luarc.json.
The first one here has returned the home directory.
https://github.com/neovim/nvim-lspconfig/blob/0fafc3ef648bd612757630097c96b725a36a0476/lua/lspconfig/server_configurations/sumneko_lua.lua#L23

PR is merged, so this issue can close.


Write a design document

Oxigraph currently does not provide a document describing its architecture and design. Having such a document would be very useful for people considering adopting Oxigraph or contributing to it.

Done a few weeks ago: https://github.com/oxigraph/oxigraph/wiki/Architecture


python312Packages.tokenizers: 0.19.1 -> 0.20.0

Description of changes
Update to 0.20.0, which has a lot of performance improvements.
Draft: transformers has a bound < 0.20.0. I'll ask around if it's safe or better to wait until the next release.

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.


Code cleanup

Hey. I saw this project in tests for Castle.Core and got interested. Looking through the code I noticed several typos.

Thx for the contribution!


Chunk cache implementation

Hey, firstly thanks for your great work.
If I read properly, you can't really limit the cache size. Only set a simple max age.
A better approach would have been to implement a LRU cache (used in many cases). That way u can set a max cache size and if full the least recently used file / chunk get evicted to make space for the newest.
We could control the buffer cache size.

Honestly, this was about getting something working for plex use as quickly as possible. The buffer size whilst annoying isn't a major issue.

Exactly... I am not planning to limit the cache size. Maybe sometimes ....
If you set leave the cache settings to default a normal movie with 15gb should be cleaned up while it's playing.


Queries off the end of a reference

If a query is performed that requests reads from an area larger than the reference, what is the result?
i.e.  Reference is 1000 bp long.  Query starts at 900, ends at 1500.  Are all the reads overlapping 900->1000 returned? Or is it an error?

I think an error.

On 30 Mar 2015, at 21:01, Louis Bergelson<EMAIL_ADDRESS>wrote:
If a query is performed that requests reads from an area larger than the reference, what is the result?
i.e. Reference is 1000 bp long. Query starts at 900, ends at 1500. Are all the reads overlapping 900->1000 returned? Or is it an error?
—
Reply to this email directly or view it on GitHub https://github.com/ga4gh/schemas/issues/271.

--
The Wellcome Trust Sanger Institute is operated by Genome Research
Limited, a charity registered in England with number 1021457 and a
company registered in England with number 2742969, whose registered
office is 215 Euston Road, London, NW1 2BE.

An error sounds reasonable --- should we update the schema to formalise the behaviour in these types of condition?

I think the schema should be very explicit about what happens with conditions like this.  I don't have a preference in this case about what the answer is, as long as it is well defined and doesn't vary from implementation to implementation.

I couldn't agree more. However, there is really no discussion at all of error conditions in the schema right now, so it's not obvious how it should be done. Have you any thoughts on this?

If you trigger an error when any part of the query is out of bounds, then the client needs to be very careful to maintain a list of references and lengths when making queries. Not a bad idea, but sometimes this is impractical or unnecessary when the edge cases are very infrequent.
My preference would be to not return anything when the query is wholly out of bounds. It's simpler, which means less to implement. The sanity checking can be left up to the client, which can elect to do so depending on application.
In response to the original prompt, this would mean that the reads in the reference range get returned, even if part of the range isn't in the reference proper.

I think returning an error is the right thing. Returning nothing is too ambiguous. Having queries that are out of bounds (or inconsistent with the assembly structure- i.e. in gaps) tends to happen when you have the wrong reference. I see this happen more often than I would like- a group thinks they are on GRCh37 but do their analysis on GRCh38 (or vise versa).
Explicit errors for error stats would be my preference- it is safer and there are less assumptions made.

Yes, +1 for Deanna's view.  No result returned is a meaningful
result in many bioinformatics related queries.  This is not
twitter; precision should be an important goal of any query.
Deanna Church<EMAIL_ADDRESS>writes:

I think returning an error is the right thing. Returning nothing is too
ambiguous. Having queries that are out of bounds (or inconsistent with the
assembly structure- i.e. in gaps) tends to happen when you have the wrong
reference. I see this happen more often than I would like- a group thinks they
are on GRCh37 but do their analysis on GRCh38 (or vise versa).
Explicit errors for error stats would be my preference- it is safer and there
are less assumptions made.
—
Reply to this email directly or view it on GitHub.*

Note for later: Tweet your query to @ga4ghapi...

On 31 Mar 2015, at 23:08, Mark Diekhans<EMAIL_ADDRESS>wrote:
Yes, +1 for Deanna's view. No result returned is a meaningful
result in many bioinformatics related queries. This is not
twitter; precision should be an important goal of any query.
Deanna Church<EMAIL_ADDRESS>writes:

I think returning an error is the right thing. Returning nothing is too
ambiguous. Having queries that are out of bounds (or inconsistent with the
assembly structure- i.e. in gaps) tends to happen when you have the wrong
reference. I see this happen more often than I would like- a group thinks they
are on GRCh37 but do their analysis on GRCh38 (or vise versa).
Explicit errors for error stats would be my preference- it is safer and there
are less assumptions made.
—
Reply to this email directly or view it on GitHub.*

—
Reply to this email directly or view it on GitHub https://github.com/ga4gh/schemas/issues/271#issuecomment-88249049.

Errors are ideal, but there is an economy to features of the API. Each new error type will need to be implemented by servers and handled by clients.
It's also not clear to me that this will help clients avoid problems with mismatched references and data unless they are working close to chromosome boundaries or there are large differences in chromosome lengths between versions. There will be many other signals, such as mismatched bases in the reference, that are more likely to be detected by users and less easy to guard against by protective error returns. We are not going to be able to avoid user confusion by design.
So I agree that errors are probably the most correct thing to do. But, features have costs, and until this is a non-hypothetical issue I'd prefer to leave it out of the specification.
As a non-hypothetical example, samtools faidx will return an empty sequence when it is targeted outside of bounds. However, it returns an error when the chromosome name does not exist in the FASTA index. Similarly, samtools view doesn't return an error when it's given a range completely outside of a chromosome (it just returns nothing) and also returns an error when the chromosome doesn't exist. This seems to have been an acceptable API to users. I'd be curious what @lh3 thinks.

Well defined error conditions are critical for an API in my view. I don't have a strong opinion about this particular situation, but in general we should define the behaviour of the server in all situations. If we don't, then it's up to server implementations whether they return an error or no results, and then client code ends up being written against the behaviour of a particular server. Suppose I develop my code on server X, that happens to return no results in the out-of-bounds condition here. As a client side developer, I implicitly assume that this is the behaviour mandated by the protocol, so I write my code accordingly and build this assumption in to my code. Some time later, I need to scale my code so I run it on server Y, which happens to throw errors. Now my code doesn't work any more. If we want portability of client code across different servers, we must specify the behaviour of the server in every possible condition.
Well defined error conditions are an important part of this. I don't think it's a major burden to implement these once they are specified. As a server developer, I would much rather have a cast iron spec to develop towards than to have to try and guess what the correct behaviour is (see ga4gh/server#308 for an example of where wooly specification is causing us problems).
So, the question for me is, how do we define these error conditions, their results, and ensure that they are thrown in a verifiable manner?

I appreciate the difficulties of implementing error conditions, and having them be consistent. I do think it is important to identify states that are truly errors (running off the end of the chromosome qualifies I believe) and define how to handle these.
I would also assert that just because you've heard no complaints about how an API is implemented does not mean there is not a problem. It may in fact be OK, or people could just be coding around it (or missing it) without complaining/reporting a problem.

Erik Garrison<EMAIL_ADDRESS>writes:

Errors are ideal, but there is an economy to features of the API. Each new
error type will need to be implemented by servers and handled by clients.

Absolutely, features do have costs, but accurate exchange of
data is important and we have to clearly define and implement
the API.  Cost is in the server and conformance suites.  Clients
general just handle most errors the same.
While checking for out-of-bounds coordinates isn't the most
powerful or predictable sanity check, it has caught me many
times.  Admittedly, I am biased towards doing whole genome
analysis.
Bioinformatics data has a huge problem of being imprecisely
engineered.  Yes, the data is noisy, but how the data is stored
should not be noisy.  Trying to understand many of our data sets,
even some of the better ones, is often a exercise in forensics.
Having a very precisely define API might create more work for the
specification and server developers, but it simplifies the whole
systems.  One knows what to expect, not having to guess and code
around different responses and behavior.
Of course, none of this is perfect and it takes time.  GA4GH
should do things as exact as possible. Save time by delaying
features rather than cutting corners.
Mark

It seems that the consensus on this issue is that we should have an error. The question now is, how do we specify this? Some options:

Describe the error conditions in the comments, and note that an error should be thrown in these conditions. Not further specification given.
Describe the error conditions in the comments, and specify the error code that should be filled in to the GAException.errorCode for each condition. We must then define the error codes and their meanings somewhere in the specification.
Describe the error conditions in the comments, and specify an error descriptor from an enum that we define. We would need to add a new field to the GAException type to allow us to send this error descriptor to the client.
Describe the error conditions in the comments, and specify a different Exception type for each error that can occur. Formally specify that the method throws these types of exceptions. (Does Avro allow us to throw multiple exceptions from a method?)

Thoughts?

I would go for 2 or 3.  4 looks significantly heavier to me for little if no gain.
Apologies if I am naive, but is there a possibility for a registered error handler to reject an error, passing it back to the thrower?
Then the throwing code could do something like
if (out of bounds && throwErrror (OutOfBoundsError)) { return empty results ; }

and Erik could get his preferred behaviour by registering a handler that rejects the error.
I guess only some errors could be returned - there may be some which are unrecoverable.
Maybe none of this makes any sense in a server/client environment.
Richard

On 2 Apr 2015, at 10:05, Jerome Kelleher<EMAIL_ADDRESS>wrote:
It seems that the consensus on this issue is that we should have an error. The question now is, how do we specify this? Some options:
Describe the error conditions in the comments, and note that an error should be thrown in these conditions. Not further specification given.
Describe the error conditions in the comments, and specify the error code that should be filled in to the GAException.errorCode for each condition. We must then define the error codes and their meanings somewhere in the specification.
Describe the error conditions in the comments, and specify an error descriptor from an enum that we define. We would need to add a new field to the GAException type to allow us to send this error descriptor to the client.
Describe the error conditions in the comments, and specify a different Exception type for each error that can occur. Formally specify that the method throws these types of exceptions. (Does Avro allow us to throw multiple exceptions from a method?)
Thoughts?
—
Reply to this email directly or view it on GitHub https://github.com/ga4gh/schemas/issues/271#issuecomment-88835928.

--
The Wellcome Trust Sanger Institute is operated by Genome Research
Limited, a charity registered in England with number 1021457 and a
company registered in England with number 2742969, whose registered
office is 215 Euston Road, London, NW1 2BE.

I like (2) & (3) best also. It would be a lot of Avro plumbing to do (4), for not a lot of gain.
A client library can do the sort of things that you are talking about here @richarddurbin. I think it would be a lot of complexity in the server to make errors optionally recoverable, for no real advantage. I'm not really convinced that it's ever a good idea to mask errors from application programmer though.

I initially didn't have a strong opinion on the result of one of these queries, but after thinking about it I'm more of the opinion that a query partially off the reference should return all the overlapping reads if any.
I have the following example of why this might be desirable behavior.
It's very reasonable that someone would want to take every read in some set of reads, and query for reads that overlap that read.  In the case of a read that is aligned off the end of the contig, with the current the proposal, this query would produce an error.  It seems unexpected that querying the start/end position of an existing read would produce an error.

@lbergelson this is exactly the kind of situation I'm referring to as presenting an additional difficulty for clients. If we implement this specific error, all clients will need to maintain complete maps of the entire reference system. Perhaps this is desirable, but it increases the coordination cost of the distributed system.

@ekg Yes, I was just hadn't come up with a realistic situation when you would end up with queries that look like that.  Since you can handle queries from start -> end of chromosome by just not specifying an end, most of these issues are just avoided. Any time you're generating positions externally it seems reasonable to have to sanity check them, but this is a situation where querying the results of a previous query in a straight forward way could lead to an error.

Having very clearly defined and expressed errors is really
important for writing robust code.
We should absolute avoid any special cases, like parameters that
control if an error is returned or not.  Every if-then-else
makes the API more complex.
Bioinformatics people can learn to be precise programmers.  It's
far easier in the long run to not have so many possible failure
cases.
We need to concentrate on making the API straight-forward and
write language specific, client libraries to make programming
easier.

I don't think it's quite as bad as you are making out @ekg. There are two options to cover this case cleanly:

The client needs to make a request to ask about the size of the reference before hand. (Client's don't need to know anything).
We make end nullable, and make this mean 'until the end of the reference'.

Using (2) clients can conveniently perform the required queries you mention. If they explicitly provide a value that is too large we consider this to be an error and return one.

Jerome Kelleher<EMAIL_ADDRESS>writes:

We make end nullable, and make this mean 'until the end of the reference'.

This is clear and precise.  Making up a large number isn't.

End is already nullable with that behavior according to the spec.

Yes, sorry @lbergelson, I was thinking about variants. The question is though, is this corner case worth losing the error handling assurances? Is it more common for people to make mistakes that could be caught early by having the server do bounds checking, or to need to tackle the situation you mention above?

@jeromekelleher Oh, I didn't realize it was different for variants.  Whatever the decision is, it should be consistent across the different query api's.
I'm not certain which is more important.  I'm currently leaning towards the convenience of not having to explicitly clip to the end position in every query to the known reference.   Of course this could be done automatically by the client library, but in that case you also lose the error checking.
I'm not sure what types of errors will be caught by returning an error.  It seems likely it will mostly be off by 1 errors, or possibly people accidentally using the wrong reference.  Incorrect reference errors seem like they will be already implicitly handled because queries must specify the reference.  Maybe this could catch users typing the wrong reference set name, but that seems like a low priority issue and probably this isn't the right way to deal with it.  (better to encode it in the analysis somehow instead of typing things manually...)

I agree @lbergelson --- it's not obvious what the right answer is here!

I think it practice it is likely that we would just clip the end position of every query to avoid an error.  So that would defeat the point of having the error.


Passing kwargs to body_func

Is there a way to pass the kwargs passed to ainvoke to body_func as the code currently is?
It seems to me that there is not, and I have implemented a workaround. However, that seems like a feature that would interest other people as well.
What do you think? I could implement that if it fits the project's roadmap.

The idea sounds good in principle. Would you like to submit a PR with your suggested change so that we can review it? Thanks!

Sure, I will do that as soon as I can :)


Use the RESOURCE ID OUTPUT from the confluent_private_link_access_v1 to create an Azure Endpoint

Hello there,
Not sure if I'm doing something wrong, but using the documentation I created a confluent_private_link_access and I was hoping that from It's output I could create an azure_private_endpoint, but I figured that the output from confluent_private_link_access_v1.azure-private-link-access.id is a code using the pattern XXX-XXXXX
`
resource "confluent_private_link_access_v1" "azure-private-link-access" {
display_name = "Azure Private Link Access for ${var.application_name}"
azure {
subscription = var.azure_subscription
}
environment {
id = confluent_environment_v2.environment.id
}
network {
id = confluent_network_v1.azure-private-link.id
}
}
resource "azurerm_private_endpoint" "kafka_private_endpoint" {
name                = var.endpoint_name
location            = var.region
resource_group_name = var.azure_resource_group
subnet_id           = var.subnet_id
dynamic "private_service_connection" {
for_each = var.type == "dedicated" ? [1] : [0]
content {
name                           = var.kafka_private_service_connection_name
private_connection_resource_id = confluent_private_link_access_v1.azure-private-link-access.id
is_manual_connection           = var.is_manual_connection
}
}
}
`
And that is not actually the full resource ID that I can use and of course if I try the pipeline breaks.

I would like to know if there is a way to get the resource ID from the Private Link Service?

Thanks for asking @rogerioefonseca!
Could you share more about the resource ID you'd like private link access object to expose?
Did you also take a look at dedicated-privatelink-azure-kafka-acls? That's an all-in-one example that sets up DNS on Azure, here's a snippet for azurerm_private_endpoint:
resource "azurerm_private_endpoint" "endpoint" {
  for_each = confluent_network.private-link.azure[0].private_link_service_aliases

  name                = "confluent-${local.network_id}-${each.key}"
  location            = var.region
  resource_group_name = data.azurerm_resource_group.rg.name

  subnet_id = data.azurerm_subnet.subnet[each.key].id

  private_service_connection {
    name                              = "confluent-${local.network_id}-${each.key}"
    is_manual_connection              = true
    private_connection_resource_alias = each.value
    request_message                   = "PL"
  }
}

Thanks for asking @rogerioefonseca!
Could you share more about the resource ID you'd like private link access object to expose?
Did you also take a look at dedicated-privatelink-azure-kafka-acls? That's an all-in-one example that sets up DNS on Azure, here's a snippet for azurerm_private_endpoint:

resource "azurerm_private_endpoint" "endpoint" {

  for_each = confluent_network.private-link.azure[0].private_link_service_aliases

  name                = "confluent-${local.network_id}-${each.key}"

  location            = var.region

  resource_group_name = data.azurerm_resource_group.rg.name

  subnet_id = data.azurerm_subnet.subnet[each.key].id

  private_service_connection {

    name                              = "confluent-${local.network_id}-${each.key}"

    is_manual_connection              = true

    private_connection_resource_alias = each.value

    request_message                   = "PL"

  }

}

Hello @linouk23 , thanks for your reply.
Yes, I was wrong trying to use the  service ID.
As it is described in the example that you mentioned, I must use the service alias instead.
Thanks for your support


Binding PolicyReport resource to Namespace by ownerReference

Motivation
Using various observability tools, it is not always clear what the resource is related to / refers to
Feature
When generating the PolicyReport resource, I suggest adding the ownerReference field. By this field, it will be easy to determine what the resource belongs to. For example, such functionality is available in Kyverno. Very comfortably

Hello,
Just to be sure we're aligned, you would like something like:
APIVersion: "v1",
Kind:       "Deployment",
Name:       <falcosidekick-namespace>,
UID:        <falcosidekick-deployment-uuid>,
Controller: false,

I'm not 100% sure what's the most obvious for users, using Falco or Sidekick as Owner, wdyt?

Hello,
Just to be sure we're aligned, you would like something like:
APIVersion: "v1",
Kind:       "Deployment",
Name:       <falcosidekick-namespace>,
UID:        <falcosidekick-deployment-uuid>,
Controller: false,

I'm not 100% sure what's the most obvious for users, using Falco or Sidekick as Owner, wdyt?

Using the deployment is not possible because the owner reference can not be a namespace scoped object in another resource namespace as the report
You can bind it, as Kyverno to the Namespace object.

The behavior of the output is:

if ka.target.namespace or  k8s.ns.name are present, it will create/update a Policy Report
else it will create/update a Cluster Policy Report

I understand we can set the Namespace as Owner for the Policy Report, but what which one, falco's namespace? compromised resource's namespace?
And what about the Cluster Policy Report?

The behavior of the output is:

if ka.target.namespace or  k8s.ns.name are present, it will create/update a Policy Report
else it will create/update a Cluster Policy Report

I understand we can set the Namespace as Owner for the Policy Report, but what which one, falco's namespace? compromised resource's namespace? And what about the Cluster Policy Report?

If a namespace resource, then the namespace for the resource that was attacked. Cluster not to connect in any way.

FYI, the ClusterPolicyReport are used for attacks to the kubernetes API from outside a Pod, these events are collected with the k8saudit log plugin

Does this seem good to you?
apiVersion: wgpolicyk8s.io/v1alpha2
kind: PolicyReport
metadata:
  creationTimestamp: "2022-07-21T15:01:08Z"
  generation: 7
  name: falco-policy-report-4dca6378
  namespace: default
  ownerReferences:
  - apiVersion: v1
    controller: false
    kind: Namespace
    name: default
    uid: db58b116-3b9d-45dd-b949-1624b7468fe2
  resourceVersion: "169906"
  uid: f8942f93-b643-4ad7-9042-dcf87957e4af

You can test the image falcosecurity/falcosidekick:owner

Is default the Namespace of the Report? I think he means the namespace where falcosidekick is installed, like kyverno sets the namespace of the kyverno pods.

This is not the default, the current implementation of the PolicyReport creates the reports in the same namespace than the Pod where the event occurred. I used for my test a Pod in default that's all.

After discussion with @fjogeleit it appeared I misunderstood the use case. I changed the code and now it adds as OwnerRef the namespace where Falcosidekick is deployed. The value is retrieved by the env var NAMESPACE that it will be set in the deployment template.
Here's the result:
apiVersion: wgpolicyk8s.io/v1alpha2
kind: PolicyReport
metadata:
  creationTimestamp: "2022-07-21T20:17:17Z"
  generation: 3
  name: falco-policy-report-49560956
  namespace: default
  ownerReferences:
  - apiVersion: v1
    controller: false
    kind: Namespace
    name: falco
    uid: 8247029e-ba31-4de6-8748-c2bea5437498

It will be released with 2.27.0


chore(main): release 1.11.6

:robot: I have created a release beep boop
1.11.6 (2024-04-04)
Miscellaneous

software: update installed (baa4f73)

This PR was generated with Release Please. See documentation.

pre-commit.ci run

:robot: Release is at https://github.com/engeir/stowfiles/releases/tag/v1.11.6 :sunflower:


Add a couple of extra steps for Windows Debug mode.

While working in Windows debug mode, I noticed that it couldn't
import pytest, and hence none of the pytest tests in the core
were running.  After some debugging, I found that pytest (or
more specifically, pytest-cov/coverage) requires the sqlite3_d.dll
to be in place for it to work.  Add the instruction to copy that
over, as well as add a test to make sure it worked.
Signed-off-by: Chris Lalancette<EMAIL_ADDRESS>

@Mergifyio backport foxy galactic


Screen orientation change cause initial route call

Is there an existing issue for this?

[X] I have searched the existing issues
[X] I have read the guide to filing a bug

Steps to reproduce
I'm using
MaterialApp.router(
routeInformationProvider: routesData().routeInformationProvider,
routeInformationParser: routesData().routeInformationParser,
routerDelegate: routesData().routerDelegate,
)
and for routes data I'm using
routesData() {
final GoRouter router = GoRouter(
routes: [
GoRoute(
path: '/',
name: '/',
redirect: (context, state) {
return token != null
? baseSideMenu.isNotEmpty
? baseSideMenu[0].route
: "/dashboard"
: '/login';
},
),])
}
Expected results
when I change orientation in any page, I want that page to be in desired orientation
Actual results
whenever I try to change orientation, It call the routes initial route '/', resulting in return to dashboard page
Code sample
I'm using
MaterialApp.router(
routeInformationProvider: routesData().routeInformationProvider,
routeInformationParser: routesData().routeInformationParser,
routerDelegate: routesData().routerDelegate,
)
and for routes data I'm using
routesData() {
final GoRouter router = GoRouter(
routes: [
GoRoute(
path: '/',
name: '/',
redirect: (context, state) {
return token != null
? baseSideMenu.isNotEmpty
? baseSideMenu[0].route
: "/dashboard"
: '/login';
},
),])
}
Screenshots or Video

Screenshots / Video demonstration
[Upload media here]

Logs
Logs
[Paste your logs here]

Flutter Doctor output
[√] Flutter (Channel stable, 3.13.0, on Microsoft Windows [Version 10.0.22621.2134], locale en-IN)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[√] Chrome - develop for the web
[X] Visual Studio - develop Windows apps
X Visual Studio not installed; this is necessary to develop Windows apps.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[!] Android Studio (version 2021.3)
X Unable to determine bundled Java version.
[√] Android Studio (version 2022.2)
[√] VS Code (version 1.72.1)
[√] Connected device (4 available)
[√] Network resources

@razer-santhosh Thanks for filing this issue, for better formatting, enclose your code within (```) on both ends, and attach a minimal reproduceable code for testing.

@razer-santhosh Thanks for filing this issue, for better formatting, enclose your code within (```) on both ends, and attach a minimal reproduceable code for testing.
this is the code I'm using in main.dart

                routeInformationProvider: routesData().routeInformationProvider,
                routeInformationParser: routesData().routeInformationParser,
                routerDelegate: routesData().routerDelegate,
                title: appTitle,
                locale: _locale,
                supportedLocales: const [
                  Locale("en", "US"),
                  Locale("ta", "IN")
                ],
                localizationsDelegates: const [
                  ApplicationLocalizations.delegate,
                  GlobalMaterialLocalizations.delegate,
                  GlobalWidgetsLocalizations.delegate,
                  GlobalCupertinoLocalizations.delegate,
                ],
                localeResolutionCallback: (locale, supportedLocales) {
                  for (var supportedLocale in supportedLocales) {
                    if (supportedLocale.languageCode == locale!.languageCode &&
                        supportedLocale.countryCode == locale.countryCode) {
                      return supportedLocale;
                    }
                  }
                  return supportedLocales.first;
                },
                debugShowCheckedModeBanner: false,
                theme: MyTheme.appStatusBarColor);```

this is the routes data

```routesData() {
  final GoRouter router = GoRouter(
    routes: <GoRoute>[
      GoRoute(
        path: '/',
        name: '/',
        redirect: (context, state) {
          return token != null
              ? dashboard_available == 1
                  ? '/reports'
                  : '/reports'
              : '/login';
        },
      ),
      GoRoute(
        path: '/reports',
        name: '/reports',
        pageBuilder: (BuildContext context, GoRouterState state) {
          final isOnline = Provider.of<ConnectivityProvider>(context).isOnline;
          final isUpdateAvailable =
              Provider.of<AppUpgradeProvider>(context).isUpdateAvailable;
          bottomIndex = dashboard_available == 1 ? 1 : 0;
          var child = (isOnline != null && !isOnline)
              ? const NoInternet()
              : (isUpdateAvailable)
                  ? const AppUpdate()
                  : const Report();
          return customTransitionPage(state.pageKey, child);
        },
      )]);
return router;```

after, I pushed some pages, when user click on full screen icon, I'm changing screen orientation to landscape, then it calling the routes data function, resulting in dashboard page pushed to the route

@razer-santhosh I checked this with below minimal sample code with 2 pages but can't reproduce the issue. The steps I tried are:

Open app
Navigate to 2nd page. Rotate the device screen to landscape

Result: The 2nd page stays without being returned to page 1 automatically.

Minimal sample code
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

/// This sample app shows an app with two screens.
///
/// The first route '/' is mapped to [HomeScreen], and the second route
/// '/details' is mapped to [DetailsScreen].
///
/// The buttons use context.go() to navigate to each destination. On mobile
/// devices, each destination is deep-linkable and on the web, can be navigated
/// to using the address bar.
void main() => runApp(const MyApp());

/// The route configuration.
final GoRouter _router = GoRouter(
  routes: <RouteBase>[
    GoRoute(
      path: '/',
      builder: (BuildContext context, GoRouterState state) {
        return const HomeScreen();
      },
      routes: <RouteBase>[
        GoRoute(
          path: 'details',
          builder: (BuildContext context, GoRouterState state) {
            return const DetailsScreen();
          },
        ),
      ],
    ),
  ],
);

/// The main app.
class MyApp extends StatelessWidget {
  /// Constructs a [MyApp]
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: _router,
    );
  }
}

/// The home screen
class HomeScreen extends StatelessWidget {
  /// Constructs a [HomeScreen]
  const HomeScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Home Screen')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () => context.go('/details'),
              child: const Text('Go to the Details screen'),
            ),
          ],
        ),
      ),
    );
  }
}

/// The details screen
class DetailsScreen extends StatelessWidget {
  /// Constructs a [DetailsScreen]
  const DetailsScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Details Screen')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <ElevatedButton>[
            ElevatedButton(
              onPressed: () => context.go('/'),
              child: const Text('Go back to the Home screen'),
            ),
          ],
        ),
      ),
    );
  }
}

In order to address the issue properly, please provide a completed and minimal reproducible code sample that doesn’t include 3rd party plugins or complex production code so that we may verify this.


EDNS_DO bit is always set for iterative queries

Describe the bug
Unbound sets the EDNS_DO bit even when DNSSEC validation is turned off. It seems like DO is always set when EDNS is activated.
This puts unnecessary burden on the network and name servers as DNSSEC might trigger truncated messages and a TCP fallback is triggered.
To reproduce
Steps to reproduce the behavior:

set module-config: "iterator" to disable the validator and remove all trust anchors (basically follow How-to-turnoff-DNSSEC
issue a DNS query dig somedomayn.example.com @localhost
Unbound will set the DO bit in EDNS for outgoing queries towards authoritative nameservers

Expected behavior
Unbound should not set the DO bit when DNSSEC validation is turned off and the client query did not set the DO bit
System:

Unbound version: 1.17.2
OS: Debian GNU/Linux 10 (buster)
unbound -V output:

Version 1.17.2

Configure line: --with-libevent --prefix /*/unbound/build-local
Linked libs: libevent 2.1.8-stable (it uses epoll), OpenSSL 1.1.1n  15 Mar 2022
Linked modules: dns64 respip validator iterator

BSD licensed, see LICENSE in source package for details.
Report bugs to<EMAIL_ADDRESS>or https://github.com/NLnetLabs/unbound/issues

https://github.com/NLnetLabs/unbound/blob/master/iterator/iterator.c#L2832 seems to be the reason for this behavior. ENDS_DO is always set

Unbound fetches the RRSIGs and DNSSEC content always, and this is because a downstream client may be a DNSSEC validator. And these would require the signatures to be able to verify the responses. Unbound caches the query with the signatures. This is why unbound sets the DO flag. Also, unbound supports receiving the DNSSEC content if the upstream has this available, in that Unbound can parse and store the information, and possibly usefully for future responses to clients that want this information, so the setting of the flag that enables the upstream to include security information is useful.
This is not so much a burden on the network, the content is useful for security verification of the DNS information, and likely needs to be fetched, at some point, anyway. Unbound was written to act as a validator and support DNSSEC from the start.

Thank you for your answer. I somewhat disagree with the interpretation on the network impact as in our case it is relevant (for now we will use a custom patched build - we are aware of the security properties of DNSSEC but specifically don't want it in our case).
Wouldn't a downstream client set the DO bit itself and unbound could use that when DNSSEC is otherwise disabled within the unbound configuration itself?

Really, is it the use of TCP? The network has trouble with TCP? Or is there trouble with fragments? Is there some problem with the TCP setting or EDNS size settings in the config of Unbound? It is designed to have very minimal packet size, so these troubles should not happen? Also, the network should really be configured so that the, occasional, TCP connection actually works. There is a bunch of documents that advise this, as well.
Also, disabling this makes it impossible for downstream clients to use DNSSEC. And Unbound has these settings to help the deployment of DNSSEC. Making it impossible to get the content, or wait for another roundtrip to fetch the information is making it hard to have DNSSEC verification for the downstream end users. To have this deployment there is a variety of measures considered, also stuff like including DNS records in website certificates, and much more. So I think it would be nice if the feature would remain enabled, as this will facilitate a more secure network for the users of the service.
For this reason, waiting until the downstream client sets a DO flag, to fetch the DNSSEC information, is not the strategy that is coded into Unbound. Unbound fetches the necessary information straight away, paving the possibility for every client to get the DNSSEC information as fast as possible.

We ran into the problem in the context of DNS64.

Unbound is running on the client device; DNSSEC disabled.
Unbound speaks to an upstream resolver doing DNS64.
Since the DO flag is always set, the upstream resolver doesn't synthesize the AAAA records (expecting that the client would just reject it anyway with an even more confusing error)
Network is IPv6-only with NAT64/DNS64, so ... no connectivity.

There is an option, that was added recently, called disable-edns-do: yes that disables EDNS DO from being sent, that could perhaps help. Or get unbound to do the DNS64 synthesis, with "dns64 " prefixed in module-config and the dns64-prefix: 64:ff9b::0/96 option.

Thank you for adding this option! This solves our problem


Table of contents component: text overlaps arrow

In some cases, the text in the ToC overlaps the arrow. There should be a minimum padding between text and arrow to avoid this.

@inesdgomes can you include a link of where this is happening?

@justintemps Yes, sorry. Put it in the description above.


aether: init at 2.0.0-dev.15

The changes in this PR add myself to the maintainer list and the Aether P2P client as a package.
about Aether: https://getaether.net/
Motivation for this change
No package yes. People were asking for it (https://github.com/NixOS/nixpkgs/issues/66414)
Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
21.11 Release Notes (or backporting 21.05 Relase notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Whoever reviews this:
This is my first new package contribution, so I don't expect to have done everything right. I don't mind direct critique. <3

Result of nixpkgs-review pr 130105 at 232ed92c run on x86_64-linux 1

1 package built successfully:

aether

2 suggestions:

warning: missing-phase-hooks
installPhase should probably contain runHook preInstall and runHook postInstall.
Near pkgs/applications/networking/aether/default.nix:50:3:
   |
50 |   installPhase = ''
   |   ^

warning: unclear-gpl
agpl3 is a deprecated license, please check if project uses agpl3Plus or agpl3Only and change meta.license accordingly.
Near pkgs/applications/networking/aether/default.nix:85:5:
   |
85 |     license = licenses.agpl3;
   |     ^

@SuperSandro2000 @roberth How exactly is the merge process going to happen (ie. who pushes the merge button)?
I am asking because I want to address your review comments with single commits (otherwise Github gets confused IIRC) but still squash those into the "package init" commit before in lands on master.

A member can either merge it as it is in the PR or squash merge it for you.
It's preferable for you to squash them yourself and forcepush to the PR.
Just remember that adding yourself as a maintainer and init of the package should be 2 separate commits :)

@roberth @SuperSandro2000 as far as I can tell I addressed the suggestions. I also added some more code because I had to get the app icon from their git repository. I hope the force push did not throw off Github too much (happens some time).
Regarding the license I wrote a request at their bugtracker[1] (My post is still pending moderation).
[1] https://meta.getaether.net/top/all

@roberth @SuperSandro2000 I squashed the package commits together, so from my POV this is ready to merge.
Regarding the strings constant I admit it is a bit pointless as of now, eg. you will find aether-2.0.0-dev.15 aswell as aether-2.0.0-dev15 (dot missing). I think the project does not have some sort of formal release process and as such abstracting would probably be a waste of time right now.
If the Aether project stays alive I assume we will rework this derivation to build from source at some point anyway.

@maxhille I agree.
The build did fail to fetch the archive though. That's hard to test locally because fixed-output derivation outputs are always cached. You can delete the cached paths from your store using
nix-store --delete $(nix-store -q --outputs $(nix-instantiate -A aether.srcs))

If gc fails, you may have to remove gc roots:
nix-store -q --roots $(nix-instantiate -A aether.srcs)

The build did fail to fetch the archive though. That's hard to test locally because fixed-output derivation outputs are always cached. You can delete the cached paths from your store using

Turns out that missing dot was my fault somehow. Fixed now

nix-store --delete $(nix-store -q --outputs $(nix-instantiate -A aether.srcs))

If deletion fails, you may have to remove gc roots:
nix-store -q --roots $(nix-instantiate -A aether.srcs)

Thanks for the pointer.
FYI I had to do nix-store -q --roots $(nix-instantiate -E 'with import <nixpkgs> {}; callPackage ./default.nix {}' -A srcs) otherwise nix-instantiate would fail with error: cannot auto-call a function that has an argument without a default value ('autoPatchelfHook').

Ah that makes sense when run in the aether directory. I assumed to run from the nixpkgs root.

Ah that makes sense when run in the aether directory. I assumed to run from the nixpkgs root.

I guess that also explains why I had to remove the aether qualifier in the attribute.  Never stop learning - thanks for the help, I appreciate it!

I added some formatting suggestions and changed the license to agpl3Only.

@roberth Seem like a check for some inferior, proprietary OS got stuck. Is there something I can do about it?

@roberth Seem like a check for some inferior, proprietary OS got stuck. Is there something I can do about it?

The problem is with our tooling. To be honest, I don't know the exact status of the ofborg x86_64-darwin builders, but I'm pretty sure it's not because of the operating system.
You can ignore the darwin commit status because you didn't package for it and meta.platforms is correct.

some inferior, proprietary OS

Please don't make a fool of yourself.
Also, complacency is a real problem for open source if "it" wants to compete in the OS arena. It's not the root cause though and I won't blame any individual for it.
But hey, let's enjoy ourselves :)

@maxhille Thanks for your persistence here in diligently updating to feedback. It's looking like a great first package.

@SuperSandro2000 Can you revisit the suggestions / changes I made?

Hi all — maintainer of Aether P2P here. I've been out travelling for the past few weeks, so I'm just seeing all this. Great to see this work out.
Let me know if you have any questions and/or requests. Once this is done and working, I'd be happy to add NixOS as officially supported and point it your way.

In a couple of days it should be available on the unstable channel.

I wanted to test this, so using this config I created myself a pkgs.aether-branch:
let fetchWithConfig = src: import (fetchTarball src) { config = config.nixpkgs.config; };
in {
nixpkgs = {
  config = {
    allowUnfree = true;
    packageOverrides = _: {
      unstable = fetchWithConfig "https://github.com/NixOS/nixpkgs/archive/nixos-unstable-small.tar.gz";
      aether-branch = fetchWithConfig "https://github.com/NixOS/nixpkgs/archive/pull/130105/head.tar.gz";
    };
  };
};}

…and then I tried to install pkgs.aether-branch.aether, but I got A definition for option environment.systemPackages.[definition 20-entry 1] is not of type package. Definition values:, and then the message just ends. Is aether the correct package name?

@nehbit is there a link to the dev16 release?


Make unsafe: true the default setting for goldmark(?)

This is opiniated because I haven’t given much thought to the drawbacks yet:
In the forums we have seen many questions about Hugo 0.60.n omitting HTML in markdown files. The reason for this is clear and well documented.
As HTML blocks are allowed both in Markdown and CommonMark I personally think it would be better to use unsafe: true as the default. Otherwise the default behaviour feels kind of non-compliant with CommonMark.

Have you considered the security aspects of your proposal?

Thanks for your time and comment.
I know that this is the reason for your design decision.
Explaining potential security issues and giving the option to use safe mode would be the opposite way. If that is just too dangerous we can close this issue.

Explaining potential security issues and giving the option to use safe mode would be the opposite way.

I have thought about this to some extent. The thing is ...

People do not check the default values unless it breaks something visible
For some pretty HTML table that's no longer there, the above is annoying, I agree.

I understand that the above security example is far fetched, esp. for people in full control over their content files. But the thing is, the average Hugo user does not care about "other Hugo users' security". And the only way to get peoples' attention about this is to have every (sensible) security option turned on by default.
Note that I have plans to add Bluemonday as an option (which may disrupt a little what I said above...), which is a less restrictive HTML sanitizer. But time is of the essence.

Setting unsafe = false will not prevent that.
The option prevents use of HTML in the Markdown content only at the time of the site generation, at the point where the site owner is in complete control.
The malicious injection happens once the site is already deployed.
To prevent such injections, the user should look into proper solutions like Content Security Policy.
The unsafe=false is just a red herring. Truly unsafe things can happen using getJSON that we already have.
I'd vote to set unsafe default to true as well. If user is truly wanting to secure their site, they much switch to https + use CSP.

The option prevents use of HTML in the Markdown content only at the time of the site generation, at the point where the site owner is in complete control.

You are wrong.
I don't have time make this into a ping pong debate, so I'm closing this. But while you are right that the "site owner is in complete control", if that site owner edits content contributed from millions of people on the interweb (via PRs and similar), it's pretty easy to envision that that editor will let some unsafe content slip through and deployed.

It would be nice if you gave a real example of how what I said was untrue.
I don't understand why Hugo needs to be a security-nanny here (when this option just gives a false sense of security) when the Markdown and CommonMark do allow HTML in Markdown.
About your comment about PR's introducing malware, the site owner needs to be educated enough to prevent there. There are no set of "safety variables" that can overcome that.
What if someone PR'd a malicious JS to a Hugo template? Is it Hugo's job to prevent that too?
Bottom line: That option introduces more inconvenience than any security.  There's no real example of malicious code injection (other than a malicious PR .. that too only in Markdown content?) that the current default protects against.

It would be nice if you gave a real example of how what I said was untrue.

I wasn't going to get lured into a debate about this, but as I assume people will read this thread later, I will post a final comment.
For content, variations of this are what the Unsafe=true would allow:
package main

import (
	"bytes"
	"fmt"
	"log"

	"github.com/yuin/goldmark/renderer/html"

	"github.com/yuin/goldmark"
)

func main() {
	unsafeContent := `
<script>
alert("XSS");
</script>
`
	markdown := goldmark.New(
		goldmark.WithRendererOptions(
			html.WithUnsafe(),
		),
	)
	var buf bytes.Buffer
	err := markdown.Convert([]byte(unsafeContent), &buf)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(buf.String())
}

For HTML templates, this is the basic security model: https://golang.org/pkg/html/template/#hdr-Security_Model
Sure, you can get insecure PRs, but it's much easier to audit 10 templates than 10 million content files. You can write the templates yourself and refuse any PR.

So, security is hard and Hugo certainly does not come with an "OWAS guaranteed secure" label for every site we generate. But we at least have a security mindset/model. This is why we use Go's html/template package even if it's painful, this is why Unsecure=false by default, this is why we have a carefully sandboxed and read-only filesystem with symbolic link support only for the main project. To point at some other random area with some potential security risk and argue that that makes every other security remedy useless, that is an argument I'm not buying.
I repeat;
Hugo's security may not be perfect. None are. It's easy enough to turn off those security features if you trust your content/templates/data. But we cannot have them default off.

I am not denying that example code you gave.. you are injecting a script tag..
An astute site owner should spot such when merging PR's.. (who receives million line  PR's for Markdown btw? :)).
What I said is still true though.. the unsafe=false "security" stops once the user generates the site using Hugo.
Once the site is generated, everything is HTML! (This is for all readers, not you)

@kaushalmodi I think we can agree to disagree on this.

@bep Here's another take..
Let's say the user has unsafe=false and that user unknowingly merged a PR with a malicious script tag in the Markdown content.
As expected, that script won't run.
But that malicious script is still in the user's Markdown content!!
What if that unsafe=false is later changed to unsafe=true later for the necessity to allow valid HTML tags like class and div.
The best way is that one just be responsible when merging PR's.
/cc @budparr

The best way is that one just be responsible when merging PR's.

I suggest both.

An astute site owner should spot such when merging PR's.. (who receives million line PR's for Markdown btw? :)).

I have seen full translations of the Lets Encrypt website/docs come in the form a PR. And when it's in some foreign lingo it may be easy to spot some random script deep inside.


Music stops or interrupts after adding more Sonos Speaker to a Group

What version of Music Assistant has the issue?
2.1.0
What version of the Home Assistant Integration have you got installed?
2024.7.1b and befor
Have you tried everything in the Troubleshooting FAQ and reviewed the Open and Closed Issues and Discussions to resolve this yourself?

[X] Yes

The problem
when I start with one Speaker, sonos, it starts and stream. when I add one ore more speaker streaming interrupts. sometimes it doesn´t even start streaming.
I tried the Universal Speaker Group: no difference
How to reproduce
Start streaming with one speaker, adding more,
Music Providers
Apple Music
Player Providers
Sonos
Full log output
music-assistant.log
Additional information
No response
What version of Home Assistant Core are your running
2024.1.0
What type of installation are you running?
Home Assistant OS
On what type of hardware are you running?
Raspberry Pi

There have been major issues since Sonos updated their software. A complete rewrite of the Sonos provider is underway.

Still waiting on the new Sonos provider

Please confirm this has been fixed with the release of the new Sonos provider in 2.2.0 beta 3

hey, in my case, it´s a bit lame to start a new album/playlist/song, but when, it works :) also to remove or add an speaker... which was also a problem... so yeah. for now it´s working well ! thanks for fixing!

update feedback: for me, the adding of an group player won´t work well. The music interrupts or starts very delayed. So I removed my grouped speaker and start with linking them manually.. than working well.

I don’t use Sonos so I don’t understand what the difference is between the “group player” and “linking them manually”

it´s just an pre-selection of speakers...

OK so you are talking about method 1 vs method 2 from here https://music-assistant.io/ui/#grouping-players

yes

OK so can you explain more clearly what happens and in what order. Which Sonos provider are you using? If you were streaming music to some speakers and then add another it is not unreasonable to have a slight interruption as the players are grouped.

it´s happing on both way: starting with an group (already grouped speaker) or after adding an speaker. so I removed the upnp provider to check, if there where interferences....

Still not enough information. Please provide a VERY detailed step by step so I can try and recreate it

sorry to come again: when I start with one speaker, everything works fine... when adding one is ok, when adding two or more, it´s stopping/interrupting with Error 501 as shown or 701 in logfile.
Don´t know, if theres a problem when there is running a sonos client somewhere in the network? On HomeAssistant the AddOn isn´t installed.

music-assistant.log

Again please provide a detailed step by step to recreate

as I said: start with one speaker as player it works fine. When I add one speaker, it will keep playing. But when adding two ore more speaker with the link-button, mark the boxes and apply, the error is shown or not, but the playing starts to interrupt.

You are not understanding what step by step means. How are you selecting the speakers initially? How are you adding the speakers? Is it an automation, or via the player list or via the settings. How are you initiating playback? So I am asking for a cleat bullet point list of what needs to be done to recreate

it´s like I try to explain:
I start with choosing a speaker "Esszimmer"
then I choose an album or playlist from my library.
Doesn´t matter if shuffle or normal playing, playing from a source from a local network folder or from AppleMusic.
With one speaker, everything works fine.
Then I add by checking the box for ONE additional speaker: it´s fine
But with adding two or more, music interrupts after adding and apply.
I tried this also the universal speaker group OR the funktion to pregrouping speaker ( to see in screenshot "!_main" or "!_work")
I think this is the standard routine.

Hello again, it seems, that the latest update from Friday 2.2.3 fixed my problem. I think, that the system is busy, when I add more than 5 speaker as a group. In my system are 11 speaker. When pregrouped more Speakers, it  starts, but some speaker loses connection an the music stops after the actual title playing completly.
so, for now, I can thank you for fixing :)

last row´s from the Log
024-09-09 10:40:58.081 WARNING (MainThread) [music_assistant.sonos] No recent activity and cannot reach Lounge, marking unavailable
2024-09-09 10:41:00.825 WARNING (MainThread) [music_assistant.sonos] No recent activity and cannot reach BÃ¼ro, marking unavailable
2024-09-09 10:41:07.966 INFO (MainThread) [music_assistant.music] Sync task for Filesystem (remote share) completed
2024-09-09 10:41:07.971 INFO (MainThread) [music_assistant.metadata] Starting metadata scanner
2024-09-09 10:41:15.022 INFO (MainThread) [music_assistant.apple_music] No albums found for artist<PHONE_NUMBER>
2024-09-09 10:41:17.017 INFO (MainThread) [music_assistant.apple_music] No top tracks found for artist<PHONE_NUMBER>
2024-09-09 10:46:49.524 WARNING (MainThread) [music_assistant.sonos] No recent activity and cannot reach Schlafzimmer, marking unavailable
2024-09-09 10:52:17.916 INFO (MainThread) [music_assistant.apple_music] No albums found for artist Polarkreis 18
2024-09-09 10:52:21.873 INFO (MainThread) [music_assistant.apple_music] No top tracks found for artist Polarkreis 18
2024-09-09 10:53:17.856 INFO (MainThread) [music_assistant.apple_music] No albums found for artist<PHONE_NUMBER>
2024-09-09 10:53:19.915 INFO (MainThread) [music_assistant.apple_music] No top tracks found for artist<PHONE_NUMBER>
2024-09-09 10:55:02.118 WARNING (MainThread) [music_assistant.sonos] No recent activity and cannot reach Lounge, marking unavailable
2024-09-09 11:20:18.149 INFO (MainThread) [music_assistant.apple_music] No albums found for artist<PHONE_NUMBER>
2024-09-09 11:20:19.984 INFO (MainThread) [music_assistant.apple_music] No top tracks found for artist<PHONE_NUMBER>
2024-09-09 11:21:23.315 INFO (MainThread) [music_assistant.apple_music] No albums found for artist<PHONE_NUMBER>
2024-09-09 11:21:25.251 INFO (MainThread) [music_assistant.apple_music] No top tracks found for artist<PHONE_NUMBER>
2024-09-09 11:21:37.365 WARNING (MainThread) [music_assistant.sonos] Timeout waiting for target groups [[<music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7b99a7b0>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7d730980>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7b99adb0>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7a152b40>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff8eca2c30>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff5bcc7830>]]
2024-09-09 11:22:28.682 ERROR (MainThread) [music_assistant.webserver] Error handling message: players/cmd/sync_many: Error calling SonosPlayer._join on KÃ¼che: UPnP Error 501 received: Action Failed from <IP_ADDRESS>
2024-09-09 11:22:48.044 INFO (MainThread) [music_assistant.apple_music] No albums found for artist<PHONE_NUMBER>
2024-09-09 11:22:50.019 INFO (MainThread) [music_assistant.apple_music] No top tracks found for artist<PHONE_NUMBER>
2024-09-09 11:26:29.921 WARNING (MainThread) [music_assistant.sonos] Timeout waiting for target groups [[<music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7b99a7b0>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7d730980>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7b99adb0>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7a152b40>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff8eca2c30>, <music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff5bcc7830>]]
2024-09-09 11:26:39.092 WARNING (MainThread) [music_assistant.sonos] No recent activity and cannot reach KÃ¼che, marking unavailable
2024-09-09 11:26:54.286 WARNING (MainThread) [music_assistant.sonos] No recent activity and cannot reach Terrasse, marking unavailable

Hey, I just recognized, that some speakers don’t appear in the list, but when linking the speakers by clicking the link button they are listed.
Aaand; I had the problem told above; then deselect aome speakers; then realized, that they still play the music 🤷🏼♂

latest log with some error messages:
music-assistant.log
ConnectionResetError: Connection lost
2024-09-09 17:03:03.849 WARNING (MainThread) [music_assistant.sonos] Fetching track info failed: Error calling SonosPlayer.poll_track_info on BÃ¼ro: HTTPConnectionPool(host='<IP_ADDRESS>', port=1400): Read timed out. (read timeout=9.5)
2024-09-09 17:03:03.862 ERROR (MainThread) [music_assistant.webserver] Error handling message: players/cmd/power: Error calling SonosPlayer._unjoin on Lounge: HTTPConnectionPool(host='<IP_ADDRESS>', port=1400): Max retries exceeded with url: /MediaRenderer/AVTransport/Control (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0xffff7d50c4d0>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=9.5)'))
2024-09-09 17:03:05.543 ERROR (MainThread) [music_assistant.webserver] Error handling message: player_queues/play_pause: UPnP Error 701 received: Transition not available from <IP_ADDRESS>
2024-09-09 17:03:17.605 WARNING (MainThread) [music_assistant.sonos] Timeout waiting for target groups [[<music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7cae0740>]]

latest log with some error messages:
music-assistant.log
ConnectionResetError: Connection lost
2024-09-09 17:03:03.849 WARNING (MainThread) [music_assistant.sonos] Fetching track info failed: Error calling SonosPlayer.poll_track_info on BÃ¼ro: HTTPConnectionPool(host='<IP_ADDRESS>', port=1400): Read timed out. (read timeout=9.5)
2024-09-09 17:03:03.862 ERROR (MainThread) [music_assistant.webserver] Error handling message: players/cmd/power: Error calling SonosPlayer._unjoin on Lounge: HTTPConnectionPool(host='<IP_ADDRESS>', port=1400): Max retries exceeded with url: /MediaRenderer/AVTransport/Control (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0xffff7d50c4d0>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=9.5)'))
2024-09-09 17:03:05.543 ERROR (MainThread) [music_assistant.webserver] Error handling message: player_queues/play_pause: UPnP Error 701 received: Transition not available from <IP_ADDRESS>
2024-09-09 17:03:17.605 WARNING (MainThread) [music_assistant.sonos] Timeout waiting for target groups [[<music_assistant.server.providers.sonos.player.SonosPlayer object at 0xffff7cae0740>]]

On observation: I started this morning a stream via the original Sonos app via ios with 9 speakers grouped and it played well till I stopped via Music Assistant. Then started a playlist with the same grouped speakers and sadly after two titles the interruption started again :(

hey, is there a chance, that this is fixed... the original Sonos APP su*ks more and more so I always try here again, but with more than 4 speaker, it starts with interrupting :(

@hosh0815 you need to be patient

Significant improvments have been made in the beta server for Sonos and groups are currently being rewritten. This will eventually make it to the stable.

ok, I installed the beta... but: I can´t add AppleMusic with message see in screenshot... I added remote fileshare and will test next days. Thank oyu

Yeah sorry the apple music provider fix has not been pushed to the beta yet.

Beta 30 has been released. Confirm this has been fixed

hey hey, seems to work (better) I´m testing further.
AppleMusic now working

Please close if you are satisfied this has been fixed

ok, my "'NoneType' object has no attribute 'split'" Problem seems to be only to appear, when starting music from AppleMusic... Fileshare works...

Someone else has reported the split problem so follow that issue there. https://github.com/music-assistant/hass-music-assistant/issues/3049

Unfortunately, it begins to interrupt again.
Also , when I start to add some speaker to the one I started (or to an already existing group), they suddenly getting unchecked in the selection when I select more speaker.
For log file I get the message "403 unauthorized"

@hosh0815 please don’t add to closed issues. Open a new one with all of the required information


Improve fullQualifiedURL test

This test used to rely on the name of the file that loaded the tests being 'tests.html'.  Now it does not.  I was inspired by yesterday's 'Testing on the Toilet'.

LGTM


Typo

There is a typo in a dialogue box, It should be Cancel not Cansel

#26 should fix it

https://github.com/cyanomiko/dcnnt-android/pull/26 merged.


[better-allauth-logging] Log auth errors

@jgerigmeyer I think that I have a solution.
I'm using a custom adapter so that I can log errors and get them into sentry. But it'll still land on the template that Allauth uses for login errors. So I'm copying that template into the repo, and we can change it to be the same as the index template that renders the React app, possibly with some flag set to say "you had a login error". I am happy to talk about this more if you have questions, I doubt I'm explaining it well.

@jgerigmeyer Before we merge this, I'd love your input on the "don't show the raw allauth error page" approach I suggested, and perhaps to get that change in.

@wlonk That works for me. Should I go ahead and modify the authentication_error.html template?

@jgerigmeyer Please! I think that should do what we need, if you do. Do you want it to be just the same as index.html, or to include an error message variable or something?

@jgerigmeyer 👍


Shell friendly environment files

Both me and a colleague came up against this recently. We had assumed that the --env-file that we passed to docker run would be equivalent format to an environment file that could be sourced in bash.
However, currently it looks like it's just a split on the = ?
https://github.com/docker/docker/blob/master/opts/envfile.go#L26-L27
It would be cool if we could have one file that both bash and Docker could interpret with the same quotes/escaping structure. Anyone got any thoughts?

@duglin could you explain how #8251 makes it easier to solve this issue?
I think --env-file behaves differently from shell. For example:
docker run -e FOO='bar' - the quotes around bar will get eaten up by the shell.
~> docker run -ti --rm -e FOO='bar' fedora:21 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=439722bec399
TERM=xterm
FOO=bar
HOME=/root

The second example gives different results, however the intention is the same.
~> cat myenvfile
FOO='bar'

~> docker run -ti --rm --env-file=myenvfile fedora:21 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=bacdfc97654e
TERM=xterm
FOO='bar'
HOME=/root

The above FOO variable value is quoted, which is totally different from the first example and I think that's an issue.

Sorry if I wasn't clear. What I meant to say is that once #8251 is merged then the code as part of that PR should be available to be reused to support what you're looking for.

This bit my butt recently.. If i have some free time i'll look into the code but i find it abominable that passing values through -e behaves differently than passing them with an env file.

i don't know this feature is  in effect, anyone need it?

ping @icecrime

@xiaods Good catch :+1: Thanks :-)


Add AbortController to eslint globals

Summary

Fix eslint complaining about AbortController not being defined.
Changelog

Test Plan

lgtm, importing to review and land

lgtm, importing to review and land


Composite VPC resource gets updated many times in kube even when no changes.

What happened?
Was digging into an issue on VPC and saw the generation was an outrageously high number
apiVersion: ec2.aws.crossplane.io/v1beta1
kind: VPC
metadata:
  annotations:
    crossplane.io/external-name: vpc-id
  creationTimestamp: "2021-02-19T15:49:02Z"
  finalizers:
  - finalizer.managedresource.crossplane.io
  generateName: c-dev-knfjr-
  generation: 35067

How can we reproduce it?
Create a simple composite with vpc resource and patch a tag in the composition. Go and check the yaml after a few minutes and view the generation.
Need the xrd still but sample composition I was using to debug
apiVersion: apiextensions.crossplane.io/v1beta1
kind: Composition
metadata:
  name: vpc-aws-v1
  labels:
    provider: aws
    platformVersion: v1
spec:
  compositeTypeRef:
    apiVersion: network.example.com/v1alpha1
    kind: CompositeVPC
  writeConnectionSecretsToNamespace: crossplane-system
  resources:
    - base:
        apiVersion: ec2.aws.crossplane.io/v1beta1
        kind: VPC
        spec:
          forProvider:
            tags:
              - key: Name
            cidrBlock: <IP_ADDRESS>/16
            enableDnsSupport: true
            enableDnsHostNames: true
            deletionPolicy: Delete
            region: us-east-2
      patches:
        - fromFieldPath: "spec.providerRef.name"
          toFieldPath: "spec.providerConfigRef.name"
        - fromFieldPath: "metadata.labels[crossplane.io/claim-name]"
          toFieldPath: "spec.forProvider.tags[0].value"

What environment did it happen in?
Crossplane version:
provider-aws: v0.17.0-rc.0.71.gc8b95eb1

Pretty sure this is due to tagger.Initialize function which I'm guessing is just supposed to make sure the tags are in a set order. Was going to add a check before doing kube update and see a few other resources with the same function

replicationgroup
rdsinstance
dynamodbtable
elasticip
repository
eks
fargateprofile
nodegroup
secretsmanager

@enderv this seems like it could be causing the frequent updates. The purpose of the tagger.Initialize method is to add common Crossplane tags to all resources in addition to any defined by the user. I would expect this operation to be a no-op after they have been added the first time, but it is worth investigating if that is actually true. I'm not sure we even need to ensure that they are in a certain order as long as the ExternalTags are present.
/cc @muvaf

@hasheddan thanks for the info! Will see what I can do to make it a no-op if all the ExternalTags are present.

Oops did some more looking this seems to be with composition based resources only. I was looking at the wrong VPC :(
If standalone VPC seems to be fine but composition based one I think is fighting with the crossplane controller, need to do some more digging though.

Alright this was fun. Did some more digging and its because in our composition we patch a tag to get the vpc name to show up correctly in the console. Looks like the main crossplane controller is changing it to what it thinks the patch should be and then aws controller is adding back in external tags...repeat forever. Updated the title and description to match better.
Grabbed snippets of the yaml output just keeps rotating
 spec:
   forProvider:
     cidrBlock: <IP_ADDRESS>/16
     enableDnsHostNames: true
     enableDnsSupport: true
     instanceTenancy: default
     region: us-east-2
     tags:
     - key: Name
       value: test-composite-vpc

spec:
  forProvider:
    cidrBlock: <IP_ADDRESS>/16
    enableDnsHostNames: true
    enableDnsSupport: true
    instanceTenancy: default
    region: us-east-2
    tags:
    - key: Name
      value: test-composite-vpc
    - key: crossplane-kind
      value: vpc.ec2.aws.crossplane.io
    - key: crossplane-name
      value: test-composite-vpc-9r496-sglfx
    - key: crossplane-providerconfig
      value: aws-cloud-dev

Closing as this issue seems to be fixed. Feel free to reopen if it is not the case.


Check well-formedness of data from MarshalCBOR

Closes #482
MarshalerError is returned if CBOR data item returned from MarshalCBOR() fails either:

well-formedness check, or
tag validation for builtin tags 0-3

Many thanks to @benluddy for reporting this bug!  :+1:

@benluddy

Is that something you'd be interested in exploring (in a separate issue) in the future?

Yes, definitely!  :+1:
The current API is meant to be easy for users familiar with encoding and encoding/json packages so it inherits some limitations from their interfaces.
A more efficient and extensible API would definitely be useful as an alternative to Marshaler.  We'd be able to use EncMode, etc. and address various limitations you mentioned.