Roles and Permissions

Closes https://github.com/inventree/InvenTree/pull/1018#issue-497274664
This PR augments the great work done by @eeintech in https://github.com/inventree/InvenTree/pull/1016
The default django permission management system is pretty complex to use, and while the fine-grained permissions control can be useful, we really want a "role" or "ruleset" approach.
This PR adds the RuleSet concept which maps to a particular group. The following table is provided in the admin page for each group:

Each row covers a particular set of database models, and each column determines the permission type for that ruleset.
Future work will be required to actually make use of the per-model permissions

Add particular permission requirements to the DRF API
Add particular permission requirements to various web pages
Add particular permission requirements to the modal forms

(All this is pretty straight forward really)

@eeintech please let me know what you think of this implementation. I think it's pretty clean, but I might have missed something! 👍

So far what I see looks nice, however I don't see the option to dive down to the Model level for managing permissions inside the Admin interface, would be handy to still have the choice to do so, no?

Originally I had thought this was a nice idea, but there is an issue. The new RuleSet approach is pretty "heavy handed" with the permission control - every time you save a group, the permisions all get updated on the group. I couldn't think of a clean way to still allow fine-grained control of the permissions (and this is the antithesis of what we are trying to achieve by simplifying the permissions in the first place).
I think that the new ruleset approach is sufficient. Permissions can also be set individually for users if need be.
What do you think?

Originally I had thought this was a nice idea, but there is an issue. The new RuleSet approach is pretty "heavy handed" with the permission control - every time you save a group, the permisions all get updated on the group. I couldn't think of a clean way to still allow fine-grained control of the permissions (and this is the antithesis of what we are trying to achieve by simplifying the permissions in the first place).
I think that the new ruleset approach is sufficient. Permissions can also be set individually for users if need be.
What do you think?

Umm I see, this would require a way to log individual users overwrites on each permission and add extra logic and complexity... I guess you are right, better abstract this layer completely and move forward with the rulesets.

Umm I see, this would require a way to log individual users overwrites on each permission and add extra logic and complexity... I guess you are right, better abstract this layer completely and move forward with the rulesets.

It's a good start - if in the future we find this approach is not sufficient for some nominal use case, we can always re-address it then...

@eeintech please pull down the latest commit and see if it works for you now

@SchrodingersGat I noticed that update_group_roles is called 3 times upon RoleGroupAdmin is saved... Not quite sure why :thinking:
I was testing your latest changes (with part_partsupplierbreak instead of company) and this is the output when printing the RuleSet (custom) string value and added/deleted permissions:
admin | v: False | a: False | c: False | d: False
part | v: False | a: False | c: False | d: False
stock | v: False | a: False | c: False | d: False
build | v: False | a: False | c: False | d: False
purchase_order | v: False | a: True | c: False | d: False
sales_order | v: False | a: False | c: False | d: False
Adding permission part.add_supplierpricebreak
Error: Could not find permission matching 'part.add_supplierpricebreak'
Removing permission company.add_company
admin | v: False | a: False | c: False | d: False
part | v: False | a: False | c: False | d: False
stock | v: False | a: False | c: False | d: False
build | v: False | a: False | c: False | d: False
purchase_order | v: False | a: True | c: False | d: False
sales_order | v: False | a: False | c: False | d: False
Adding permission company.add_company
Adding permission part.add_supplierpricebreak
Error: Could not find permission matching 'part.add_supplierpricebreak'
admin | v: False | a: False | c: False | d: False
part | v: False | a: False | c: False | d: False
stock | v: False | a: False | c: False | d: False
build | v: False | a: False | c: False | d: False
purchase_order | v: False | a: True | c: False | d: False
sales_order | v: False | a: False | c: False | d: False
Adding permission part.add_supplierpricebreak
Error: Could not find permission matching 'part.add_supplierpricebreak'
Removing permission company.add_company

Does it work better now that part_supplierpricebreak has been changed to company_supplierpricebreak?

Does it work better now that part_supplierpricebreak has been changed to company_supplierpricebreak?

Yes it does 👍

Great! Now we'll need to add some documentation about this great new feature :)


Update Vert.x to 3.9.5

Is your feature request related to a problem? Please describe.
We use Vert.x 3.9.4, please upgrade to 3.9.5.
vertx.stack.version=3.9.4

This can be closed as it was superseeded by https://github.com/Knotx/knotx/issues/520


Feature request: Toggle auto-restart on/off by pressing a key in the console window

Describe the issue
When I stumble upon a HGE I often want to use /restart 0 to farm the mats as fast as possible.  And then when I'm done farming I just manually kill the MinEdLauncher console window before exiting Elite.  The problem is that sometimes I forget to kill the MinEdLauncher console window before quitting Elite for good, so it auto-launches again.
I wish I could always just launch without the /restart flag for the normal case, but then enable it on-the-fly on those occasions that I run across a nice HGE.
Suggestion
It would be much more convenient if MinEdLauncher's console window could simply have prompt that toggles auto-restart on or off.  The console window is just sitting there anyway, it would be nice if I could alt-tab to it and press 'R' to your tool to have it toggle auto-restart on, even though I didn't specify the /restart flag.

Unfortunately, this isn't trivial to implement. The way things work currently is by doing a blocking call to wait for ED to exit. This means another thread or moving launching the ED process to its own task and then doing some synchronization work would be required to read user input.
Certainly not impossible, but I'll likely not get around to it anytime soon (if that wasn't already inferred from my abysmal response time to this issue).

Maybe use a touch file? If it exists auto restart, if not skip?

To flesh out my idea, on startup, check the config, if auto-restart is enabled, make a touch file. When it comes time to restart, check for the file, if it's not there, break out, and clean up the file on close.
This way if you forget to enable it, you can make the file. You don't have to plan ahead when you start the game as to whether or not you want to go through "the expected gameplay mechanics" of a re-log loop to refresh the collectables.

That's an interesting idea. I'll add it to the to-do list.


Do a 0.1 release

so that we have a clearly identifiable downloadable binary to point to from the docs.
we should also think about how to do a changelog/release notes.

Does Pydrofoil have a -v option ? Should the version be tied to a version of SAIL?
Changelog: let's add a single manually-maintained changelog.md, with a heading for each release and bullet point summaries of the changes.

I think the Sail model does not currently have a version unfortunately. Maybe we can embed the git hash somehow? And yes, Pydrofoil needs a -v. I can try to take care of all of that.

Maybe we can make add a list of steps for "how to release" to the docs. Something like that?:

create a git tag
change version in riscv/supportcoderiscv.py to -final
add the release date to the changelog
bump the version in riscv/supportcoderiscv.py to the next number -alpha0
create release on github
add binaries there (built on CI? how does that work?)

This github action seems appropriate for releases. I think tagging a release will always upload the source code of the repo, the action adds more assets. Here is how it is used in cython

I'm deprioritizing this and removing the wp1 milestone.


Play-UI using old language switcher pattern

Services pulling in play-language currently get the old pattern
https://github.com/hmrc/play-language/blob/b5a259d6d68c262b70ac7534899563a7648ba1dc/src/main/scala/views/language_selection.scala.html
This fails WCAG on several criteria
WCAG 3.1.2 Language of Parts
WCAG 2.4.4 Link Purpose (In Context)
WCAG 1.3.1 Info and Relationships
Plat-UI are looking at pulling play-language into the main play-frontend-hmrc and are investigating the possibility of doing the same for play-ui (incorporating the fixes in the process)
https://jira.tools.tax.service.gov.uk/browse/PLATUI-909

Fixed


feat(client): Switch to env variable for API endpoint config

Description of change

Switched to env variable for API endpoint config

Type of change

Breaking change (fix or feature that would cause existing functionality to not work as expected)

Closeing this PR in favour of current solution with env.js file.


Get rid of forked packages

Get rid of forked packages in favour of replacing ffjavascript in webpack config

For now it's not possible to get rid of this packages.
The main issue is related to rlnjs. It's built and contains ffjavascript inside the bundle and it's not possible to get rid of it with module replacement.


Crash in texture_set_data on Iris Pro Graphics 5200 (AppleIntelHD5000Graphics)

Godot version:
3.2.1-stable
OS/device including version:
MacBook Pro (Retina, 15-inch, Mid 2015)
MacBookPro11,4
Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
Iris Pro Graphics 5200
OpenGL ES 3.0 Renderer: Intel Iris Pro OpenGL Engine
Issue description:
Crash while loading textures:
* thread #8, stop reason = EXC_BAD_ACCESS (code=1, address=0x13fe10800)
  * frame #0: 0x00007fff70f959b0 libsystem_platform.dylib`_platform_memmove$VARIANT$Haswell + 176
    frame #1: 0x00007fff2cd9d016 AppleIntelHD5000GraphicsGLDriver`glrWriteTextureData + 5153
    frame #2: 0x00007fff4199532a GLEngine`glCompressedTexImage2D_Exec + 1612
    frame #3: 0x00007fff40cfe100 libGL.dylib`glCompressedTexImage2D + 52
    frame #4: 0x0000000100fbbee6 godot.osx.tools.64`RasterizerStorageGLES3::texture_set_data(this=0x000000010d022410, p_texture=RID @ 0x000070000b18ae10, p_image=0x000000010eeb3430, p_layer=0) at rasterizer_storage_gles3.cpp:919:5
    frame #5: 0x0000000102e0c6c4 godot.osx.tools.64`VisualServerRaster::texture_set_data(this=0x000000010845df50, arg1=RID @ 0x000070000b18ae58, arg2=0x000000010eeb3430, arg3=0) at visual_server_raster.h:147:2
    frame #6: 0x0000000102e62975 godot.osx.tools.64`CommandQueueMT::Command3<VisualServer, void (VisualServer::*)(RID, Ref<Image> const&, int), RID, Ref<Image>, int>::call(this=0x000000010eeb3408) at command_queue_mt.h:301:2
    frame #7: 0x0000000102e61669 godot.osx.tools.64`CommandQueueMT::flush_one(this=0x00000001084aa3f8, p_lock=true) at command_queue_mt.h:426:8
    frame #8: 0x0000000102e4a671 godot.osx.tools.64`CommandQueueMT::wait_and_flush_one(this=0x00000001084aa3f8) at command_queue_mt.h:459:3
    frame #9: 0x0000000102e4a5bb godot.osx.tools.64`VisualServerWrapMT::thread_loop(this=0x00000001084aa2e0) at visual_server_wrap_mt.cpp:72:17
    frame #10: 0x0000000102e4a51d godot.osx.tools.64`VisualServerWrapMT::_thread_callback(_instance=0x00000001084aa2e0) at visual_server_wrap_mt.cpp:57:8
    frame #11: 0x0000000100f78f2f godot.osx.tools.64`ThreadPosix::thread_callback(userdata=0x0000000108461aa0) at thread_posix.cpp:74:2
    frame #12: 0x00007fff70fa4109 libsystem_pthread.dylib`_pthread_start + 148
    frame #13: 0x00007fff70f9fb8b libsystem_pthread.dylib`thread_start + 15

Steps to reproduce:
Import a texture that's 3027x1251 and set the import size limit to 1024 (on a mac with Intel Iris 5200 Graphics?)
Minimal reproduction project:
platformer.zip

f 5
(lldb) fr v
(RasterizerStorageGLES3 *) this = 0x000000010982a410
(RID) p_texture = {
  _data = 0x0000000139358c80
}
(const Ref<Image> &) p_image = 0x0000000111d473b0: {
  reference = 0x0000000132b39cd0
}
(int) p_layer = 0
(RasterizerStorageGLES3::Texture *) texture = 0x0000000139358c80
(GLenum) type = 5121
(GLenum) format = 6408
(GLenum) internal_format = 35919
(bool) compressed = true
(bool) srgb = true
(Image::Format) real_format = FORMAT_DXT5
(Ref<Image>) img = {
  reference = 0x0000000132b39cd0
}
(GLenum) blit_target = 3553
(PoolVector<unsigned char>::Read) read = {
  PoolVector<unsigned char>::Access = {
    alloc = 0x00000001107017f8
    mem = 0x0000000131dc2010 ""
  }
}
(int) mipmaps = 11
(int) w = 1
(int) h = 1
(int) tsize = 572352
(int) i = 10
(int) size = 16
(int) ofs = 572352
(int) bw = 1
(int) bh = 1

(lldb) print **img
(Image) $8 = {
  Resource = {
    Reference = {
      Object = {
        signal_map = {
          hash_table = 0x0000000000000000
          hash_table_power = '\0'
          elements = 0
        }
        connections = {
          _data = 0x0000000000000000
        }
        _lock_index = (count = 1)
        _block_signals = false
        _predelete_ok = 0
        change_receptors = {
          _data = {
            _root = 0x0000000000000000
            _nil = 0x00000001046f35b8
            size_cache = 0
          }
        }
        _instance_id = 3943
        _can_translate = true
        _emitting = false
        _edited = false
        _edited_version = 0
        editor_section_folding = {
          _data = {
            _root = 0x0000000000000000
            _nil = 0x00000001046f35b8
            size_cache = 0
          }
        }
        script_instance = 0x0000000000000000
        script = (data = "")
        metadata = {
          _p = 0x0000000132b39900
        }
        _class_name = {
          _data = 0x0000000000000000
        }
        _class_ptr = 0x0000000132b39e48
        instance_binding_count = 0
        _script_instance_bindings = ([0] = 0x0000000000000000, [1] = 0x0000000000000000, [2] = 0x0000000000000000, [3] = 0x0000000000000000, [4] = 0x0000000000000000, [5] = 0x0000000000000000, [6] = 0x0000000000000000, [7] = 0x0000000000000000)
        _is_queued_for_deletion = false
      }
      _class_name = {
        _data = 0x0000000000000000
      }
      refcount = (count = 2)
      refcount_init = (count = 0)
    }
    _class_name = {
      _data = 0x0000000000000000
    }
    owners = {
      _data = {
        _root = 0x0000000000000000
        _nil = 0x00000001046f35b8
        size_cache = 0
      }
    }
    name = {
      _cowdata = (_ptr = 0x0000000000000000)
    }
    path_cache = {
      _cowdata = (_ptr = 0x0000000000000000)
    }
    subindex = 0
    last_modified_time = 0
    import_last_modified_time = 0
    import_path = {
      _cowdata = (_ptr = 0x0000000000000000)
    }
    local_to_scene = false
    local_scene = 0x0000000000000000
    remapped_list = {
      _root = 0x0000000000000000
      _self = 0x0000000132b39cd0
      _next = 0x0000000000000000
      _prev = 0x0000000000000000
    }
  }
  _class_name = {
    _data = 0x000000010874cc10
  }
  write_lock = {
    PoolVector<unsigned char>::Access = {
      alloc = 0x0000000000000000
      mem = 0x0000000000000000
    }
  }
  format = FORMAT_DXT5
  data = {
    alloc = 0x00000001107017f8
  }
  width = 1024
  height = 417
  mipmaps = true
}

(lldb) print *texture
(RasterizerStorageGLES3::Texture) $5 = {
  RID_Data = (_id = 1404)
  proxy = 0x0000000000000000
  proxy_owners = {
    _data = {
      _root = 0x0000000000000000
      _nil = 0x00000001046f35b8
      size_cache = 0
    }
  }
  path = {
    _cowdata = (_ptr = L"res://.import/ACME Anvils-02.png-2c50f38d6764b285c2910311d9e7daf2.s3tc.stex")
  }
  flags = 23
  width = 1024
  height = 417
  depth = 0
  alloc_width = 1024
  alloc_height = 417
  alloc_depth = 0
  format = FORMAT_DXT5
  type = TEXTURE_TYPE_2D
  target = 3553
  gl_format_cache = 6408
  gl_internal_format_cache = 35919
  gl_type_cache = 5121
  data_size = 572368
  compressed = true
  srgb = true
  total_data_size = 0
  ignore_mipmaps = false
  mipmaps = 1
  is_npot_repeat_mipmap = false
  active = true
  tex_id = 426
  using_srgb = true
  redraw_if_visible = false
  stored_cube_sides = 0
  render_target = 0x0000000000000000
  images = {
    write = {}
    _cowdata = {
      _ptr = 0x0000000132a6dbe0
    }
  }
  detect_3d = 0x0000000000000000
  detect_3d_ud = 0x0000000000000000
  detect_srgb = 0x0000000000000000
  detect_srgb_ud = 0x0000000000000000
  detect_normal = 0x0000000000000000
  detect_normal_ud = 0x0000000000000000
}

seems to happen with this texture specifically?
ACME Anvils-02.zip
The image is 3027x1251 (and the import settings reduce it to 1024x417)
if i resize the image to 3027x1250 it fixes the crash!

It doesn't seem to crash for me on Linux with Intel HD Graphics 630 or AMD Radeon RX Vega M, so I assume it might be specific to macOS OpenGL drivers as shown by the stacktrace.

Yes, every other platform I tried was fine, but I've had 2 reports of this crash on the iris pro 5200 mac model.
Either:
A) it's an off by one/rounding bug in this particular driver (which Apple is unlikely to fix for such an old gpu) or
B) there is something weird with the final mipmap and all the other drivers tolerate it.

I was looking into the function for rasterizing the texture drivers/gles3/rasterizer_storage_gles3.cpp:777 I didn't see a valid flags for your texture 23, not sure if is related

16 + 4 + 2 + 1
Yes, the 16 bit being set is weird, but not sure how it happened.
Also, resizing the image to an even height shouldn't fix the issue if it's caused by corrupted flags.
FLAGS_DEFAULT = 7 — Default flags. Generate mipmaps, repeat, and filter are enabled.
FLAG_MIPMAPS = 1 — Generate mipmaps, which are smaller versions of the same texture to use when zoomed out, keeping the aspect ratio.
FLAG_REPEAT = 2 — Repeats texture (instead of clamp to edge).
FLAG_FILTER = 4 — Magnifying filter, to enable smooth zooming in of the texture.
FLAG_ANISOTROPIC_FILTER = 8 — Anisotropic mipmap filtering. Generates smaller versions of the same texture with different aspect ratios.

Is this still reproducible in the current master branch / recent 4.0 alpha builds?

Unfortunately I no longer have this macbook to test with

Alright, then I think we can close this for now as it will be difficult to debug further.
It might have been fixed either by some Godot improvements around the handling of non power of two textures in recent years, or by potential driver updates/fixes in macOS.
If it's not fixed and someone can still reproduce it and leads here when searching for issues, the detailed debugging some by @jamie-pate should at least help find a workaround, and possibly a fix.


REST API: Community Logo Update after deletion results in 500 IntegrityError

Package version (if known): 12.0.0rc2
Describe the bug
When attempting to upload a logo for a community via the API after deleting an existing logo, a  500 Internal Server Error is returned.
IntegrityError
sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "uidx_communities_files_record_id_key" DETAIL: Key (record_id, key)=(32db299e-b6c0-45d3-96b2-55a9f02c6b88, logo) already exists.

Steps to Reproduce
Using API:

Create a new community POST {{baseURL}}/api/communities
Retrieve the logo (will initially return "No logo exists for this community") GET {{baseURL}}/api/communities/{{community-id}}/logo
Upload a logo for the community:  PUT {{baseURL}}/api/communities/{{community-id}}/logo
Delete the logo: DELETE {{baseURL}}/api/communities/{{community-id}}/logo
Attempt to upload a new logo for the community: PUT {{baseURL}}/api/communities/{{community-id}}/logo
See error

Expected behavior
The new logo should be successfully uploaded after the previous logo is deleted, without returning an error.
I tested it on Zenodo and it worked as expected but not the RC2.
Screenshots (if applicable)
Additional context
After deleting an existing logo, attempting to upload a new logo results in a 500 Internal Server Error. This issue does not occur when uploading a logo for the first time.

get the community by id and from the response links, try to get logo
https://<IP_ADDRESS>:5000/api/communities/611b4ac8-0ec5-4e9a-8c76-384af4f8426d/logo
you get

{
    "status": 403,
    "message": "Permission denied."
}

inspecting DB, communities_files table when deleting the logo, JSON column becomes Null for the community selected. adding an empty dict will show the previous logo image again.

Logs:
response log

sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique
constraint "uidx_communities_files_record_id_key"
DETAIL: Key (record_id, key)=(32db299e-b6c0-45d3-96b2-55a9f02c6b88, logo) already exists.
    [SQL: INSERT INTO communities_files (created, updated, id, json, version_id, key, record_id, object_version_id)
    VALUES (%(created)s, %(updated)s, %(id)s, %(json)s, %(version_id)s, %(key)s, %(record_id)s,
    %(object_version_id)s)]
    [parameters: {'created': datetime.datetime(2024, 6, 10, 15, 36, 57, 893316), 'updated': datetime.datetime(2024,
    6, 10, 15, 36, 57, 893320), 'id': UUID('a345172d-aafe-40a5-a573-11a745d5b5bd'), 'json': '{}', 'version_id': 1,
    'key': 'logo', 'record_id': UUID('32db299e-b6c0-45d3-96b2-55a9f02c6b88'), 'object_version_id': None}]
    (Background on this error at: https://sqlalche.me/e/14/gkpj)
    // Werkzeug Debugger

Traceback (most recent call last):
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
self.dialect.do_execute(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "uidx_communities_files_record_id_key"
DETAIL:  Key (record_id, key)=(32db299e-b6c0-45d3-96b2-55a9f02c6b88, logo) already exists.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask/app.py", line 2552, in call
return self.wsgi_app(environ, start_response)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/werkzeug/middleware/proxy_fix.py", line 187, in call
return self.app(environ, start_response)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/werkzeug/middleware/dispatcher.py", line 78, in call
return app(environ, start_response)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask/app.py", line 2552, in call
return self.wsgi_app(environ, start_response)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/werkzeug/middleware/proxy_fix.py", line 187, in call
return self.app(environ, start_response)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask/app.py", line 2532, in wsgi_app
response = self.handle_exception(e)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask/app.py", line 2529, in wsgi_app
response = self.full_dispatch_request()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask/app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask/app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask/app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask_resources/resources.py", line 65, in view
return view_meth()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask_resources/content_negotiation.py", line 116, in inner_content_negotiation
return f(*args, **kwargs)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask_resources/parsers/decorators.py", line 51, in inner
return f(self, *args, **kwargs)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask_resources/parsers/decorators.py", line 90, in inner
return f(self, *args, **kwargs)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/flask_resources/responses.py", line 39, in inner
res = f(*args, **kwargs)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_communities/communities/resources/resource.py", line 132, in update_logo
item = self.service.update_logo(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_records_resources/services/uow.py", line 376, in inner
res = f(self, *args, **kwargs)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_communities/communities/services/service.py", line 261, in update_logo
record.files["logo"] = stream
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 75, in inner
return func(self, *args, **kwargs)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 504, in setitem
self.create(key, obj=obj, stream=stream, data=data)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 75, in inner
return func(self, *args, **kwargs)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 163, in create
rf = self.file_cls.create({}, key=key, record_id=self.record.id)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/invenio_records/api.py", line 358, in create
db.session.add(record.model)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/util.py", line 237, in exit
self.rollback()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in exit
compat.raise_(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/util.py", line 233, in exit
self.commit()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 832, in commit
self._prepare_impl()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 811, in _prepare_impl
self.session.flush()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3449, in flush
self._flush(objects)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3589, in flush
transaction.rollback(capture_exception=True)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in exit
compat.raise(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 211, in raise
raise exception
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3549, in _flush
flush_context.execute()
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
rec.execute(self)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute
util.preloaded.orm_persistence.save_obj(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 245, in save_obj
_emit_insert_statements(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 1238, in _emit_insert_statements
result = connection._execute_20(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1710, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection
return connection._execute_clauseelement(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement
ret = self._execute_context(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context
self.handle_dbapi_exception(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2134, in handle_dbapi_exception
util.raise(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 211, in raise
raise exception
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
self.dialect.do_execute(
File "/home/samk13/.pyenv/versions/3.9.19/envs/test-install/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "uidx_communities_files_record_id_key"
DETAIL:  Key (record_id, key)=(32db299e-b6c0-45d3-96b2-55a9f02c6b88, logo) already exists.
[SQL: INSERT INTO communities_files (created, updated, id, json, version_id, key, record_id, object_version_id) VALUES (%(created)s, %(updated)s, %(id)s, %(json)s, %(version_id)s, %(key)s, %(record_id)s, %(object_version_id)s)]
[parameters: {'created': datetime.datetime(2024, 6, 10, 15, 36, 57, 893316), 'updated': datetime.datetime(2024, 6, 10, 15, 36, 57, 893320), 'id': UUID('a345172d-aafe-40a5-a573-11a745d5b5bd'), 'json': '{}', 'version_id': 1, 'key': 'logo', 'record_id': UUID('32db299e-b6c0-45d3-96b2-55a9f02c6b88'), 'object_version_id': None}]
(Background on this error at: https://sqlalche.me/e/14/gkpj)

You can also try with the UI:
upload a community picture, delete it, and try to upload it again.

The community logos get reported as corrupted  in the logs, see:
2024-06-13 13:04:26,384: INFO/ForkPoolWorker-5] Task invenio_stats.tasks.aggregate_events[03ba696c-afe8-4d4f-9fae-341a02b0e93d] succeeded in 0.16076873199926922s: [[(0, 0), (0, 0), (0, 0), (0, 0)], None]
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: Files integrity report [2024-06-13 11:04:26]
From<EMAIL_ADDRESS>To<EMAIL_ADDRESS>Date: Thu, 13 Jun 2024 13:04:26 +0200
Message-ID<EMAIL_ADDRESS>

The following files were flagged as 'unhealthy'. This means that the checksum check failed or timed out. Please take any action if needed.

ID: bf4dfb26-41fc-42dd-bfef-28d3ce448009
URI: /home/samk13/.pyenv/versions/3.9.19/envs/kth-rdm-prod-rc2/var/instance/data/bf/4d/fb26-41fc-42dd-bfef-28d3ce448009/data
Name: logo
Created: 2024-06-10 14:44:55.207925
Checksum: md5:d41d8cd98f00b204e9800998ecf8427e
Last check date: 2024-06-13 11:04:26.311230
Last check FAILED with result: None
--------------------------------------------------------------------------------
ID: 95366f3d-fd42-4615-92a1-fc441e2c1d5d
URI: /home/samk13/.pyenv/versions/3.9.19/envs/kth-rdm-prod-rc2/var/instance/data/95/36/6f3d-fd42-4615-92a1-fc441e2c1d5d/data
Name: Screenshot from 2024-06-03 15-33-29.png
Created: 2024-06-05 12:59:19.639676
Checksum: md5:4ce114620c7dfdbcc537c4ed654b9229
Last check date: 2024-06-13 11:04:26.310047
Last check FAILED with result: None
Record: https://<IP_ADDRESS>/records/edcbj-mwq39
--------------------------------------------------------------------------------
ID: a6afc875-4f60-4599-bb3c-cb53b307bb0b
URI: /home/samk13/.pyenv/versions/3.9.19/envs/kth-rdm-prod-rc2/var/instance/data/a6/af/c875-4f60-4599-bb3c-cb53b307bb0b/data
Name: logo
Created: 2024-06-05 12:59:06.697470
Checksum: md5:4ce114620c7dfdbcc537c4ed654b9229
Last check date: 2024-06-13 11:04:26.322995
Last check FAILED with result: None
--------------------------------------------------------------------------------

-------------------------------------------------------------------------------
[2024-06-13 13:04:26,387: INFO/ForkPoolWorker-8] Task invenio_app_rdm.tasks.file_integrity_report[803af6ed-f2f6-4461-b903-85d8ddb2d10e] succeeded in 0.16613979399971868s: None
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.

In our test instance, uploading community logos, deleting, rinsing and repeating, works as expected.

hmm,
I tried in both K8s, and local setup, and in both, they are failing!
Could you try setting up a fresh instance of V12rc2 and try again?

I was able to reproduce it on CERN testing site as well:
https://inveniordm.web.cern.ch/communities/community-test/settings

Update: With a fresh installation of our own instance, I was able to reproduce it as well – although it did take a few tries.
Stack trace:
<IP_ADDRESS> - - [28/Jun/2024 14:43:10] "PUT /api/communities/4138ec8e-caa5-4d49-9f13-4718bc45c11c/logo HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
    self.dialect.do_execute(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "uidx_communities_files_record_id_key"
DETAIL:  Key (record_id, key)=(4138ec8e-caa5-4d49-9f13-4718bc45c11c, logo) already exists.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask/app.py", line 2552, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/werkzeug/middleware/proxy_fix.py", line 187, in __call__
    return self.app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/werkzeug/middleware/dispatcher.py", line 78, in __call__
    return app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask/app.py", line 2552, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/werkzeug/middleware/proxy_fix.py", line 187, in __call__
    return self.app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask/app.py", line 2532, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask_resources/resources.py", line 65, in view
    return view_meth()
           ^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask_resources/content_negotiation.py", line 116, in inner_content_negotiation
    return f(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask_resources/parsers/decorators.py", line 51, in inner
    return f(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask_resources/parsers/decorators.py", line 90, in inner
    return f(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/flask_resources/responses.py", line 39, in inner
    res = f(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_communities/communities/resources/resource.py", line 132, in update_logo
    item = self.service.update_logo(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_records_resources/services/uow.py", line 376, in inner
    res = f(self, *args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_communities/communities/services/service.py", line 261, in update_logo
    record.files["logo"] = stream
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 75, in inner
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 504, in __setitem__
    self.create(key, obj=obj, stream=stream, data=data)
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 75, in inner
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_records_resources/records/systemfields/files/manager.py", line 163, in create
    rf = self.file_cls.create({}, key=key, record_id=self.record.id)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/invenio_records/api.py", line 334, in create
    with db.session.begin_nested():
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/util.py", line 235, in __exit__
    with util.safe_reraise():
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
    raise exception
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/util.py", line 233, in __exit__
    self.commit()
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 832, in commit
    self._prepare_impl()
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 811, in _prepare_impl
    self.session.flush()
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 3449, in flush
    self._flush(objects)
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 3588, in _flush
    with util.safe_reraise():
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
    raise exception
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 3549, in _flush
    flush_context.execute()
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
    rec.execute(self)
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute
    util.preloaded.orm_persistence.save_obj(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 245, in save_obj
    _emit_insert_statements(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 1238, in _emit_insert_statements
    result = connection._execute_20(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1710, in _execute_20
    return meth(self, args_10style, kwargs_10style, execution_options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context
    self._handle_dbapi_exception(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2134, in _handle_dbapi_exception
    util.raise_(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
    raise exception
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
    self.dialect.do_execute(
  File "/home/mmoser/.local/share/virtualenvs/inveniordm-tuw-uTBkUtu1/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "uidx_communities_files_record_id_key"
DETAIL:  Key (record_id, key)=(4138ec8e-caa5-4d49-9f13-4718bc45c11c, logo) already exists.

[SQL: INSERT INTO communities_files (created, updated, id, json, version_id, key, record_id, object_version_id) VALUES (%(created)s, %(updated)s, %(id)s, %(json)s, %(version_id)s, %(key)s, %(record_id)s, %(object_version_id)s)]
[parameters: {'created': datetime.datetime(2024, 6, 28, 12, 43, 10, 381755), 'updated': datetime.datetime(2024, 6, 28, 12, 43, 10, 381760), 'id': UUID('9b5db47f-c160-4dc0-98fb-460c77f174f1'), 'json': '{}', 'version_id': 1, 'key': 'logo', 'record_id': UUID('4138ec8e-caa5-4d49-9f13-4718bc45c11c'), 'object_version_id': None}]
(Background on this error at: https://sqlalche.me/e/14/gkpj)


feat: Making PubSub DI friendly

closes #9238
I will add the docs once we are happy with the IServiceCollection extension methods and IAsyncDisposable implementation.

I may not get to this today - will look tomorrow if not.

Will get back to this on Monday.

I'm happy with the IAsyncDisposable changes now, thanks... but on the DI extension methods front, it's just struck me that it's unclear how the subscriber or publisher would be started in a typical DI environment. (I suspect that SubscriberClient isn't particularly useful as a dependency to pass around, whereas PublisherClient is - but SubscriberClient would be useful in terms of lifecycle management.)
Have you got a sample application you've been testing this with? If so, it would be good to add examples in the docs. That can be in a later PR though, if we're comfortable that the DI extension methods in this PR are useful and sufficient already.

Yes Jon. I plan to add a docs PR as well. I will merge this one but will keep the issue open till the docs PR is merged. Thanks


[SR-12585] Teach update-checkout to fetch Before checkout

Previous ID
SR-12585

Radar
None

Original Reporter
@CodaFi

Type
Improvement

Additional Detail from JIRA

Votes
0

Component/s
Project Infrastructure

Labels
Improvement, StarterBug

Assignee
@shahmishal

Priority
Medium

md5: 62d954ea32ddca197527d4347078fec0

Issue Description:
This PR has the basics down, it just needs some unit tests.
https://github.com/apple/swift/pull/25566

Hi there, I would love to take an additional look at adding the tests to this issue! Let me know if there's anything else I should know :)

Go ahead! I don’t think we’ve had any progress on this since the pull request was closed, so you would have to also finalize those changes besides adding tests.


feat/create utils package

* Please fill in the required items.

Priority*

[ ] High: This PR needs to be merged first for other tasks.
[ ] Middle: This PR should be merged quickly to prevent conflicts due to common changes. (default)
[x] Low: This PR does not affect other tasks, so it can be merged later.

Purpose of the PR*
I want to create utils, like dev-utils which are already exists.
Users will have already predefined module for save them utils functions and types like this example "ValueOf"
Changes*
Create 'utils' package and move "ValueOf" from 'dev-utils' to 'utils'

@Jonghakseo Maybe put this utils inside shared next to hooks ?


Fixed license code validation on 32-bit machines

Recently I mailed @tabacitu about a problem with the validation of a license code I purchased.
Even if the license code was correct, the validation function continued to show the unlicensed software notification on production.
After reading about the functions used in the script, Tabacitu noticed that the problem should have been related to the different value returned by crc32() on a 32-bit OS architecture which my hosting provider uses.
Following the instructions on the documentation page about that function, we figured out that the solution was using a combination of hexdec() and hash() function to simulate the crc32() algorithm.

A new inspection was created.

The inspection completed: No new issues

Excellent! Thank you so much for the patience & help with this @rinodrummer ! I've also added an extra check on top of your PR - let me know if that breaks it for you in any way (it shouldn't, it only uses simple methods).
This will be available with the next patch update, most likely later today.
Cheers!


not working on dash

hey,
this is not working in dash.
with the "+" sign I get a menu with different types of sources.
I can only add it as a github repo, but the ros.org info is not there.
??

Solved with adding it by clicking "+" at Main Docsets


Add link to example repository

Codecov Report

Merging #369 into master will decrease coverage by 1.93%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #369      +/-   ##
==========================================
- Coverage   98.06%   96.13%   -1.94%
==========================================
  Files           7        7
  Lines         259      259
  Branches       42       42
==========================================
- Hits          254      249       -5
- Misses          2        7       +5
  Partials        3        3

Impacted Files
Coverage Δ

src/Session.ts
93.75% <0%> (-5.21%)
:arrow_down:

Continue to review full report at Codecov.

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


The most important change in mankind's history

This may sound dumb, but is from upmost importance. We are presented with a unique opportunity, which is naming a project meh (aka the most awesome word in the whole universe) of course.
But there is still one problem to solve, we need a word starting with the letter H, which fits. Here are some examples we came up with:

Map Export Helper
Map Export Handler
Map Export Huuuiiiii

PS: Of course merging this PR has to go alongside with renaming the repository to the name it's destined to be.

map export häh?

Maybe something a little more extravagant? Map Export Hero 🌈

Maybe something a little more extravagant? Map Export Hero 🌈

👍 perfect combination of highest aspiration and bitter disillusionment. meh hero!


Correlations as a table

Missing functionality
Heatmap as a description of correlation between variables is a great idea, but in some of my usages I prefer to have numerical values in table form.
Proposed feature
Add configuration possibility to show correlation in table form instead of heatmap
I have already coded solution for this issue, take consideration to add this functionality to future release.

Could someone please follow-up to include this feature?

Could someone please follow-up to include this feature?

Supported since version 3.6.0


Support for SliceIO

Hey guys,
A few days ago we talked about support for SliceIO. Is this still a useful addition to the standard lib?
Cheers,
Benoist

We will probably want SliceIO, yes.

I wrote a simple SliceIO in #1603 for specs. What should it be able to do otherwise? I think a constructor with type restriction Enumerable(UInt8) would make sense.

I had to create one for testing purposes as well, but have recently removed it from the library as it wasn't the right place and I didn't need it anymore. You can find my implementation here:
https://github.com/benoist/msgpack-crystal/blob/436ce7aa3ae046b3d7cd1a35b63b079b8c06c3fb/src/slice_io.cr
I don't know how correct this though.

i've created a pr #1608 but i need some help getting the last two specs to pass. I'm clueless to what is happening there...

Given StringIO was renamed to MemoryIO, do we still want this? Related to #1681, we need clearer guidelines on this stuff from the language designers.

Will it work the same as SliceIO would then?

 MemoryIO is growable. @benoist Does this fit your use cases? If so, please close this issue.

Just checked and it does.


Pass the ticked ledger to (re)applyLedgerBlock

For the Byron and Shelley ledgers, the first thing (re)applyLedgerBlock
does, is tick the ledger. Since we already tick the ledger in
applyExtLedgerState (before obtaining a LedgerView from it to pass to
validateHeader) we can simply pass the ticked ledger to
(re)applyLedgerBlock, avoiding the repeated tick.

bors r+

bors r+


How to host multiple sites on the same port?

The example templates show one HTTP site (port 80) and one HTTPS site (port 443). These use separate listeners, directing to separate request routing rules.
This works, but doesn't help me if I'm trying to configure multiple sites on the same port, routed based on Host header (which is what the earlier part of the article says App Gateway supports).

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 32e7a4ca-bf44-675a-189d-addc8284e1ab
Version Independent ID: 37e99fb1-3fbd-727a-468e-fe73b6ca13cb
Content: Hosting multiple sites on Azure Application Gateway
Content Source: articles/application-gateway/multiple-site-overview.md
Service: application-gateway
GitHub Login: @vhorne
Microsoft Alias: amsriva

@TravisCragg-MSFT @vhorne  thank's for link.
But what If i have one backendpool with one VM (IIS) on which is one instance used  2x SSL cert set in Bindings.
Which cert I should assig for AG in Listeners for SSL 443 ? Should I assign these 2x certs what are in IIS, in AG in listeneres with port 443 ?

@JakubW88 we can continue this on #24062

Hello guys, what happens if I have 2 app services using SSL 443. But I can only have a listener over 443. There's any solution for this problem?


Add KHealth server plugin

Adding KHealth plugin.
I was able to run buildRegistry and see my project build. I was unable to get buildTestProject to generate anything.
"No plugins changed or provided for test project generation" appeared in the logs but I wasn't sure exactly how to fix that.
Thanks! 😄

Looks like the test project generation only compares to the main branch so it doesn't work so well with forks.  For now, you can supply the plugins for the generated project like this ./gradlew buildTestProject --args="--plugins=khealth"

Thanks @bjhham!
I applied your feedback in https://github.com/ktorio/ktor-plugin-registry/pull/145/commits/94c72c6b9307e51dc1e16754e947d45fe6b8a2f1.

Looks like the test project generation only compares to the main branch so it doesn't work so well with forks. For now, you can supply the plugins for the generated project like this ./gradlew buildTestProject --args="--plugins=khealth"

I was able to run this command. I noticed this generated a Ktor 3 project but used khealth:2.1.1. This caused the generated project to not work correctly. Manually updating to khealth:3.0.0 fixed the issue. Would you know if this is a misconfiguration on my part somewhere?

@bjhham That worked. Thank you


Add changelog

Because it’s important.

Thanks for the reminder @sapegin, I'll my best next time I release a version.

:+1:


Error scheduling acloguv1m test2-j6rkr-dqex6: failed to find fit for pod: {{ } {test2-j6rkr-dqex6 test2-j6rkr- acloguv1m

Hi,
I meet some performance issue with k8s scheduler, here is the cluster env:

Node1: memory cost 90%
Node2: memory cost 91%
Node3: memory cost 30%

When creating a new pod, the k8s scheduler will judge which node to bind the pod, to my surprise, the scheduler will bind the pod to Node1 or to Node2, why not bind to node3 directly? what the mechanism of k8s scheduler handle the binding? and how to optimize the performance?
I checked the k8s architecture:
The scheduler binds unscheduled pods to nodes via the /binding API. The scheduler is pluggable, and we expect to support multiple cluster schedulers and even user-provided schedulers in the future.
can I bind the pods to nodes myself using /binding API? and can you pls give me some reference of how to support multiple cluster schedulers? and user-provided schedulers.
Thanks very much!

Error scheduling acloguv1m test2-j6rkr-dqex6: failed to find fit for pod: {{ } {test2-j6rkr-dqex6 test2-j6rkr- acloguv1m ：
E0424 22:04:24.465514    1194 factory.go:272] Error scheduling acloguv1m test2-j6rkr-dqex6: failed to find fit for pod: {{ } {test2-j6rkr-dqex6 test2-j6rkr- acloguv1m /api/v1beta3/namespaces/acloguv1m/pods/test2-j6rkr-dqex6 97047a70-ea7a-11e4-89a0-00163e0057bf 2071340 2015-04-24 20:08:16 +0800 CST  map[name:test2-j6rkr] map[]} {[{test2-j6rkr {0xc2089c25d0        }}] [{test2-j6rkr <IP_ADDRESS>:8080/tenxcloud/ubuntu [] []  [{ 0 22 TCP }] [{ROOT_PASS 00000.}] {map[cpu:{0.500 DecimalSI} memory:{536870912.000 BinarySI}] map[]} [{test2-j6rkr false /data}]    /dev/termination-log false IfNotPresent {[] []}}] Always ClusterFirst map[]  false} {Pending []    []}}Node <IP_ADDRESS>: PodFitsResourcesNode <IP_ADDRESS>: PodFitsResourcesNode <IP_ADDRESS>: PodFitsResources; retrying

Hi @davidopp , any idea?

Hi. For your first question, you can take a look at defaultPriorities() in
plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go
which lists the default priority policies (the ones that decide which machine to schedule a pod onto when multiple machines meet the requirements). The default policies are LeastRequestedPriority, BalancedResourceAllocation, and ServiceSpreadingPriority. The scheduler combines the outputs of these three policies to choose a best machine. These policies are implemented in
pkg/scheduler/priorities.go
(Still on your first question.) For your simple scenario, ServiceSpreadingPriority is not relevant. LeastRequestedPriority picks the node that is most empty according to the resource requests -- that is, the node with smallest (Sum(requested cpu) / Capacity + Sum(requested memory) / Capacity) where the Sums are over all the pods currently running on the node. BalancedResourceAllocation favors nodes where the (new pod's requested CPU + Sum(requested cpu))/Capacity and (new pod's requested memory + Sum(requested memory))/Capacity are close, i.e. after placing the new pod you want the fraction of the node's memory that is free to be about equal to the fraction of the node's CPU that is free.
(Still on your first question.) So, there are two possible reasons I can think of why the scheduler didn't pick Node 3 in your example. The most likely is that the "memory cost" values you gave are based on the resource usage of the pods on the machine, not the resource request of the pods on the machine. We have an open issue (#274) to have the scheduler take usage into account, but it doesn't currently. So to know which machine it will pick, you need to look at the resource requests of the already-running pods. Now, if the "memory cost" values you gave are indeed based on the resource requests of the pods, then probably the issue is that the the order of the machines' "fullness" on the memory axis does not match the order of the machines' "fullness" on the CPU axis. (The priority functions we use take both CPU and memory into account, so you have to look at both.)
Now to your second question. We don't have any examples of user-provided schedulers yet, but the API definitely allows it (you found the relevant information; the API endpoint is called /binding.) If you want to write your own scheduler, you'll probably want to start with the one we have and then modify it; check out plugin/cmd/kube-scheduler/app/server.go. But it's unlikely that you really need to write your own scheduler. You can easily add your own scheduling policies. You can just add them to pkg/scheduler/priorities.go (or if you are interested in predicates rather than priorities, pkg/scheduler/predicates.go) and then define your own algorithm provider or use a config file (see the
--algorithm_provider and --policy_config_file command-line arguments in plugin/cmd/kube-scheduler/app/server.go)
For your third question (the error message), it appears that none of the machines have enough free resources for the pod you are trying to schedule (hence the PodFitsResources reason).
I hope this helps.

Ping? Did this help?

it helps, thanks much for your reply.


Slightly improve leader acceptance email

:thumbsup: :heart:
On Fri, Jan 22, 2016 at 10:26 PM, Max Wofford<EMAIL_ADDRESS>wrote:

Merged #482 https://github.com/hackclub/meta/pull/482.
—
Reply to this email directly or view it on GitHub
https://github.com/hackclub/meta/pull/482#event-523706855.

--
Zach Latta
https://zachlatta.com http://zachlatta.com


(Not important!) Update Google Play description

There is alot of Android apps using home assistant in "name" and "company". The play store description should mention this is the official one 🙏

I disagree. We will be nr1 pretty soon when you search for Home Assistant. We use the official logo and will be the first in results.

@balloob sorry if I was unclear. I agree the app soon will be in top, the problem is not the "name" or "company" it self. But the fact that the only thing saying its the official app is the logo and the email address.
In the "description" of the app when you click it the description should tell about the app and that it's the official one. Honestly I would have thought the one from home assistant team was the official one if I didn't knew and was active on github and community forum, which most users won't be. So for them and for avoiding threads seeking help for wrong apps the description inside the app should be more clear and stating its the official one in my opinion 🙏

Good point in putting it in the description. I have updated the short description to

The official app for Home Assistant. Control your home anywhere in the world.

(it's limited to 80 chars)
What do you think ?

I think it sounds very good 👍


The page reloaded when submit after using NgModel ... why?

[*] bug report
[ ] feature request
[ ] question about the decisions made in the repository
The page reloaded when submit after using NgModel ... why?
<select class="form-control" id="masjed" [ngModel]="masjed" [formControl]="masjed"> 				    <option *ngFor="let masjed of masjeds" value="{{ masjed }}" [ngValue]="masjed" [selected]="masjed.id == employee?.masjed">{{ masjed.name }}</option> 			  	</select>

Could you post the whole form, there is no submit in your example.


Expose savedToInbox in the Message domain object.

@orospakr can you confirm we don't need to add the property to parcelable functions?


Automated cherry pick of #5048: fix: google e2不支持本地盘

Cherry pick of #5048 on release/3.1.
#5048: fix: google e2不支持本地盘

Codecov Report

:exclamation: No coverage uploaded for pull request base (release/3.1@1587503). Click here to learn what that means.
The diff coverage is 0%.

@@              Coverage Diff              @@
##             release/3.1   #5049   +/-   ##
=============================================
  Coverage               ?   6.76%
=============================================
  Files                  ?     544
  Lines                  ?   95156
  Branches               ?       0
=============================================
  Hits                   ?    6433
  Misses                 ?   88185
  Partials               ?     538

Flag
Coverage Δ

#aFlag
6.76% <0%> (?)

Impacted Files
Coverage Δ

pkg/compute/guestdrivers/google.go
3.57% <0%> (ø)

Continue to review full report at Codecov.

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

/lgtm

/approve


Add MiniscopeImagingInterface

WIP

The test data on gin has to be fixed because it includes the timestamps for all the frames while the .avi files only have the first 5 frames. I tried to fix it in branch, but the changes are not recognized: https://gin.g-node.org/CatalystNeuro/ophys_testing_data/compare/fix_miniscope...CatalystNeuro:main

The test data on gin has to be fixed because it includes the timestamps for all the frames while the .avi files only have the first 5 frames. I tried to fix it in branch, but the changes are not recognized: https://gin.g-node.org/CatalystNeuro/ophys_testing_data/compare/fix_miniscope...CatalystNeuro:main

This was fixed and is tested in https://github.com/catalystneuro/neuroconv/pull/468/commits/618c5d9f9d55d32a13022fa172410762678f9ffd

@weiglszonja Ready for final review?

@weiglszonja Really good work on this!


301/302 Redirects, FormData files, Cookies, Token authentication

Despite multiple new features, the overall API itself didn't change much. I believe theese changes, if it comes to that, should be released as 4.x.0 and not 5.0.0.
⭐ Added:

Token authentication class, works the same way as Bearer, but with "Token ..." prefix
Added MOVED_PERMANENTLY_301 and FOUND_302 Status objects
Headers got new methods: get_directive() and get_parameter(), add and set
Request.cookies for retrieving and cookies parameter for setting in all Response-like classes
Added docs and example for cookies usage
Added request.form_data.files that uses new Files and File classes for representing files uploaded using multipart/form-data

🪛Fixes:

Added tuple as possible Route.methods parameter type, changed typing from Union to Iterator
EDIT2: Fixed #68 and fixed #69

🛠 Updated/Changed:

Redirect got new preserve_method parameter, which allows it to switch between 301, 302, 307 and 308
Redirect got new status parameter, which allow for manual status code setting
Updated docs and example for Redirect
Debug message after sending response now contains elapsed time of request processing
e.g. <IP_ADDRESS> -- "GET /index.html" 242 -- "200 OK" 154 -- 182ms
Updated docs for FormData
Fixed typing for QueryParams, FormData and Headers, especially in get() and get_list()
EDIT1: Server.serve_forever now accepts poll_interval parameter which adds delay between calling .poll()
EDIT2: Changes in FormData.__init__() for edge cases, e.g. when there is no Content-Type header in POST request
EDIT3: Request.json() can now be accessed in PUT, PATCH and DELETE requests

🏗 Refactor:

Moved _IFieldStorage to interfaces.py, also added _IXSSSafeFieldStorage version of interface that enables encoding HTML entities
Both QueryParams and FormData implement _IXSSSafeFieldStorage
Headers now implements _IFieldStorage and does not store original case of header names, functionally it is the same
Redone parsing multipart/form-data form data
Simplified parsing of request header bytes

I hope I included everything.

@FoamyGuy Thank you for testing and review, I believe the PR is now ready to be merged and released as 4.4.0.
Some time ago there was also an issue about a link in release, seems it was not closed with previous release https://github.com/adafruit/Adafruit_CircuitPython_HTTPServer/issues/65


js change event broken

Hi,
I'm using ratchet with backbone and jquery.
I was using js change event to handle <radio> and <select> HTML elements.
Now they does not work anymore on my phone.
Here is the code:
events: {
        "tap #elem1":      "fn1",
        "change #radio":    "set1",
        "change #selector": "set2",
    },

I'm using cordova and crosswalk so the browser webview is based on chromium 39.
What is the problem?
Thanks

Could you provide more of your code please ? (Your HTML structure, and your JS) Maybe a JSBin

I edited the code

I cannot see where you bind the change event on your JS


Data Format not applying in AngularJS

I have the following:
<input id="dateStart" type="date" data-format="MM/dd/yyyy" value="2015-01-01" ng-model="..." />

I've also tried setting the value attribute in the JavaScript code using
// $scope.dateQuery.startInput looks like YYYY-MM-dd format
document.getElementById('dateStart').setAttribute('value',$scope.dateQuery.startInput);

At any rate, the formatting is not being applied and was curious if this has been noticed. Anything specific that I can provide? I was thinking about wrapping this datepicker in an Angular directive, but wanted to hold off if I'm doing something obviously wrong.
Thanks!

@loganwedwards hi. I believe you just need to trigger change event manually after any change you make. Angular has $watch method, that you can probably use to solve that problem.

@loganwedwards also, if you prefer do it manually, do not update attribute value use property instead:
document.getElementById('dateStart').value = $scope.dateQuery.startInput;

@loganwedwards any update on this?

I apologize that this is way overdue, but after upgrading to 1.5.2, it seems the issue is resolved.
I don't need to trigger any special handlers, setup any watchers, etc... I may have had an old version of this library and or better-dom.
The syntax in the view is now simply:
<input type="date" id="dateStart" name="dateStart" data-format="MM/dd/yyyy" ng-model="dateQuery.start"  />

Sorry for the trouble! Keep up the great work.

@loganwedwards do you have any idea what has changed in Angular 1.5.2? Does it trigger change events by itself after value was updated?

@chemerisuk Clarification, I upgrade better-dateinput-polyfill to 1.5.2.

@loganwedwards ah, yes. alright, cool then


Bump numpy version requirement

NumPy 1.22 was released in December 2021, so we are now past the limit of our deprecation policy.

We need to update the docker image for CI jaxlib builds.

Closing in favor of #22042


Fixed Header for all screen sizes

Issue #286
Made the navbar responsive as it was going out of screen
Before

@Sayak-Bhunia
Kindly merge this PR before closing of GSSOC 🙂

@Sayak-Bhunia

@Sayak-Bhunia
Kindly mrege this PR before GSSOC ends 😌


Allow panel to be added to a subview of the view controller

Allow panel to be added to a subview of the view controller instead of the root view of the vc.
I added an optional containerView parameter to the addPanel func. If set, the panel is added to that containerView instead of viewController.view.
The sample app was updated to showcase the feature, using a containerView that is placed above a toolBar.
This requires iOS 11+ because safeAreaInsets aren't available on the view level in older iOS versions.

Thank you for your PR and contribution😆 I'm glad them 👍
I reviewed your PR and considered wha't is best.
In conclusion, I can't merge it to master because I think it's better to resolve the container issue on the user side.  Instead of this change to this library, you can use a floating panel by defining a view controller for a container view. It's easy and make this library clear and simple.
Here is a patch for the solution sample.
0001-Use-SubviewContainerViewController.patch.tar.gz
And this PR has some problems.

No iOS10 compatibility
A degradation. See this comment https://github.com/SCENEE/FloatingPanel/pull/44/files#diff-ac579b55959a87c187897c9752f87b75R230.

I wouldn't like to drop iOS10 support for now because it's possible.
I hope you would accept my decision.
Finally, I really appreciate your contribution. Thanks again.

OK, managed to construct it manually.
This solution works but unfortunately it has significant consequences regarding the view controller containment structure.
 With your proposed solution, I have to move all "ABC" child view controllers one level deeper as subVCs of the panelContainerVC in order to be able to attach the panel to the root view of the panelContainerVC.
Before:

rootVC

A
B
C
Panel

Panel Content

After:

rootVC

panelContainerVC

A
B
C
Panel

Panel Content

This is certainly doable but it strikes me as odd to move all content VCs one VC level deeper just because I add a panel to the rootVC.

I'm sorry, I can't get the patch to apply cleanly. Can you post a full tarball link or push a branch?

warning: 1 line adds whitespace errors.

By the way, why do you add the floating panel directly to the root VC?
If you would like to display a floating panel on a tool bar, you have a solution without using a container view 😄 I attach additional patch to 0001-Use-SubviewContainerViewController-fix.patch.tar.gz.
0001-Add-floating-panel-directly.patch.tar.gz

Tried to apply the patch using manual edits. It seems to work, only the bottom inset of the content scrollview is not adjusted correctly. Looking at the code, it seems like additionalSafeAreaInsets of the content view controller (or FloatingPanelController) are not respected because the scrollView's contentInset is set manually. Can you advise how to fix the bottom contentInset?

Can you please advise how to apply the patch?

Could you try the following commands?
$ git apply 0001-Use-SubviewContainerViewController-fix.patch
$ # And then
$ git apply 0001-Add-floating-panel-directly.patch

Can you advise how to fix the bottom contentInset?

You can set .never to FloatingPanelController.contentInsetAdjustmentBehavior and set a custom content insets to a scroll view referring to adjustedContentInsets.
By default, contentInsetAdjustmentBehavior is  .always. So a tracking scroll view's content offsets is equal to adjustedContentInsets.
I hope it could help you.


Refs #32355 -- Modernized subprocess.run() calls.

Updated to match changes in recent python versions using pyupgrade's fixers: https://github.com/asottile/pyupgrade/#subprocessrun-replace-universal_newlines-with-text

@adamchainz Thanks :+1:


[Doc] Linf of installation for CDN still refers to 1.0 version

Hello
The installation link for cdn still refers to version 1.0.
It should use the following link instead in order to always have the latest version, because at the moment this leads to confusion. If someone could change that.
https://unpkg.com/tailwindcss/dist/tailwind.min.css

This is intentional so that sites/demos using the CDN don't accidentally break when we tag 2.0 some time in the future. We made this mistake with 0.x and all of the Codepens and stuff that used the versionless CDN URL broke when we released 1.0.


When exporting for iOS, simulator options doesnt appear to run the app

Godot version:
3.2.3-stable
OS/device including version:
iMac 27"
XCode: Version 12.3 (12C33)
OS: Catalina 10.15.7 (19H15)
Issue description:
If i export a project in Godot for iOS, the XCode doesn't let me test on Simulator, but when i make a new project in XCode it appears letting me thinking its a issue of Godot

Steps to reproduce:
Export the Game normally
Minimal reproduction project:
Can be in any project

I don't remember if official iOS export templates contain simulator binaries.

I don't remember if official iOS export templates contain simulator binaries (which are x86 instead of ARM).

They do: https://github.com/godotengine/godot-build-scripts/blob/master/build-ios/build.sh

hey @akien-mga , how can i use this script?
it's needed to run this script always when i export a new project?
i think the older versions of Godot you doesn't need to run this script

Like this video, he was able to run the game on simulator: https://www.youtube.com/watch?v=_huwSZu3XSs&ab_channel=KemoJallow

Strange. Just tested on new Macbook with fresh installed Godot and everything works fine.

Xcode does filter out simulators that might not be supported by application, so maybe that's the actual source of the problem. Can you try downloading additional simulator runtimes, like iOS 13-14 and add them to the simulator list to check if that's the problem?

Hey @naithar , i already did that, but didn't make any difference, PS: This is a new project that i tested the export, and have the same problem

And this is a clean XCode project, as you can see theres options to run on a simulator

I see... well, I can't really tell what's the problem then.
Can you provide the project that you are trying to export? Maybe there is something wrong with project itself that is causing Xcode to exclude simulator runtimes?
Other than that I really have no idea what could be the cause - as you can see new clean Godot project exports perfectly fine.

Here is the project: https://www.mediafire.com/file/shumkwsp41ve0yy/admob.zip/file
This project it's on 3.2.4.beta4 version, but i can easily change for 3.2.3 if you want to
I will try to export a clean project and download the simulators on 13.0 version to see how if works,

I have simulators available in the list.

Well, it actually might be a Xcode caching something that doesn't allow this project on your end to list simulators.
You can try creating new Scheme, if it fixes the issue then it's something in Xcode cache.
You can also try clearing Derived Data folder and restarting Xcode (not sure if restarting Mac is necessary) to clear all cached data.

Same thing on a clean project

Probably it's something about the version of simulator XCode

Let me know if clearing cache works, but it seems like a problem that people face with entirely different project according to stackoverflow.

Didn't work, i including restart the XCode and the Computer, but it's with the same problem, currently i'm trying to download the Simulator 13.0, do you know what version of Simulator do you have installed?

Both 14.0 and 14.3 simulator runtimes is working fine on my end.

Well, i fixed, but i think this is still a issue of Godot with newest versions of XCode because it shouldn't do that
To fix i changed these three datas:
Excluded Architectures -> Debug -> Add: i386

Build Active Architecture only -> Yes

Architectures -> Stantard Architectures

@naithar can you please how are the these configurations of your XCode?

Well, I have default settings:

Also arm7v arch requires your own Godot build as default uses only arm64. And you shouldn't use Build Active Architecture for anything but Debug mode.

True, i deactivate the Build Active Architecture and works, as i'm developing AdMob for iOS i also needed to add one more Arch to Exclude: arm64, due:

Now everything is working.

I still don't know why it only appeared to select the Simulator when I changed these settings and basically my computer configuration is the same as yours, I hope that the Godot team will investigate and adjust this.
As I have solved the problem temporarily i will close the issue. Thank you, all of you.

I've the same problem on an Intel Mac Mini with Godot 3.4.stable. The iOS Simulators don't show up. I can add manualy i386 arm64 to Excluded Architectures, then the iOS Simulators show up, but the build crashes on the Simulator.
Any news/fixes about this Intel iOS Simulator problem? Thanks.

I've the same problem on an Intel Mac Mini with Godot 3.4.stable. The iOS Simulators don't show up. I can add manualy i386 arm64 to Excluded Architectures, then the iOS Simulators show up, and I can compile, but the build crashes on the Simulator.
Any news/fixes about this Intel iOS Simulator problem? Thanks.

Please continue the discussion here: https://github.com/godotengine/godot/issues/55902


Fix setCustomerIds promise chain and tests.

Description
When working on https://github.com/adobe/alloy/pull/239, I was testing whether the error message would be successfully appended with the message about how to suppress errors. I happened to add throw new Error("foo") right before this line inside onBeforeDataCollection in the Identity component. What I discovered is that when using the setCustomerIds command, the promise returned from sync() inside createCustomerIds.js wasn't incorporating the lifecycle promise chain. Because of this, any errors thrown during those asynchronous processes (e.g., lifecycle.onBeforeEvent, lifecycle.onBeforeDataCollection, network.sendRequest) weren't being handled by our global handler. This meant that such errors weren't being properly suppressed by errorsEnabled: false or being given additional context like other errors in Alloy are. It also meant the promise being returned from the command was being resolved before the customer IDs were fully synced with the server.
While I was fixing that, I noticed that some of the tests weren't returning promises when they were supposed to, which meant Jasmine was considering the tests as passed before the promises resolved. Tests were succeeding when really they should have been failing. I fixed those as well.

Related Issue
None

Motivation and Context
Predictable and consistent behavior.

Screenshots (if appropriate):
Types of changes

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

Checklist:

[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[x] All tests pass and I've made any necessary test changes.
[x] I have run the Sandbox successfully.

Awesome PR! Thank you for noticing and fixing.


Test failures

If I check out master (25f1fba), run yarn && yarn test, all of the non-lint tests fail with:
 FAIL  src/hooks/tests/useTable.test.js
  ● Test suite failed to run

    /Users/ggp/dev/git/rt2/configs/tests/setup.common.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import '@testing-library/jest-dom/extend-expect';
                                                                                ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)
          at Array.forEach (<anonymous>)

I've not spent that much time digging into this, but it's been broken for me like this for quite a long time.

Weird. It runs locally for me. I’ll wipe the repo and try again
On Apr 2, 2020, 4:08 PM -0600, Guy Gascoigne-Piggford<EMAIL_ADDRESS>wrote:

If I check out master (25f1fba), run yarn && yarn test, all of the non-lint tests fail with:
FAIL  src/hooks/tests/useTable.test.js
● Test suite failed to run
/Users/ggp/dev/git/rt2/configs/tests/setup.common.js:1
({"Object.":function(module,exports,require,__dirname,__filename,global,jest){import '@testing-library/jest-dom/extend-expect';
                                                                                ^^^^^^

SyntaxError: Cannot use import statement outside a module
 at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17)

 at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)

     at Array.forEach (<anonymous>)

I've not spent that much time digging into this, but it's been broken for me like this for quite a long time.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

also runs locally for me, clean repo(tried on master and on the mentioned commit id), same results, all tests passes successfully.

Hmm, my error was on a fresh clone of the repo too.
What version of node, yarn/npm were you using?  I’m happy to beleive that
it’s some difference in my environment, but so far I’ve not tracked it down.
On Mon, Apr 13, 2020 at 3:53 PM Omri<EMAIL_ADDRESS>wrote:

also runs locally for me, clean repo(tried on master and on the mentioned
commit id), same results, all tests passes successfully.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/tannerlinsley/react-table/issues/2095#issuecomment-613135683,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AACAVVDABVULLMVJ37AM7D3RMOJV5ANCNFSM4L27BI6A
.

node: v12.16.1
yarn: 1.22.4
MacOS  Catalina.

Worked it out.
I had NODE_ENV=development set globally, unset it or set it to test and the tests work.  Interestingly the same thing happens using jest with snowpack, looks like it's a jest issue.


Resolve https://github.com/riscv-non-isa/riscv-brs/issues/118

We can remove the SRST requirement. It doesn't matter how SystemReset is implemented, we're only concerned with it being the only mechanism used by a BRS-I OS.
What about BRS-B? Well it can choose to do whatever, which (most likely) will mean using SRST. A particular BRS-B implementation may impose any number of additional requirements not actually present in the BRS spec.
If we can do this for SRST, why can't we do this for HSM? Because the SBI requirements are effectively the common requirements for BRS-B and BRS-I, and we don't /have/ (or want) another mechanism for hart manipulation.

@atishp04 and @vlsunil, does this sound reasonable to you?


capitalization conventions

@duncandc - With the addition of the group aggregation calculation, it is finally an issue that we need to start using a consistent capitalization convention. The same convention should be adopted in the groups keys and the halos keys.
In particular, under what conditions should a key name contain a capitalized letter? I have been using no capital letters for any halo key, e.g., 'id' denotes the halo ID, and 'vmax' denotes V_{\rm max}.
I know this seems trivial, but this is the sort of that we should decide on now rather than wait until it becomes a bug, because it will become a bug with 100% certainty, and there will be far more code to write in the future than now.

We agreed to always use lowercase, this should now be considered resolved.


Template string instead of function call

It will save some typing, I mean keyboard typing.

For exec and $? Yeah, that's a good idea

I'd want it to support both the existing function call as well as a template string, though

Actually, I changed my mind; I'm not gonna do this, because maintaining two different types of calls makes things complicated, and the ( and ) aren't that big of a deal.

Actually, I changed my mind; I'm not gonna do this, because maintaining two different types of calls makes things complicated, and the ( and ) aren't that big of a deal.


Sunsynk Power Flow Card | 404 Error for repo link

Issue related to
Sunsynk Power Flow Card
Describe the issue/bug
The repo link on this page does not work:
https://kellerza.github.io/sunsynk/examples/lovelace
Expected behavior
Clicking this link should allow for the repo to be installed in HA: https://my.home-assistant.io/redirect/hacs_repository/?repository=sunsynk-power-flow-card&category=plugin&owner=slipx06

It works for me :wink:
You will have to be a lot more specific on what happens when you click it, what browser you are using, etc, else theres no way of helping you


Update request: uv 0.1.24 → 0.1.28

Package name: uv
Latest released version: 0.1.28

Current version on the unstable channel: 0.1.24
Current version on the stable/release channel: None

[x] Checked the nixpkgs pull requests

Notify maintainers

@marsam

Note for maintainers: Please tag this issue in your PR.

Add a :+1: reaction to issues you find important.

I think it requires rustc 1.77 https://github.com/NixOS/nixpkgs/pull/298340


"Failing" with exit code 3010 (ERROR_SUCCESS_REBOOT_REQUIRED)

Brief description of your issue
I ran winget upgrade --all and albeit successful (according to the Visual Studio Installer) the stop for Visual Studio Enterprise 2022 claimed it failed with exit code 3010.
From winerror.h that code has the symbolic name ERROR_SUCCESS_REBOOT_REQUIRED.
//
// MessageId: ERROR_SUCCESS_REBOOT_REQUIRED
//
// MessageText:
//
// The requested operation is successful. Changes will not be effective until the system is rebooted.
//
#define ERROR_SUCCESS_REBOOT_REQUIRED    3010L

It's clear that this code denotes success but carries the additional information that a reboot is required prior to using whatever was installed/upgraded this way.
Steps to reproduce
I have no idea how to reproduce it other than writing a manifest that invokes a fake installer that always exits with code 3010.
Expected behavior
I expected to see a success message, possibly with the note that a reboot is required. This may require a manifest change such as mentioned in a comment to microsoft/winget-cli#994 instead:

microsoft/winget-pkgs#14033 will treat 3010 as success. But we need to ask users to manually reboot their system.

But I don't know. Frankly I think 3010 is a well-known error code. I've seen it so many times already I knew its meaning without looking it up in winerror.h. Perhaps winget should treat this as a special case rather than having to repeat that in every manifest?!
Actual behavior
(1/19) Found Visual Studio Enterprise 2022 [Microsoft.VisualStudio.2022.Enterprise] Version 17.4.1
This application is licensed to you by its owner.
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Downloading https://download.visualstudio.microsoft.com/download/pr/2160190b-bb01-4670-9492-34da461fa0c9/50b533facefd60616d011d3e5093a5485cd13f80d66a9de538372f523f07992f/vs_Enterprise.exe
  ██████████████████████████████  2.03 MB / 2.03 MB
Successfully verified installer hash
Starting package install...
Installer failed with exit code: 3010

Environment
>winget --info
Windows Package Manager v1.3.2691
Copyright (c) Microsoft Corporation. All rights reserved.

Windows: Windows.Desktop v10.0.19044.2251
System Architecture: X64
Package: Microsoft.DesktopAppInstaller v1.18.2691.0

Logs: %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir

Links
---------------------------------------------------------------------------
Privacy Statement   https://aka.ms/winget-privacy
License Agreement   https://aka.ms/winget-license
Third Party Notices https://aka.ms/winget-3rdPartyNotice
Homepage            https://aka.ms/winget
Windows Store Terms https://www.microsoft.com/en-us/storedocs/terms-of-sale

@exoosh It looks like these have all been published.


Bugs and Issues tabs are selected at the same time after the Back button

You're on this issue (it works with any issue, not just bugs)
Click the repository’s Code tab
Go back in the browser (history.back())

Semi-related possible enhancement: the bugs tab should be selected when opening a "bug" issue like this one

And here https://github.com/sindresorhus/refined-github/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc+label%3Abug


Barebones off_details page

Added hrefString, in future will convert get_title to serial ID

new description page shows slightly more information and looks presentable. merging.


Make Send bound optional for AsyncTestContext

AsyncTestContext was originally implemented by using #[async_trait::async_trait]. Unfortunately this forces futures to be Send which sometimes unfeasible.
I've added a separate feature to the create async_send which is on by default. This way by default crate behaves identically to previous version. But if you disable this feature then AsyncTestContext will be created with #[async_trait::async_trait(?Send)] which allows futures to be not Send.
I wasn't able to think about any other mechanism other than feature flag. It would be great if you come up with something and it won't be a breaking change.

Alternatively you can change default feature async_send to non-default feature async_nosend, don't know what would be better.

@funbiscuit what is your use case? I think its reasonable that if you use async code, the data you work must implement Send. Otherwise you could run into weird race conditions

I think the case you mention can be solved by just wrapping your types in an Arc. I will close this PR for now and we can reopen a new issue in the future if this is still relevant.


vertical products

existence of vertical products is stable under reindexing
cartesian lifts of projections + vertical products of pullbacks => lifted products
notation for the above

now need to do gluing example


Remove use of pluralize

This was replaced by a method in Utils, but we don't really need that
here either.
See Homebrew/brew#14778.

TY! These cross-repo tests… 🤕


Add .NET 6 test cases for .NET 6 rules

Related issue
Closes: #420
Description

Update unit tests with .NET 6 test cases
Combine CreateFolderHierarchy action into a single function used by netcoreapp3.1, net5.0, and net6.0 target frameworks
Add temp rules required for unit tests

Supplemental testing
Describe any testing done in addition to existing unit tests
Additional context
Please provide any additional information related to this PR

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Nice catch on the owin checks for .net version, I totally forgot about those in the unit tests. Thanks :-)

only need to update rules accordingly to fix unit tests


Pattern validation not working when using scheme without header

Inspired by nf-core/fetchngs, if I have a schema spec for a samplesheet that doesn't have a header:
{
    "$schema": "http://json-schema.org/draft-07/schema",
    "$id": "https://raw.githubusercontent.com/nf-core/fetchngs/master/assets/schema_input.json",
    "title": "nf-core/fetchngs pipeline - params.input schema",
    "description": "Schema for the file provided with params.input",
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "": {
                "type": "string",
                "pattern": "^(((SR|ER|DR)[APRSX])|(SAM(N|EA|D))|(PRJ(NA|EB|DB))|(GS[EM])|(syn))(\\d+)$",
                "errorMessage": "Please provide a valid SRA, ENA, DDBJ or GEO identifier"
            }
        }
    }
}

And try and use a samplesheet like this:
SRR9984183
asdasd

The validation should fail the pattern match for asdasd but doesn't. If I add a dummy header to the spec and the samplesheet it works.

Hi @drpatelh This seems to be an issue with the validation library. I'm hoping this will be fixed once we swapped the validation library

Ah, thanks for the update! Created https://github.com/nf-core/fetchngs/issues/254 so we don't lose track of this issue.

Hi updating your schema to this in the new version should hopefully fix your issues:
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://raw.githubusercontent.com/nf-core/fetchngs/master/assets/schema_input.json",
    "title": "nf-core/fetchngs pipeline - params.input schema",
    "description": "Schema for the file provided with params.input",
    "type": "array",
    "items": {
        "type": "string",
        "pattern": "^(((SR|ER|DR)[APRSX])|(SAM(N|EA|D))|(PRJ(NA|EB|DB))|(GS[EM])|(syn))(\\d+)$",
        "errorMessage": "Please provide a valid SRA, ENA, DDBJ or GEO identifier"
    }
}