Unable to Import Project - Validation Error

Hi,
I've finally managed to add the ShotGrid addon and get the services to function correctly.
I followed all the steps in the readme, build the docker images but I've run them detached (edited the MakeFile).
The addon fetches from our ShotGrid just fine, it lists the projects correctly but when I go to hit import I get this error:

Then, checking the event log, this is the string of events that happen:

Here's the output of what AYON sees from the project listing (pre-import):

Here's the output of the validation error:
{
  "id": "1cc7f2b83cad11ee84a40242ac120005",
  "hash": "1cc7f2b83cad11ee84a40242ac120005",
  "topic": "log.error",
  "sender": null,
  "project": null,
  "user": null,
  "dependsOn": null,
  "status": "finished",
  "retries": 0,
  "description": "Validation error",
  "summary": {},
  "payload": {
    "message": "Validation error\n1 validation error for Request\npath -> project_name\n  string does not match regex \"^[a-zA-Z0-9_][a-zA-Z0-9_\\.\\-]*[a-zA-Z0-9_]$\" (type=value_error.str.regex; pattern=^[a-zA-Z0-9_][a-zA-Z0-9_\\.\\-]*[a-zA-Z0-9_]$)"
  },
  "createdAt": "2023-08-17T03:21:10.494161+00:00",
  "updatedAt": "2023-08-17T03:21:10.494161+00:00"
}

And here's the output from the ShotGrid Processor docker container

Here's the thing, I get that the projectCode can't have any special characters, spaces etc but it doesn't... though it seems clear to me that the processor is trying to use the full projectName instead.
Which is odd because in the settings for the addon I'm clearly specifying "code":

Which matches the API field name in ShotGrid:

Also, I'm not sure if it's related but this is the error I get in the AYON desktop app when I try to set my ShotGrid username.

I don't quite understand why it says no ShotGrid server has been set in Ayon when it has as proven by the API access in the original post.
I'm also not sure what the error "Missing a field" means

Hi @Minkiu,
Thanks for looking into this, I thought that might be an issue but regardless of if I change the "ShotGrid field for the project code" value to code or name I get the same error.
Between the Project Name (api value: name) or Project Code (api value: code) we have to have one be the long name of the project, with spaces, and the other is an unbroken string of max 5 letters.
That's a requirement we have at our studio and at most studios I've worked at that's been the case also, though, if there's a hard coded requirement in the addon which has to use those fields and has to have that REGEX filter than we can maybe look into keeping the 'name' field blank and making a new custom field for the full project name.
I have another project in ShotGrid which I couldn't show in the screenshots and I can't say about here as it's a major studio show but the Project Name is "XX XXX XXXXX XX XX XXX" and the Project Code is "XXXXX".

Hello again @matteoveglia ,
I will ask in the community post about the name bit, initially when developing this I added it as a constrain so that the project name in ayon was user defined (we could as well do a string conversion, i.e.: Demo: Animation with Cuts -> Demo_Animation_with_Cuts ) and then add the original SG name in the label; another option would be to allow the user to specify the AYON name on the import page, I would like to get more feedback on this before we decide which way to go, but I do agree it's not ideal at the moment!
Regarding the AYON desktop app; I've tested it with my SG instance and it does work, I believe "Missing field" message is when we are trying to check credentials and on of the following is missing:

shotgrid_url: this should be whatever is set in Studio Settings > Shotgrid Sync > Shotgrid server url
script_name: this should be whatever is set in Studio Settings > Shotgrid Sync > Shotgrid Script Name
api_key: this should be whatever is set in Studio Settings > Shotgrid Sync > Shotgrid API Key
username: Whatever you filled in the dialog

I will make a more verbose error so it's easier to debug instead of "Missing field", and we can try debug it better.

Hello @matteoveglia , have you had time to test this again after the latest addon release?
Is this still happening?

Hi @Minkiu,
Sorry for the delay, super busy on this end.
Alrighty, so, some wins and some unsures.
WINS:

For the AYON desktop app, I now have no connection issues back to the ShotGrid instance even if I click "Check ShotGrid Login". I get an affirmative response that the desktop app (which I assume means the server) can speak to my ShotGrid instance.
Running any service with make dev SERVICE=the service, gives me no errors now. It connects to AYON, logs in as "sgapi" with a key and seems to check every 10 seconds per the addon settings.

UNSURES:

The only way I can get the services to run is by running them with make dev.
If I use the Services tab in AYON to spawn them the container is spawned and instantly exited, I can't seem to find a way to check the logs for them as they spawn and exit too quick.
So, the only way I can get them to run is by creating a duplicate of the make dev command but with -d (detach) on the docker run command.
With that, I can still populate a full list of the projects from the ShotGrid instance.
However... I can't see the containers with "docker containers ls" at all, so I can't quit them... without nuking my docker install. I think this is because they run with the "ayon_user" user but that user doesn't exist... all very odd.

ISSUES:

A big one is not being able to spawn them with Services in AYON. Maybe the spawn method doesn't make the services read the .env file I made in each service folder?
e.g. ayon-shotgrid/services/processor/.env
Here's the big one, so I can get all three services to run, I can get a list to populate correctly but I still cannot get the addon to create a new project from one on ShotGrid.

For example, here's the populated list (with the top project redacted for security):

Both the redacted project and the DemoAnim one should match the regex rules now, no spaces or special chars.
So, I click ShotGrid -> AYON on one of them and get:

As expected.
... but that's it, nothing happens.

This is all with a brand new debian VM install, fresh AYON, fresh AYON-ShotGrid 0.2.0

Hi @Minkiu,
Sorry for the delay, super busy on this end.
Alrighty, so, some wins and some unsures.
WINS:

For the AYON desktop app, I now have no connection issues back to the ShotGrid instance even if I click "Check ShotGrid Login". I get an affirmative response that the desktop app (which I assume means the server) can speak to my ShotGrid instance.
Running any service with make dev SERVICE=the service, gives me no errors now. It connects to AYON, logs in as "sgapi" with a key and seems to check every 10 seconds per the addon settings.

UNSURES:

The only way I can get the services to run is by running them with make dev.
If I use the Services tab in AYON to spawn them the container is spawned and instantly exited, I can't seem to find a way to check the logs for them as they spawn and exit too quick.
So, the only way I can get them to run is by creating a duplicate of the make dev command but with -d (detach) on the docker run command.
With that, I can still populate a full list of the projects from the ShotGrid instance.
However... I can't see the containers with "docker containers ls" at all, so I can't quit them... without nuking my docker install. I think this is because they run with the "ayon_user" user but that user doesn't exist... all very odd.

ISSUES:

A big one is not being able to spawn them with Services in AYON. Maybe the spawn method doesn't make the services read the .env file I made in each service folder?
e.g. ayon-shotgrid/services/processor/.env
Here's the big one, so I can get all three services to run, I can get a list to populate correctly but I still cannot get the addon to create a new project from one on ShotGrid.
For example, here's the populated list (with the top project redacted for security):

Both the redacted project and the DemoAnim one should match the regex rules now, no spaces or special chars.

So, I click ShotGrid -> AYON on one of them and get:

As expected.
... but that's it, nothing happens.
This is all with a brand new debian VM install, fresh AYON, fresh AYON-ShotGrid 0.2.0

Hey @Minkiu
Diving back into this today to keep testing, I feel like I'm just completely missing something here but I can't work out what I'm doing wrong.
I have AYON and the ShotGrid addon clean installed on a clean Debian install in a VM, not an LXC container, but it feels like i keep hitting a brick wall.
So I saw you bumped the SG addon to 0.2.4 so I thought it was worth trying out again as I have a little time today.
I installed the latest AYON docker container (and also added a worker to the compose), added the SG addon from the bootstrap setup and put in all the API keys etc that have worked in the past.
I then git cloned this repo, built all three services and I noticed the bootstrap SG addon is still 0.2.0 so I manually created a 0.2.4 package, uploaded it, installed it and restarted the server.
Compared to 0.2.0 it also looks like you have secrets implemented now which is great so I re-input all the settings.
So now, I can successfully spawn all three services from the AYON dashboard which is excellent.
Going to the addon tab I can also populate all the shows/projects from my SG instance (note, I have made the show code and name one word).
However, as with before, the event spawns and nothing happens.
I did notice though that the leecher service spits out an error suggesting it can't connect to the AYON instance which doesn't make sense to me if the processor can.
Here's a log from the Processor service:
ccyvr@AYONSRV:~/ayon-docker$ sudo docker logs -f --tail=300 aysvc_shotgridprocessor 2023-10-19 22:11:32 INFO       Initializing the Shotgrid Processor. Connecting to server "http://<IP_ADDRESS>:5000"
And here's one from the Leecher:
`Connecting to server "http://<IP_ADDRESS>:5000"
2023-10-19 22:11:36 INFO       Initializing the Shotgrid Listener.
2023-10-19 22:11:36 DEBUG      Callback method is <bound method ShotgridListener.send_shotgrid_event_to_ayon of <leecher.listener.ShotgridListener object at 0x7f682436b150>>.
2023-10-19 22:13:47 ERROR      Unable to get Addon settings from the server.
2023-10-19 22:13:47 ERROR      HTTPConnectionPool(host='<IP_ADDRESS>', port=5000): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f6821f4d610>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=None)'))
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 203, in _new_conn
    sock = connection.create_connection(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/urllib3/util/connection.py", line 85, in create_connection
    raise err
  File "/usr/local/lib/python3.11/site-packages/urllib3/util/connection.py", line 73, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Operation timed out

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

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/urllib3/connectionpool.py", line 791, in urlopen
    response = self._make_request(
               ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/urllib3/connectionpool.py", line 497, in _make_request
    conn.request(
  File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 395, in request
    self.endheaders()
  File "/usr/local/lib/python3.11/http/client.py", line 1281, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/local/lib/python3.11/http/client.py", line 1041, in _send_output
    self.send(msg)
  File "/usr/local/lib/python3.11/http/client.py", line 979, in send
    self.connect()
  File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 243, in connect
    self.sock = self._new_conn()
                ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 212, in _new_conn
    raise ConnectTimeoutError(
urllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f6821f4d610>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=None)')

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

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/requests/adapters.py", line 486, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/urllib3/connectionpool.py", line 845, in urlopen
    retries = retries.increment(
              ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/urllib3/util/retry.py", line 515, in increment
    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='<IP_ADDRESS>', port=5000): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f6821f4d610>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=None)'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/service/leecher/listener.py", line 67, in __init__
    ayon_api.init_service()
  File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 196, in init_service
    ServiceContext.init_service(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 184, in init_service
    con = GlobalContext.get_server_api_connection()
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 127, in get_server_api_connection
    cls.create_connection()
  File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 121, in create_connection
    cls._connection = GlobalServerAPI(*args, **kwargs)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 51, in __init__
    self.validate_server_availability()
  File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 789, in validate_server_availability
    if not self.is_server_available:
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 771, in is_server_available
    response = requests.get(
               ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/requests/api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/requests/adapters.py", line 507, in send
    raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='<IP_ADDRESS>', port=5000): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f6821f4d610>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=None)'))

Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 203, in _new_conn
sock = connection.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/urllib3/util/connection.py", line 85, in create_connection
raise err
File "/usr/local/lib/python3.11/site-packages/urllib3/util/connection.py", line 73, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Operation timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/urllib3/connectionpool.py", line 791, in urlopen
response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/urllib3/connectionpool.py", line 497, in _make_request
conn.request(
File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 395, in request
self.endheaders()
File "/usr/local/lib/python3.11/http/client.py", line 1281, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.11/http/client.py", line 1041, in _send_output
self.send(msg)
File "/usr/local/lib/python3.11/http/client.py", line 979, in send
self.connect()
File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 243, in connect
self.sock = self._new_conn()
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/urllib3/connection.py", line 212, in _new_conn
raise ConnectTimeoutError(
urllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f6821f4d610>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=None)')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/urllib3/connectionpool.py", line 845, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/urllib3/util/retry.py", line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='<IP_ADDRESS>', port=5000): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f6821f4d610>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=None)'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/service/leecher/main.py", line 7, in
shotgird_listener = ShotgridListener()
^^^^^^^^^^^^^^^^^^
File "/service/leecher/listener.py", line 86, in init
raise e
File "/service/leecher/listener.py", line 67, in init
ayon_api.init_service()
File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 196, in init_service
ServiceContext.init_service(*args, **kwargs)
File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 184, in init_service
con = GlobalContext.get_server_api_connection()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 127, in get_server_api_connection
cls.create_connection()
File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 121, in create_connection
cls._connection = GlobalServerAPI(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 51, in init
self.validate_server_availability()
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 789, in validate_server_availability
if not self.is_server_available:
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 771, in is_server_available
response = requests.get(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/adapters.py", line 507, in send
raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='<IP_ADDRESS>', port=5000): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f6821f4d610>, 'Connection to <IP_ADDRESS> timed out. (connect timeout=None)'))`
Both the AYON server and worker are both on the same docker network, the IP address shown is the internal IP of the AYON server as the documentation states you can't use localhost

Hey, good to hear you got it almost there!
Something that might be worth trying is:
docker run -ti -u root ynput/ayon-shotgrid-leecher:0.2.4 /bin/sh -c "ping <IP_ADDRESS>"
To see if that host is actually reachable from within the container,

as the documentation states you can't use localhost

Is this a docker specific thing? I use http://localhost:5000 but don't run it via ash (yet).

Okay, I think we have movement!
So, I tried the ping and it didn't work, which doesn't make sense to me as all my other docker projects can communicate cross-network just fine.
For reference - the AYON containers are all running on the ayon-docker_default network but for some reason the processor, leecher and transmitter all run in the "bridge" default docker network.
But then, some success, I changed the AYON_SERVER_URL to the IP address of my VM, essentially the same IP:PORT that I use to access the AYON web ui and finally it all works, before I was using the internal docker IP address because at the time that was the only thing that was working... unsure what changed.
This has allowed me to grab all the project names (as I could before) but I now get projects created in AYON, though for some reason that's all I get. No shots, assets, tasks etc.
One of the two projects weirdly did manage to grab one sequence and 6 shots from ShotGrid but that's it.
However, new issues.
Issue 1:
2023-10-27 16:49:17 ERROR      anonymous       [GET] /users/me: Access token is missing
2023-10-27 16:49:17 INFO       server          Loading default Settings for shotgrid addon.

These two lines are repeated over and over in the AYON server log.
Issue 2:
2023-10-27 23:29:57 INFO       Waiting 10 seconds...
2023-10-27 23:30:07 INFO       Querying for new `shotgrid.event` events...
2023-10-27 23:30:07 INFO       Running the Handler <module 'sync_projects'>
2023-10-27 23:30:07 ERROR      Unable to process handler sync_projects
2023-10-27 23:30:07 ERROR      Your server version '0.4.6+2309271040' does not support update of  field on event. The fields are supported since server version '0.5'.

    Traceback (most recent call last):
      File "/service/processor/processor.py", line 155, in start_processing
        ayon_api.update_event(
      File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 514, in update_event
        return con.update_event(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 1380, in update_event
        raise ValueError((
    ValueError: Your server version '0.4.6+2309271040' does not support update of  field on event. The fields are supported since server version '0.5'.

This error appears now (and repeats) in both the leecher and transmitter container logs

Nice!

but for some reason the processor, leecher and transmitter all run in the "bridge" default docker network.
Are you spinning them separately or via an ash worker?

Some things to do next then, do docker-compose pull on the main docker-compose to get the latest server, that should take care of both issues, I do get the access token missing from time to time, but unsure if its Shotgrid addon or something on the server, regardless i can normally operate it accordingly. The issue 2 is cause I update the event in the event viewer with "progress" text, such as "Processing event X..."
Cheers.

Allllrighty, I feel like we're so close!
So, to confirm, this is the populated list from our ShotGrid:

When I run ShotGrid -> AYON strangely it creates both projects in AYON but only 'runs' the one I selected.
However, the project only has the name, no scenes/shots/tasks etc and this is the event log with an odd validation error

And this is the output of the Processor service:
2023-10-30 18:52:50 INFO       No event of origin `shotgrid.event` is pending.
2023-10-30 18:53:00 INFO       Querying for new `shotgrid.event` events...
2023-10-30 18:53:00 INFO       Running the Handler <module 'sync_projects'>
Connecting to server "http://<IP_ADDRESS>:5000"
Logged in as user "service"
2023-10-30 18:53:01 DEBUG      Succesfully connected to Shotgrid.
2023-10-30 18:53:01 INFO       Project BLINK <BLINK> already exist in AYON.
2023-10-30 18:53:02 INFO       Project BLINK (BLK) <122> already exist in Shotgrid.
2023-10-30 18:53:02 INFO       Project BLINK (BLK) already exists in AYON.
2023-10-30 18:53:02 DEBUG      Shotgrid field Project > sg_ayon_id exists.
2023-10-30 18:53:02 DEBUG      Shotgrid field Project > sg_ayon_project_code exists.
2023-10-30 18:53:02 DEBUG      Shotgrid field Project > sg_ayon_auto_sync exists.
2023-10-30 18:53:02 DEBUG      Shotgrid field Project > sg_ayon_server_url exists.
2023-10-30 18:53:02 DEBUG      Shotgrid field Project > sg_ayon_id exists.
2023-10-30 18:53:03 DEBUG      Shotgrid field Project > sg_ayon_sync_status exists.
2023-10-30 18:53:03 DEBUG      Shotgrid field Episode > sg_ayon_id exists.
2023-10-30 18:53:03 DEBUG      Shotgrid field Episode > sg_ayon_sync_status exists.
2023-10-30 18:53:03 DEBUG      Shotgrid field Sequence > sg_ayon_id exists.
2023-10-30 18:53:03 DEBUG      Shotgrid field Sequence > sg_ayon_sync_status exists.
2023-10-30 18:53:03 DEBUG      Shotgrid field Shot > sg_ayon_id exists.
2023-10-30 18:53:04 DEBUG      Shotgrid field Shot > sg_ayon_sync_status exists.
2023-10-30 18:53:04 DEBUG      Shotgrid field Asset > sg_ayon_id exists.
2023-10-30 18:53:04 DEBUG      Shotgrid field Asset > sg_ayon_sync_status exists.
2023-10-30 18:53:04 DEBUG      Shotgrid field Version > sg_ayon_id exists.
2023-10-30 18:53:04 DEBUG      Shotgrid field Version > sg_ayon_sync_status exists.
2023-10-30 18:53:04 DEBUG      Shotgrid field Task > sg_ayon_id exists.
2023-10-30 18:53:04 DEBUG      Shotgrid field Task > sg_ayon_sync_status exists.
2023-10-30 18:53:05 INFO       Project BLINK (BLK) already exists in SG.
2023-10-30 18:53:05 DEBUG      Project {'type': 'Project', 'id': 122, 'tracking_settings': {'navchains': {'Asset': 'Asset.sg_asset_type', 'Shot': 'Shot.sg_scene,Scene.sg_sequence', 'Cut': 'Cut.entity', 'CutItem': 'CutItem.cut.entity', 'Delivery': '__flat__', 'Scene': 'Scene.sg_sequence', 'Task': 'entity'}, 'default_task_template': {}}} enabled entities: [('Sequence', 'project'), ('Shot', 'sg_scene,Scene.sg_sequence'), ('Asset', 'sg_asset_type'), ('Version', 'entity'), ('Task', 'entity')]
2023-10-30 18:53:05 DEBUG      Shotgrid Statuses: [('act', 'Active'), ('apr', 'Approved'), ('cbb', 'CBB'), ('clsd', 'Closed'), ('cmpt', 'Complete'), ('dis', 'Disabled'), ('fin', 'Final'), ('hld', 'On Hold'), ('ip', 'In Progress'), ('na', 'N/A'), ('omt', 'Omit'), ('opn', 'Open'), ('rdy', 'Ready to Start'), ('res', 'Resolved'), ('rev', 'Pend. Review'), ('wtg', 'Waiting to Start'), ('vwd', 'Viewed'), ('recd', 'Received'), ('dlvr', 'Delivered'), ('cfrm', 'Confirmed'), ('pndng', 'Pending'), ('bid', 'Bidding'), ('awd', 'Awarded'), ('to', 'Turned Over'), ('dwn', 'Download'), ('fomt', 'Final OMIT'), ('fptc', 'Final Pend. TC'), ('hnd', 'Handoff'), ('kbk', 'Kickback'), ('pfrev', 'Pend. Final Review'), ('ptcrev', 'Pend. TC Review'), ('pub', 'Published'), ('snd', 'Sent'), ('pawd', 'Partial Award'), ('pcrev', 'Pend. Client Review'), ('iap', 'Int. Approved'), ('tciap', 'TC Int. Approved'), ('tckbk', 'TC Kickback'), ('bnk', 'Banked'), ('ihld', 'Int. Hold'), ('blank', 'BLANK')]
2023-10-30 18:53:05 DEBUG      Project {'type': 'Project', 'id': 122, 'tracking_settings': {'navchains': {'Asset': 'Asset.sg_asset_type', 'Shot': 'Shot.sg_scene,Scene.sg_sequence', 'Cut': 'Cut.entity', 'CutItem': 'CutItem.cut.entity', 'Delivery': '__flat__', 'Scene': 'Scene.sg_sequence', 'Task': 'entity'}, 'default_task_template': {}}} enabled entities: [('Sequence', 'project'), ('Shot', 'sg_scene,Scene.sg_sequence'), ('Asset', 'sg_asset_type'), ('Version', 'entity'), ('Task', 'entity')]
2023-10-30 18:53:06 DEBUG      Shotgrid Tasks: [('Layout', 'lay'), ('Art', 'art'), ('Paint', 'pnt'), ('Graphics', 'gfx'), ('FX', 'fx'), ('Environments', 'env'), ('CFX', 'cfx'), ('Version Zero', 'vzed'), ('Plate', 'plt'), ('Rig', 'rig'), ('Character FX', 'cfx'), ('Texture', 'txt'), ('Roto', 'rto'), ('DMP', 'dmp'), ('Comp', 'cmp'), ('Matchmove', 'mm'), ('Design', 'dsn'), ('Generalist', 'gen'), ('Animation', 'anm'), ('Model', 'mdl'), ('Light', 'lgt'), ('Lookdev', 'ldv')]
2023-10-30 18:53:06 DEBUG      Project {'type': 'Project', 'id': 122, 'tracking_settings': {'navchains': {'Asset': 'Asset.sg_asset_type', 'Shot': 'Shot.sg_scene,Scene.sg_sequence', 'Cut': 'Cut.entity', 'CutItem': 'CutItem.cut.entity', 'Delivery': '__flat__', 'Scene': 'Scene.sg_sequence', 'Task': 'entity'}, 'default_task_template': {}}} enabled entities: [('Sequence', 'project'), ('Shot', 'sg_scene,Scene.sg_sequence'), ('Asset', 'sg_asset_type'), ('Version', 'entity'), ('Task', 'entity')]
2023-10-30 18:53:06 ERROR      Unable to process handler sync_projects
2023-10-30 18:53:06 ERROR      'sg_scene,Scene.sg_sequence'

    Traceback (most recent call last):
      File "/service/processor/processor.py", line 160, in start_processing
        handler.process_event(
      File "/service/processor/handlers/sync_projects.py", line 37, in process_event
        hub.syncronize_projects(
      File "/service/ayon_shotgrid_hub/__init__.py", line 292, in syncronize_projects
        match_shotgrid_hierarchy_in_ayon(
      File "/service/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py", line 29, in match_shotgrid_hierarchy_in_ayon
        sg_entities_by_id, sg_entities_by_parent_id = get_sg_entities(
                                                      ^^^^^^^^^^^^^^^^
      File "/service/utils.py", line 350, in get_sg_entities
        if parent_field != "project" and entity[parent_field] and entity_name != "Asset":
                                         ~~~~~~^^^^^^^^^^^^^^
    KeyError: 'sg_scene,Scene.sg_sequence'

2023-10-30 18:53:06 ERROR      400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/8c6f4cbe775511eeaa620242ac140004

    Traceback (most recent call last):
      File "/service/processor/processor.py", line 160, in start_processing
        handler.process_event(
      File "/service/processor/handlers/sync_projects.py", line 37, in process_event
        hub.syncronize_projects(
      File "/service/ayon_shotgrid_hub/__init__.py", line 292, in syncronize_projects
        match_shotgrid_hierarchy_in_ayon(
      File "/service/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py", line 29, in match_shotgrid_hierarchy_in_ayon
        sg_entities_by_id, sg_entities_by_parent_id = get_sg_entities(
                                                      ^^^^^^^^^^^^^^^^
      File "/service/utils.py", line 350, in get_sg_entities
        if parent_field != "project" and entity[parent_field] and entity_name != "Asset":
                                         ~~~~~~^^^^^^^^^^^^^^
    KeyError: 'sg_scene,Scene.sg_sequence'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 180, in raise_for_status
        self._response.raise_for_status()
      File "/usr/local/lib/python3.11/site-packages/requests/models.py", line 1021, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/8c6f4cbe775511eeaa620242ac140004

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/service/processor/processor.py", line 170, in start_processing
        ayon_api.update_event(
      File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 514, in update_event
        return con.update_event(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 1390, in update_event
        response.raise_for_status()
      File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 184, in raise_for_status
        raise HTTPRequestError(message, exc.response)
    ayon_api.exceptions.HTTPRequestError: 400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/8c6f4cbe775511eeaa620242ac140004

2023-10-30 18:53:06 INFO       Waiting 10 seconds...
2023-10-30 18:53:16 INFO       Querying for new `shotgrid.event` events...

The Leecher service I won't show as it's uneventful, looks like it's working perfectly fine now and pulling event log changes from ShotGrid.
For reference, when I run ShotGrid -> AYON on the DemoAnim project it seems to work correctly (no validation error):

However, whilst it brought all the correct tasks into the DemoAnim project (maybe this is by design) it didn't seem to bring the Cut In or Cut Out info from the default ShotGrid fields

vs ShotGrid

Some more info I found interesting, I randomly found the AYON created Project-level fields (pretty cool) and this is what they have populated after the sync

Hey,

And this is the output of the Processor service:
By the logs, I can tell you are using "Scenes" ? Are these SG native or custom? And these are probably added into the Project > Tracking Settings, right? If so, then its normal that we can't process them since the integration does not know about them, will add them.

it didn't seem to bring the Cut In or Cut Out
At this stage, most of the parameters aren't being synchronized, so it's "expected behaviour", wanted to get into a poitn where people can tell me which are must haves, and then maybe put others behind settings.

For the containers/IPs, are you using ASH for spawning the services?
I was doing a bit of work on ASH yesterday, and experienced similar stuff that I couldn't connect to the backend even they were in the same network, but it was because the service spawned by ash wasn't being added to the network, that will be fixed in a newer version of ash.

Hi,
Thanks for the speedy reply, really appreciate it.

By the logs, I can tell you are using "Scenes" ? Are these SG native or custom?
And these are probably added into the Project > Tracking Settings, right?

Yeah confirming that we're using the native Scenes entity in SG, that's indeed added in Tracking Settings.
The use of Scenes for us is entirely dependent on the project/client as it depends on if that client is using Sequences, Scenes or both so we'd likely need the flexibility to form a hierarchy with that in mind.
Also bearing in mind that the order of Scene > Sequence or Sequence > Scene is also flexible, it should really be fixed (Scene > Sequence) but try telling clients that!

At this stage, most of the parameters aren't being synchronized, so it's "expected behaviour", wanted to get into a poitn where people can tell me which are must haves, and then maybe put others behind settings.

Gotcha, that's all good it's better for me to know what's meant to be syncronised so I can manually import data and assume it won't be overwritten.
In general, I'm happy to work with you on what the standard 'set' of Seq/Scn/Shot/Task/Version fields are in the VFX space.
That being said, just as you mentioned putting others behind settings, would it maybe be a good idea to just put all of it behind settings so the studio can custom map field to field? Assuming the data type is equal.

https://excalidraw.com/#room=f4296cdbc2d04f7c1b06,5-4T1vZhIYoF4k-IWau4BA

For the containers/IPs, are you using ASH for spawning the services?
I am indeed, that's the expected behaviour (I assumed) so I wanted to make sure I could get them working that way.
However, the issue you're having where services aren't being added to the same Docker network is exactly what I had in this comment:
https://github.com/ynput/ayon-shotgrid/issues/22#issuecomment-1783626230

The solution for me was to change the AYON SERVER URL in the Worker docker compose file to the 'external' (Machine) IP of the VM I have the Docker container running on as neither a direct Docker IP nor Docker DNS resolve would work.

@Minkiu - Quick addition, I just did a new AYON server pull and I saw you updated the SG integration to 0.2.8 so I updated to that but I still get the Scene validation error:
2023-11-02 16:53:04 ERROR      Unable to process handler sync_projects
2023-11-02 16:53:04 ERROR      'sg_scene,Scene.sg_sequence'

Traceback (most recent call last):
File "/service/processor/processor.py", line 160, in start_processing
handler.process_event(
File "/service/processor/handlers/sync_projects.py", line 37, in process_event
hub.syncronize_projects(
File "/service/ayon_shotgrid_hub/__init__.py", line 292, in syncronize_projects
match_shotgrid_hierarchy_in_ayon(
File "/service/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py", line 29, in match_shotgrid_hierarchy_in_ayon
sg_entities_by_id, sg_entities_by_parent_id = get_sg_entities(
^^^^^^^^^^^^^^^^
File "/service/utils.py", line 350, in get_sg_entities
if parent_field != "project" and entity[parent_field] and entity_name != "Asset":
~~~~~~^^^^^^^^^^^^^^

@matteoveglia thanks for the quick feedback, do you mind sharing your tracking settings for sequences and scenes? I tired on my simple one and it did work, so I might be missing something.

Absolutely, no problem, here are Scenes (child of Seq):

And here are Sequences:

The redacted entities are custom and not a concern

Hey, I've got around trying this again, I matched your hierarchy, and it does seem to work on my end, could you share, when running the sync, any of the debug log that is like so? It might not happen, since its around where the error you get is:
Project {'type': 'Project', 'id': 328, 'tracking_settings': {'navchains': {'Asset': 'Asset.sg_asset_type', 'Shot': 'Shot.sg_scene', 'Cut': 'Cut.entity', 'CutItem': 'CutItem.cut.entity', 'Scene': 'Scene.sg_sequence', 'Episode': '__flat__', 'Task': 'entity'}}} enabled entities: [('Episode', 'project'), ('Sequence', 'project'), ('Scene', 'sg_sequence'), ('Shot', 'sg_scene'), ('Asset', 'sg_asset_type'), ('Version', 'entity'), ('Task', 'entity')]

By looking at the error, I see that in your instance "scene" seem to be sg_scene ?  'sg_scene,Scene.sg_sequence'
The way I enabled Scenes is by going into Shotgrid > Site Preferences > Entities > Scene - And ticked "Yes, use Scene" is that the same way you got them? Or are they defined as Custom Entities?
Also, my Shotgrid reports the following version: v<IP_ADDRESS>35 (build 4e47445) not that it matter (?) but curious as to which one you got.
Last but not least, how are you running the service? Via ASH or terminal, in any case, if its ASH you'd probably have to re-create the service for it to pick up the 0.2.8 docker images, since updating the add-on is not enough (doubt its this, but worth mentioning).

Hey @Minkiu
Very strange, I mean that's good that you got it working but odd still.
I don't think the ShotGrid version would change anything, unless there was a major API change but that would have been announced. Though, to confirm, I am on the same version and build.
I can also confirm that I am indeed running the latest service Docker images (0.2.8), I always remove the service (in ASH), delete the image and run a new service - overkill but during testing I want to be sure.

For the Scene entity, I too am using the built-in entity type:

Here's a full log cycle from the worker from the moment the sync process is run till the first wait line:
2023-11-06 18:53:04 INFO       Running the Handler <module 'sync_projects'>
Connecting to server "http://<IP_ADDRESS>:5000"
Logged in as user "service"
2023-11-06 18:53:04 DEBUG      Succesfully connected to Shotgrid.
2023-11-06 18:53:05 INFO       Querying for new `entity` events on projects: DemoAnimation
2023-11-06 18:53:05 INFO       No event of origin `entity.*` is pending.
2023-11-06 18:53:05 INFO       Project BLINK <BLINK> already exist in AYON.
2023-11-06 18:53:05 INFO       Project BLINK (BLK) <122> already exist in Shotgrid.
2023-11-06 18:53:05 INFO       Project BLINK (BLK) already exists in AYON.
2023-11-06 18:53:06 DEBUG      Shotgrid field Project > sg_ayon_id exists.
2023-11-06 18:53:06 DEBUG      Shotgrid field Project > sg_ayon_project_code exists.
2023-11-06 18:53:06 DEBUG      Shotgrid field Project > sg_ayon_auto_sync exists.
2023-11-06 18:53:06 DEBUG      Shotgrid field Project > sg_ayon_server_url exists.
2023-11-06 18:53:06 DEBUG      Shotgrid field Project > sg_ayon_id exists.
2023-11-06 18:53:06 DEBUG      Shotgrid field Project > sg_ayon_sync_status exists.
2023-11-06 18:53:07 INFO       Querying for new `entity` events on projects: DemoAnimation
2023-11-06 18:53:07 INFO       No event of origin `entity.*` is pending.
2023-11-06 18:53:07 DEBUG      Shotgrid field Episode > sg_ayon_id exists.
2023-11-06 18:53:07 DEBUG      Shotgrid field Episode > sg_ayon_sync_status exists.
2023-11-06 18:53:07 DEBUG      Shotgrid field Sequence > sg_ayon_id exists.
2023-11-06 18:53:07 DEBUG      Shotgrid field Sequence > sg_ayon_sync_status exists.
2023-11-06 18:53:07 DEBUG      Shotgrid field Scene > sg_ayon_id exists.
2023-11-06 18:53:07 DEBUG      Shotgrid field Scene > sg_ayon_sync_status exists.
2023-11-06 18:53:08 DEBUG      Shotgrid field Shot > sg_ayon_id exists.
2023-11-06 18:53:08 DEBUG      Shotgrid field Shot > sg_ayon_sync_status exists.
2023-11-06 18:53:08 INFO       Querying for new `entity` events on projects: DemoAnimation
2023-11-06 18:53:08 INFO       No event of origin `entity.*` is pending.
2023-11-06 18:53:08 DEBUG      Shotgrid field Asset > sg_ayon_id exists.
2023-11-06 18:53:08 DEBUG      Shotgrid field Asset > sg_ayon_sync_status exists.
2023-11-06 18:53:08 DEBUG      Shotgrid field Version > sg_ayon_id exists.
2023-11-06 18:53:09 DEBUG      Shotgrid field Version > sg_ayon_sync_status exists.
2023-11-06 18:53:09 DEBUG      Shotgrid field Task > sg_ayon_id exists.
2023-11-06 18:53:09 DEBUG      Shotgrid field Task > sg_ayon_sync_status exists.
2023-11-06 18:53:09 INFO       Project BLINK (BLK) already exists in SG.
2023-11-06 18:53:09 DEBUG      Project {'type': 'Project', 'id': 122, 'tracking_settings': {'navchains': {'Asset': 'Asset.sg_asset_type', 'Shot': 'Shot.sg_scene,Scene.sg_sequence', 'Cut': 'Cut.entity', 'CutItem': 'CutItem.cut.entity', 'Delivery': '__flat__', 'Scene': 'Scene.sg_sequence', 'Task': 'entity'}, 'default_task_template': {}}} enabled entities: [('Sequence', 'project'), ('Scene', 'sg_sequence'), ('Shot', 'sg_scene,Scene.sg_sequence'), ('Asset', 'sg_asset_type'), ('Version', 'entity'), ('Task', 'entity')]
2023-11-06 18:53:10 DEBUG      Shotgrid Statuses: [('act', 'Active'), ('apr', 'Approved'), ('cbb', 'CBB'), ('clsd', 'Closed'), ('cmpt', 'Complete'), ('dis', 'Disabled'), ('fin', 'Final'), ('hld', 'On Hold'), ('ip', 'In Progress'), ('na', 'N/A'), ('omt', 'Omit'), ('opn', 'Open'), ('rdy', 'Ready to Start'), ('res', 'Resolved'), ('rev', 'Pend. Review'), ('wtg', 'Waiting to Start'), ('vwd', 'Viewed'), ('recd', 'Received'), ('dlvr', 'Delivered'), ('cfrm', 'Confirmed'), ('pndng', 'Pending'), ('bid', 'Bidding'), ('awd', 'Awarded'), ('to', 'Turned Over'), ('dwn', 'Download'), ('fomt', 'Final OMIT'), ('fptc', 'Final Pend. TC'), ('hnd', 'Handoff'), ('kbk', 'Kickback'), ('pfrev', 'Pend. Final Review'), ('ptcrev', 'Pend. TC Review'), ('pub', 'Published'), ('snd', 'Sent'), ('pawd', 'Partial Award'), ('pcrev', 'Pend. Client Review'), ('iap', 'Int. Approved'), ('tciap', 'TC Int. Approved'), ('tckbk', 'TC Kickback'), ('bnk', 'Banked'), ('ihld', 'Int. Hold'), ('blank', 'BLANK'), ('ntd', 'Noted')]
2023-11-06 18:53:10 INFO       Querying for new `entity` events on projects: DemoAnimation
2023-11-06 18:53:10 INFO       No event of origin `entity.*` is pending.
2023-11-06 18:53:10 DEBUG      Project {'type': 'Project', 'id': 122, 'tracking_settings': {'navchains': {'Asset': 'Asset.sg_asset_type', 'Shot': 'Shot.sg_scene,Scene.sg_sequence', 'Cut': 'Cut.entity', 'CutItem': 'CutItem.cut.entity', 'Delivery': '__flat__', 'Scene': 'Scene.sg_sequence', 'Task': 'entity'}, 'default_task_template': {}}} enabled entities: [('Sequence', 'project'), ('Scene', 'sg_sequence'), ('Shot', 'sg_scene,Scene.sg_sequence'), ('Asset', 'sg_asset_type'), ('Version', 'entity'), ('Task', 'entity')]
2023-11-06 18:53:10 DEBUG      Shotgrid Tasks: [('Layout', 'lay'), ('FX', 'fx'), ('Roto', 'rto'), ('Lookdev', 'ldv'), ('Version Zero', 'vzed'), ('Paint', 'pnt'), ('Rig', 'rig'), ('CFX', 'cfx'), ('Comp', 'cmp'), ('Model', 'mdl'), ('Art', 'art'), ('Plate', 'plt'), ('Graphics', 'gfx'), ('DMP', 'dmp'), ('Matchmove', 'mm'), ('Design', 'dsn'), ('Generalist', 'gen'), ('Environments', 'env'), ('Texture', 'txt'), ('Character FX', 'cfx'), ('Animation', 'anm'), ('Light', 'lgt')]
2023-11-06 18:53:11 DEBUG      Project {'type': 'Project', 'id': 122, 'tracking_settings': {'navchains': {'Asset': 'Asset.sg_asset_type', 'Shot': 'Shot.sg_scene,Scene.sg_sequence', 'Cut': 'Cut.entity', 'CutItem': 'CutItem.cut.entity', 'Delivery': '__flat__', 'Scene': 'Scene.sg_sequence', 'Task': 'entity'}, 'default_task_template': {}}} enabled entities: [('Sequence', 'project'), ('Scene', 'sg_sequence'), ('Shot', 'sg_scene,Scene.sg_sequence'), ('Asset', 'sg_asset_type'), ('Version', 'entity'), ('Task', 'entity')]
2023-11-06 18:53:11 INFO       Querying for new `entity` events on projects: DemoAnimation
2023-11-06 18:53:11 INFO       No event of origin `entity.*` is pending.
2023-11-06 18:53:11 ERROR      Unable to process handler sync_projects
2023-11-06 18:53:11 ERROR      'sg_scene,Scene.sg_sequence'

Traceback (most recent call last):
File "/service/processor/processor.py", line 160, in start_processing
handler.process_event(
File "/service/processor/handlers/sync_projects.py", line 37, in process_event
hub.syncronize_projects(
File "/service/ayon_shotgrid_hub/__init__.py", line 292, in syncronize_projects
match_shotgrid_hierarchy_in_ayon(
File "/service/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py", line 29, in match_shotgrid_hierarchy_in_ayon
sg_entities_by_id, sg_entities_by_parent_id = get_sg_entities(
^^^^^^^^^^^^^^^^
File "/service/utils.py", line 350, in get_sg_entities
if parent_field != "project" and entity[parent_field] and entity_name != "Asset":
~~~~~~^^^^^^^^^^^^^^
KeyError: 'sg_scene,Scene.sg_sequence'

2023-11-06 18:53:11 ERROR      400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/b77e93ee7cd511eeb3cf0242ac160004

Traceback (most recent call last):
File "/service/processor/processor.py", line 160, in start_processing
handler.process_event(
File "/service/processor/handlers/sync_projects.py", line 37, in process_event
hub.syncronize_projects(
File "/service/ayon_shotgrid_hub/__init__.py", line 292, in syncronize_projects
match_shotgrid_hierarchy_in_ayon(
File "/service/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py", line 29, in match_shotgrid_hierarchy_in_ayon
sg_entities_by_id, sg_entities_by_parent_id = get_sg_entities(
^^^^^^^^^^^^^^^^
File "/service/utils.py", line 350, in get_sg_entities
if parent_field != "project" and entity[parent_field] and entity_name != "Asset":
~~~~~~^^^^^^^^^^^^^^
KeyError: 'sg_scene,Scene.sg_sequence'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 185, in raise_for_status
self._response.raise_for_status()
File "/usr/local/lib/python3.11/site-packages/requests/models.py", line 1021, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/b77e93ee7cd511eeb3cf0242ac160004

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/service/processor/processor.py", line 170, in start_processing
ayon_api.update_event(
File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 514, in update_event
return con.update_event(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 1395, in update_event
response.raise_for_status()
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 189, in raise_for_status
raise HTTPRequestError(message, exc.response)
ayon_api.exceptions.HTTPRequestError: 400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/b77e93ee7cd511eeb3cf0242ac160004

2023-11-06 18:53:11 INFO       Waiting 10 seconds...

Hey @matteoveglia thanks for these! I couldn't figure out where the problem might be in my code so was grasping for straws 😅
So I think the issue is in how I process the tracking settings to infer the parent field of an entity; in your instance for Shots can have either a scene or a sequence as a parent, right?
This is whats tripping it:
'Shot': 'Shot.sg_scene,Scene.sg_sequence',
Could you share the tracking settings dict you get from the API if possible? Or the settings for Shots?
Thanks again!

If there's a command I can run along with my access token I'm more than happy to, else I can go digging in the python API this weekend

Sure thing, I was on the phone and couldn't copy paste it, here it is:
import shotgun_api3
sg = shotgun_api3.Shotgun(
	<your_url>,
	script_name=<your_script_name>,
	api_key=<your_api_key>
)
sg_project = sg.find_one("Project", filters=[["id", "is", 122]], fields=["tracking_settings"]) # used the ID from the log above
tracking_settings = sg_project["tracking_settings"]

Thanks !

Oh nice thank you, I had my python env going and was working out how to grab that dict myself.
I put that in and printed the value of tracking_setting:
{'default_task_template': {},
 'navchains': {'Asset': 'Asset.sg_asset_type',
               'Cut': 'Cut.entity',
               'CutItem': 'CutItem.cut.entity',
               'Delivery': '__flat__',
               'Scene': 'Scene.sg_sequence',
               'Shot': 'Shot.sg_scene,Scene.sg_sequence'}}

So I have tried a few more things tonight (I also realise that this ticket has wildly gone off scope).
I tried making a Project in AYON, that doesn't exist in ShotGrid, to see if maybe that would yield any different results.
Before doing this, I made a new default project anatomy, the only change was the work directory and I matched all the task long/short names to the Pipeline Steps in ShotGrid.
Making a new "Library" project in AYON, I set it to the new anatomy and did nothing more.
Hitting AYON > ShotGrid it did indeed make a new project in ShotGrid but I saw a few validation errors in Events and this is the log output
Connecting to server "http://<IP_ADDRESS>:5000"
Logged in as user "service"
2023-11-07 06:15:15 DEBUG      Succesfully connected to Shotgrid.
2023-11-07 06:15:16 INFO       Project Library <Library> already exist in AYON.
2023-11-07 06:15:17 INFO       Project Library (LIB) <155> already exist in Shotgrid.
2023-11-07 06:15:17 ERROR      Unable to process handler shotgrid_event
2023-11-07 06:15:17 ERROR      'ProjectEntity' object has no attribute 'label'

Traceback (most recent call last):
File "/service/processor/processor.py", line 160, in start_processing
handler.process_event(
File "/service/processor/handlers/shotgrid_event.py", line 43, in process_event
hub.react_to_shotgrid_event(sg_payload["meta"])
File "/service/ayon_shotgrid_hub/__init__.py", line 329, in react_to_shotgrid_event
update_ayon_entity_from_sg_event(
File "/service/ayon_shotgrid_hub/update_from_shotgrid.py", line 210, in update_ayon_en                                                 tity_from_sg_event
if ay_entity.label != sg_entity_dict["label"]:
^^^^^^^^^^^^^^^
AttributeError: 'ProjectEntity' object has no attribute 'label'

2023-11-07 06:15:17 ERROR      400 Client Error: Bad Request for url: http://172.21.12                                                 1.38:5000/api/events/0452299c7d3511eea6ee0242ac160004

Not sure what "label" is and what it wants to do with that.
Interestingly also, compared to DemoAnimation, this is the only project which has the (internal) IP address added to AYON Server URL

Lastly, whilst we're here, within this Library project I managed to make an Asset + Tasks in ShotGrid which all synced back to AYON perfectly (woohoo!).
So I went to the traypublisher tool, grabbed a 10 second .mp4 of Big Buck Bunny and went to publish it as a Render type.
The publish went through perfectly and I saw it run ffmpeg to extract a reviewable from the .mp4, however, in ShotGrid I see no uploaded media nor path under the "Path To [...]" fields; also no Ayon ID or Sync Status?

Hey @matteoveglia I just released a new version (0.2.9) , could you take it for a spin? If it fixes the main issue let's close this one and open others accordingly :D

Hey @Minkiu
Oh man we are getting closer!
So, this time it synced the whole show over, scenes, shots, assets, asset types buuuuut it won't sync tasks.
Here's one of the MANY exception errors I got:

2023-11-10 17:45:11 ERROR      400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/9085df407ff011eea35b0242ac160004

Traceback (most recent call last):
File "/service/processor/processor.py", line 161, in start_processing
handler.process_event(
File "/service/processor/handlers/sync_projects.py", line 39, in process_event
hub.syncronize_projects(
File "/service/ayon_shotgrid_hub/__init__.py", line 292, in syncronize_projects
match_shotgrid_hierarchy_in_ayon(
File "/service/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py", line 136, in match_shotgrid_hierarchy_in_ayon
entity_hub.commit_changes()
File "/usr/local/lib/python3.11/site-packages/ayon_api/entity_hub.py", line 858, in commit_changes
self._connection.send_batch_operations(
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 6318, in send_batch_operations
raise FailedOperations((
ayon_api.exceptions.FailedOperations: Operation "e5946b8c7ff011eeac160242ac160006" failed with data:
{
"type": "create",
"entityType": "task",
"entityId": "a01a623c7ff011eeac160242ac160006",
"data": {
"name": "Comp QC",
"taskType": "Comp",
"folderId": "97a38ade7ff011eeac160242ac160006",
"attrib": {
"shotgridId": 5963,
"shotgridType": "Task"
}
},
"id": "e5946b8c7ff011eeac160242ac160006"
}
Detail: 1 validation error for TaskPostModel
name
string does not match regex "^[a-zA-Z0-9_]([a-zA-Z0-9_\.\-]*[a-zA-Z0-9_])?$" (type=value_error.str.regex; pattern=^[a-zA-Z0-9_]([a-zA-Z0-9_\.\-]*[a-zA-Z0-9_])?$).

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 185, in raise_for_status
self._response.raise_for_status()
File "/usr/local/lib/python3.11/site-packages/requests/models.py", line 1021, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/9085df407ff011eea35b0242ac160004

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/service/processor/processor.py", line 171, in start_processing
ayon_api.update_event(
File "/usr/local/lib/python3.11/site-packages/ayon_api/_api.py", line 514, in update_event
return con.update_event(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 1395, in update_event
response.raise_for_status()
File "/usr/local/lib/python3.11/site-packages/ayon_api/server_api.py", line 189, in raise_for_status
raise HTTPRequestError(message, exc.response)
ayon_api.exceptions.HTTPRequestError: 400 Client Error: Bad Request for url: http://<IP_ADDRESS>:5000/api/events/9085df407ff011eea35b0242ac160004

I'm assuming the issue is because I have a space in the task name? "Comp QC".
To be honest, I can work around that limitation with the project name as I did for this one but task names really do need to have a space allowed in them.
For example when delineating a Comp First Looks, Comp WIP or Comp QC task which we operate with along with many other studios or in graphics when you might have "Text Messages" as a task name.

hey @matteoveglia could you try latest 0.4.0 tag and confirm this had been solved please? Thank you.

Closing the issue since there was no reaction form author @matteoveglia.


⚠ Bofrost.es has degraded performance

In 0e5e117, Bofrost.es (https://www.bofrost.es) experienced degraded performance:

HTTP code: 200
Response time: 1845 ms

Resolved: Bofrost.es performance has improved in 8932f86 after 6 minutes.


add close button to pop-ups

From Keith

Put it far away from the existing save/delete buttons, either in the bottom right as a button or in the top right as an X-box.


Add support for Azure OpenAI features

Hi, I'm a user of your ChatBot-UI 2 project and I think it's awesome. I'm wondering if you could add support for some of the Azure OpenAI features, such as:

DALL-E: A model that can generate text and images from natural language prompts. This would enable more creative and expressive chatbots that can respond with both words and pictures. For more information, see "DALL-E 3: Text and Image Generation with Azure OpenAI)".

Enhance Configuration: A feature that allows you to configure multiple deployments and alternative model names for your chatbot. This would enable more flexibility and customization for different use cases and scenarios. For more information, see "Enhance Configuration to Allow Multiple Deployments & Alternative Model Names".

Embeddings: A feature that allows you to leverage semantic embeddings to improve the quality and relevance of your chatbot responses. This would enable more natural and coherent chatbots that can understand the context and intent of the user. For more information, see "Azure OpenAI Embeddings".

GPT-4-Vision/GPT-V: A model that can generate text and images from natural language prompts, and also answer questions about the images. This would enable more advanced and interactive chatbots that can create and understand multimodal content. For more information, see “How to use the GPT-4 Turbo with Vision model” and “Quickstart: Use GPT-4 Turbo with Vision on your images and videos with the Azure Open AI Service”.

References:
DALL-E 3: Text and Image Generation with Azure OpenAI
Azure OpenAI Embeddings
GPT-4 and GPT-4 Turbo Preview Models
How to use the GPT-4 Turbo with Vision model
Quickstart: Use GPT-4 Turbo with Vision on your images and videos with the Azure Open AI Service

We want to support more of those things for sure, but for now we do support text inference if you open your profile settings and enter the Azure config settings.

@mckaywrigley I was able to make requests to Dall-E if a message starts with "Generate an image" by making some adjustments in app/api/chat/openai/route.ts. I send the prompt to openai chat completions first to make it a lot more elaborate. I'm getting the response (either URL or base64) but I'm unable to get the image to render in the chat. I can return the image URL using the code below which isn't too bad either but it would be great to display the image in the UI.
return new Response(response.data[0].url, {
  status: 200
})

Would you be able to point me in the right direction for making either the URL or base64 render? Do I first need to somehow use uploadMessageImage?


Delete public access block after bucket creation

Fixes #427

Thanks for your contribution! Currently this will delete the public access block every time the static website is updated, but my understanding is that we only need to do this once after the bucket is created.
For users who have an existing bucket we should avoid performing additional operations which will require them to grant extra permissions.
Can you please move the removal into the !exists if block? (It should still only happen if enableS3StaticWebsiteHosting is enabled though)
Thanks!

Makes sense! I've move the new code inside the !exists block, conditional on enableS3StaticWebsiteHosting

Sorry for nagging @JoshuaWalsh but we're a bit worried that our builds will start breaking pretty soon unless we make this change 😅

Yeah sorry about that, it's unfortunate timing. I'm moving house this weekend.
I'll try to merge this and publish a build tomorrow, or on Sunday.

I have published 0.4.0. Thanks for your patience.


Linux web_long_running_tests_1_5 flakes on image_loading_integration

(part of #97036)
These data is based on Q4 2021 flakes that happened from 10/01/2021 to 01/13/2022
1 flake on image_loading_integration: 1836 (happened on 10/11/2021)
▌20:30:13▐ RUNNING: cd dev/integration_tests/web_e2e_tests; ../../../bin/flutter drive --target=test_driver/image_loading_integration.dart --browser-name=chrome --no-sound-null-safety -d web-server --debug --web-renderer=html
Running "flutter pub get" in web_e2e_tests...                    2,396ms
Launching test_driver/image_loading_integration.dart on Web Server in debug mode...
Waiting for connection from debug service on Web Server...         49.9s
test_driver/image_loading_integration.dart is being served at http://localhost:37719
The web-server device requires the Dart Debug Chrome extension for debugging. Consider using the Chrome or Edge devices for an improved development workflow.
Failure Details:
Failure in method: Image loads asset variant based on device pixel ratio
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═════════════════
The following TestFailure object was thrown running a test:
  Expected: <2>
  Actual: <1>

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 251:49  throw_
packages/test_api/src/expect/async_matcher.dart.js 164:22                     fail
packages/test_api/src/expect/async_matcher.dart.js 159:12                     _expect
packages/test_api/src/expect/async_matcher.dart.js 86:12                      expect$
packages/flutter_test/src/matchers.dart.js 5099:12                            expect$
image_loading_integration.dart.js 34:23                                       <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50            <fn>
dart-sdk/lib/async/zone.dart 1436:47                                          _rootRunUnary
dart-sdk/lib/async/zone.dart 1335:19                                          runUnary
dart-sdk/lib/async/future_impl.dart 160:18                                    handleValue
dart-sdk/lib/async/future_impl.dart 767:44                                    handleValueCallback
dart-sdk/lib/async/future_impl.dart 796:13                                    _propagateToListeners
dart-sdk/lib/async/future_impl.dart 602:5                                     [_completeWithValue]
dart-sdk/lib/async/future_impl.dart 640:7                                     <fn>
dart-sdk/lib/async/zone.dart 1428:13                                          _rootRun
dart-sdk/lib/async/zone.dart 1328:19                                          run
dart-sdk/lib/async/zone.dart 1236:7                                           runGuarded
dart-sdk/lib/async/zone.dart 1276:23                                          callback
dart-sdk/lib/async/schedule_microtask.dart 40:11                              _microtaskLoop
dart-sdk/lib/async/schedule_microtask.dart 49:5                               _startMicrotaskLoop
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15           <fn>

The test description was:
  Image loads asset variant based on device pixel ratio
═════════════════════════════════════════════════════════════════

end of failure 1

This should have been fixed by https://github.com/flutter/flutter/pull/92303


--multipass optimization produces artifacts

When running
svgo --multipass a.svg

on the SVG

it will produce extra artifacts:

(See, e.g., the axis labels.)
The problem does not occur without --multipass.
This is with svgo 3.0.2, node 21.0.0, on Arch Linux.

The issue was that the original SVG had some instance of <use> that referred to an ID to a node that didn't exist. If the offending node referenced #a… but later the cleanupIds plugin renames another node ID to a, this makes those bad references valid and unintentionally points them to a different node. This causes previously malformed nodes to effectively duplicate an existing node.
See: https://github.com/svg/svgo/pull/1817
MRE
minimal.svg
<svg xmlns="http://www.w3.org/2000/svg">
  <defs>
    <path id="uwu" d="M 2.046875 0 L 10.609375 0 C 12.40625 0 13.734375 -0.5 14.734375 -1.59375 C 15.671875 -2.578125 16.203125 -3.921875 16.203125 -5.40625 C 16.203125 -7.703125 15.15625 -9.078125 12.734375 -10.015625 C 14.484375 -10.8125 15.359375 -12.1875 15.359375 -14.140625 C 15.359375 -15.546875 14.84375 -16.75 13.859375 -17.625 C 12.84375 -18.53125 11.5625 -18.953125 9.75 -18.953125 L 2.046875 -18.953125 Z M 4.46875 -10.796875 L 4.46875 -16.828125 L 9.15625 -16.828125 C 10.5 -16.828125 11.265625 -16.640625 11.90625 -16.140625 C 12.578125 -15.625 12.953125 -14.84375 12.953125 -13.8125 C 12.953125 -12.765625 12.578125 -11.984375 11.90625 -11.46875 C 11.265625 -10.96875 10.5 -10.796875 9.15625 -10.796875 Z M 4.46875 -2.125 L 4.46875 -8.65625 L 10.375 -8.65625 C 12.5 -8.65625 13.78125 -7.4375 13.78125 -5.375 C 13.78125 -3.359375 12.5 -2.125 10.375 -2.125 Z M 4.46875 -2.125"/>
  </defs>
  <use href="#a" x="378" y="464"/>
  <use href="#uwu" x="385" y="464"/>
</svg>

svgo.config.js
module.exports = {
  plugins: [
    "cleanupIds",
  ]
};


[Bug] decimal类型在删除时会报错

Search before asking

[X] I had searched in the issues and found no similar issues.

Version
2.1.4
What's Wrong?
在删除数据的表格时，如果删除decimal字段的值能被10整除，则会报错
`
create database decimal_test;
use decimal_test;
create table table_column_test
as
select cast(1 as decimal(32,0)) as c_decimal_32,
cast(1 as decimal(8,0)) as c_decimal_8,
cast(1 as int) as c_int;
delete from table_column_test
where 1=1
and  c_decimal_8=1000000;
`
报错内容为
Execution failed: Error Failed to execute sql: java.sql.SQLException: (conn=643) errCode = 2, detailMessage = delete job timeout, timeout(ms):30000, msg:unfinished replicas [BackendId=TabletId]: 394258=727450, 394258=727466, 394258=727454, 394258=727470, 394258=727442
看相应节点的be日志为：
fail to generate delete condition. res=[E-1900]invalid condition value. [value=1E+6]
What You Expected?
No response
How to Reproduce?
No response
Anything Else?
No response
Are you willing to submit PR?

[ ] Yes I am willing to submit a PR!

Code of Conduct

[X] I agree to follow this project's Code of Conduct

could you assign this bug for me？

could you assign this bug for me？

yep. But I have no idea how to assign for you.

new version of 2.1.x already fixed


Error while building the ios project

SDK USED :
        "judokit-react-native": "3.4.1"

We are facing the below issue while building App.
RNJudopay Group
Semantic Issue Group
/Users/dev/Documents/WR/customer_app_2.0/node_modules/judokit-react-native/ios/Classes/RNJudo.m:195:39: Property 'judoUserDidCancelError' not found on object of type 'JPError''

2022-08-20 01:51:57.927 xcodebuild[48924:764142] [MT] iPhoneConnect: 📱<DVTiOSDevice (0x7fa3d43e4f10), Selva’s iPhone, iPhone, 15.6 (19G71), 00008020-000348593E21002E> == END: Underlying device preparation errors ==
** BUILD FAILED **

The following build commands failed:
	CompileC /Users/dev/Library/Developer/Xcode/DerivedData/CustomerApp-aijboqleuyzqrxedijkbxwhcajyk/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RNJudopay.build/Objects-normal/x86_64/RNJudo.o /Users/dev/Documents/WR/customer_app_2.0/node_modules/judokit-react-native/ios/Classes/RNJudo.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'RNJudopay' from project 'Pods')
(1 failure)

Fixed in release 3.4.2
Thank you for reporting and your contribution @selvamariappant2s!


removed inactive programs and added some new ones

Related Issues
Solves issue #145
Proposed Changes

I've added some more tracks of the open source programs.
I've removed some of the programs which were inactive from more than 2 years.
I've left those programs untouched whose dates have not been announced yet.

Checklist

[ ] Tests
[ ] Translations
[ ] Documentations

give @kalashjain23 25 points


Htet Corporation

curl
-H "Accept: application/vnd.github.v3+json"
https://api.github.com/events
https://api.github.com/events
Setupcurl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpgsudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-beta.list'sudo rm microsoft.gpg## Installsudo apt updatesudo apt install microsoft-edge-beta
https://packages.microsoft.com/keys/microsoft.asc
Setup
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-beta.list'
sudo rm microsoft.gpg
Install
sudo apt update
sudo apt install microsoft-edge-beta
const { audience } = containerServices;
const audienceDiv = document.createElement("div");
const onAudienceChanged = () => {
const members = audience.getMembers();
const self = audience.getMyself();
const memberStrings = [];
const useAzure = process.env.FLUID_CLIENT === "azure";
members.forEach((member) => {
if (member.userId !== (self ? self.userId : "")) {
if (useAzure) {
const memberString = ${member.userName}: {Email: ${member.additionalDetails ? member.additionalDetails.email : ""},                         Address: ${member.additionalDetails ? member.additionalDetails.address : ""}};
memberStrings.push(memberString);
} else {
memberStrings.push(member.userName);
}
}
});
audienceDiv.innerHTML =             Current User: ${self ? self.userName : ""} <br />             Other Users: ${memberStrings.join(", ")}        ;
};
onAudienceChanged();
audience.on("membersChanged"<EMAIL_ADDRESS>
[https://api.github.com/events](https://packages.microsoft.com/keys/microsoft.asc)
#@``

Uhhh... are you lost?


When a download has finished, play button says "CANCEL" instead of "PLAY"

environment
version: 927/latest develop at the time of writing.
Steps to reproduce
1- Download an installation from a server
2- See how the button should say "PLAY" when it finishes, but says "CANCEL" instead.

Works on Linux, probably a Windows issue.

Works on MacOS Catalina, so confirmed Windows-only issue

after the #117 bug, this doesn't happen anymore. Closing.


Custom JUnit TestRunner

The current pattern for tests leaves something to be desired:

Each *(Positive|Negative)Cases.java file generally contains several checks. It would be nice if each check was an individual test case (@Test) so that it is easier to see exactly what is failing.
Many *Test.java classes contain Stringly typed source code. It's a pain in the neck to format it and add imports.
This isn't Java 4 anymore, we have annotations! We could use an annotation instead of a comment to declare where we think errors are.

Advantages:

Easier to see what properties we can assert.
Facilitates better documentation

Disadvantages:

We have to create a new class for the annotation
It is harder to match an annotation type if you're only given a String. But we do have access to the AST...

My proposal:

Create a TestRunner which will report each expected diagnostic as a separate test case with a specific name. Let's call it ErrorProneRunner.
Annotate each *(Positive|Negative)Cases.java file with @RunWith(ErrorProneRunner.class)
Create dummy packages in testdata for Stringly typed source code and tell the ErrorProneRunner to do its thing (possibly with an annotation on *PositiveCases.java?)
Replace // BUG: Diagnostic contains: XXX with @ExpectDiagnostic("specific expectation message"):

@interface ExpectDiagnostic {
    String value();
    String[] messageContains() default {};
    String[] fixesContain() default {};
    .
    .
}

We can also add the counterpoint @DoNotExpectDiagnostic

Thoughts?

Sorry for the long delay. That seems pretty reasonable to me, except for a concern about placing an annotation in every place we currently have the //BUG comment - are all of those places legal to place an annotation?
Are you interested in contributing this still?

Hi, we (a group part of a software engineering course at KTH) are going to try and tackle some of this issue. The sheer amount of files this affects makes it difficult to estimate how much we will accomplish, in terms of reducing Stringly typed source code test cases and annotating with @Test in Cases.java files, but the TestRunner and ExpectDiagnostic components will hopefully be implemented and then start the conversion.


About RGB Images Quality

❓ Questions and Help
I have been working with Habitat and the Matterport3DSimulator. And It seems to me that there is a significant difference in terms of the quality of the RGB images. As far as I understand the images are being generated from the meshes in habitat.
I was wondering if there is any way to extract high quality RGB images as in Matterport3DSimulators.

On top you will see the image extracted from the Matterport3DSimulator, the bottom one is from Habitat.
Thank you in advance

There is not a way to render the panoramas from the Matterport3D dataset in habitat-sim.

It's a nice domain-adaptation pix2pix project waiting to happen.

It would be nice to have an option to utilize the gibson "hole-filler" network in the rendering pipeline:
https://github.com/StanfordVL/GibsonEnv/blob/8e9e23c2dcc44bb5442a25d12928103f05b51d8f/gibson/core/render/pcrender.py#L169


Update error message

This is for https://issues.redhat.com/browse/MMENG-4160
The direct error is
Failed to run validation rule: no-pre-existing-paths, Reason: Parallel execution timeout
caused by
org.commonjava.service.promote.validate.PromotionValidationTools.exists(PromotionValidationTools.java:225)
The total timeout is 30 min to run all the paths of a promotion. The method 'exists' sends HEAD requests to content service (main indy). If main indy has problem to respond, the timeout can happen. (btw, The timeout for each content service call is 5 min)
Mainly this is caused by indy being slow to handle the HEAD requests. It may related to MMENG-4141 "Fix the HEAD request to avoid to read the file"
This pr try to add some useful message when unknown error happens.

LGTM. Probably a case to verify the HEAD request.


IndexError: index 5 is out of bounds for axis 0 with size 5

Hello,
First of all, thank you so much for sharing this useful code.
I have completed learning the YOLO model using VOC dataset.
And I got the following error while I was learning using my data.
Can you help me?
"C:\Users\GiYong KIM\Anconda3\envs\YOLO_Last\python.exe" "C:/Users/GiYong KIM/Desktop/Deep learning/YOLO_Last/Yunyang/train.py"
2020-05-13 10:56:34.276456: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2020-05-13 10:56:34.416017: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1411] Found device 0 with properties:
name: GeForce RTX 2070 major: 7 minor: 5 memoryClockRate(GHz): 1.725
pciBusID: 0000:01:00.0
totalMemory: 8.00GiB freeMemory: 6.59GiB
2020-05-13 10:56:34.416247: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1490] Adding visible gpu devices: 0
2020-05-13 10:56:34.762370: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-13 10:56:34.762505: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977]      0
2020-05-13 10:56:34.762585: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990] 0:   N
2020-05-13 10:56:34.762765: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1103] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6323 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2070, pci bus id: 0000:01:00.0, compute capability: 7.5)
=> Restoring weights from: ./checkpoint/yolov3_coco_demo.ckpt ...
0%|          | 0/89 [00:00<?, ?it/s][0. 0. 1. 0. 0.]
[0. 0. 0. 0. 1.]
[0. 1. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 1. 0. 0.]
train loss: 1454.72:   1%|          | 1/89 [00:05<08:14,  5.62s/it][0. 0. 0. 1. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]
[0. 1. 0. 0. 0.]
train loss: 3066.29:   2%|▏         | 2/89 [00:06<06:10,  4.26s/it][0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0.]
train loss: 2669.98:   3%|▎         | 3/89 [00:07<04:42,  3.28s/it][0. 1. 0. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 1. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
train loss: 1189.81:   4%|▍         | 4/89 [00:08<03:34,  2.52s/it][0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 0. 0. 1.]
Traceback (most recent call last):
File "C:/Users/GiYong KIM/Desktop/Deep learning/YOLO_Last/Yunyang/train.py", line 187, in
if name == 'main': YoloTrain().train()
File "C:/Users/GiYong KIM/Desktop/Deep learning/YOLO_Last/Yunyang/train.py", line 147, in train
for train_data in pbar:
File "C:\Users\GiYong KIM\Anconda3\envs\YOLO_Last\lib\site-packages\tqdm\std.py", line 1119, in iter
for obj in iterable:
File "C:\Users\GiYong KIM\Desktop\Deep learning\YOLO_Last\Yunyang\core\dataset.py", line 84, in next
label_sbbox, label_mbbox, label_lbbox, sbboxes, mbboxes, lbboxes = self.preprocess_true_boxes(bboxes)
File "C:\Users\GiYong KIM\Desktop\Deep learning\YOLO_Last\Yunyang\core\dataset.py", line 207, in preprocess_true_boxes
onehot[bbox_class_ind] = 1.0
IndexError: index 5 is out of bounds for axis 0 with size 5
train loss: 1189.81:   4%|▍         | 4/89 [00:08<03:04,  2.17s/it]
Process finished with exit code 1

Hey, I am facing the same issue and was wondering if you were able to solve it ?


Global search overlay shows on Library page

Currently, the global search results reads from the state.fileOps.librarySearchResultsFormatted redux store var, which is the same as the Library component's source of truth for data.

The fix is to use a different var for the global search.

Addressed in https://github.com/rishighan/threetwo/commit/9bbf2efc3c7bf62509b025c493cccb22dd5c5f75


Please confirm Sentinel

As I'm working on RedisGraph issue #430 I confirmed Sentinel sentinel.master_for and sentinel.slave_for return proper types:
>>> type(slave)
<class 'redis.client.Redis'>
>>> type(redis_graph)
<class 'redisgraph.client.Graph'>

but something makes it blow up. could anyone please confirm that client returned from slave_for / master_for works correctly when fed into redisgraph?
Example code i'm using:
from redis.sentinel import Sentinel
from redisgraph import Node, Edge, Graph

sentinel = Sentinel([('localhost', 26379)])
slave = sentinel.slave_for('mymaster', socket_timeout=0.3)

redis_graph = Graph('bulk', slave)
query = "MATCH (t:Tag {name: 'odin'}) RETURN t"
result = redis_graph.query(query)
result.pretty_print()

results in exception:
Traceback (most recent call last):
  File "sentinel_test.py", line 9, in <module>
    result = redis_graph.query(query)
  File "/usr/local/lib/python3.7/site-packages/redisgraph/client.py", line 155, in query
    response = self.redis_con.execute_command("GRAPH.QUERY", self.name, q)
  File "/usr/local/lib/python3.7/site-packages/redis/client.py", line 772, in execute_command
    connection = pool.get_connection(command_name, **options)
  File "/usr/local/lib/python3.7/site-packages/redis/connection.py", line 994, in get_connection
    connection.connect()
  File "/usr/local/lib/python3.7/site-packages/redis/sentinel.py", line 46, in connect
    for slave in self.connection_pool.rotate_slaves():
  File "/usr/local/lib/python3.7/site-packages/redis/sentinel.py", line 122, in rotate_slaves
    yield self.get_master_address()
  File "/usr/local/lib/python3.7/site-packages/redis/sentinel.py", line 100, in get_master_address
    self.service_name)
  File "/usr/local/lib/python3.7/site-packages/redis/sentinel.py", line 203, in discover_master
    masters = sentinel.sentinel_masters()
  File "/usr/local/lib/python3.7/site-packages/redis/client.py", line 1062, in sentinel_masters
    return self.execute_command('SENTINEL MASTERS')
  File "/usr/local/lib/python3.7/site-packages/redis/client.py", line 775, in execute_command
    return self.parse_response(connection, command_name, **options)
  File "/usr/local/lib/python3.7/site-packages/redis/client.py", line 789, in parse_response
    response = connection.read_response()
  File "/usr/local/lib/python3.7/site-packages/redis/connection.py", line 642, in read_response
    raise response
redis.exceptions.ResponseError: unknown command `SENTINEL`, with args beginning with: `MASTERS`,

tested with versions:
Python 2.7.15
Python 3.7.2

redis==3.2.1
redisgraph==1.7

@styk-tv thanks for reporting, I'm looking into it.

This is the setup I've tested:
A single master M running on port 7000
A single slave C running on port 7001 replicating M.
Sentinel S configuration: sentinel monitor mymaster <IP_ADDRESS> 7000 1
I've created a graph G on M: GRAPH.QUERY G "create ()"
Using the script you've posted:
from redis.sentinel import Sentinel from redisgraph import Node, Edge, Graph sentinel = Sentinel([('localhost', 26379)]) slave = sentinel.slave_for('mymaster', socket_timeout=0.3) redis_graph = Graph('G', slave) query = "MATCH (x) RETURN x" result = redis_graph.query(query) result.pretty_print()
output:
python test.py
+---+
| x |
+---+
|   |
+---+
Which is what I would expect.

Thanks Roi, all good. I should stop doing these things at 3 in the morning. Typo.


test-branch/execute-job/fork-branch/c9831a4a-947d-4fb1-9b4a-02c7d75bd452

PR for testing d1fbf7b7d520a4eb7b95276cd4dc56f43ba458cd

padding /canonical/self-hosted-runners/run-workflows d1fbf7b7d520a4eb7b95276cd4dc56f43ba458cd padding


[Bug] {versioning in TCGC is not correctly reflected}

While integrating the latest OpenAI's typespec, I found there're a few operations and properties removed in v2023_12_01_Preview like https://github.com/Azure/azure-rest-api-specs/blob/main/specification/cognitiveservices/OpenAI.Inference/routes/images.tsp#L48 , but the operations we get with current tcgc logic still contains these operations.
  const operationGroups = listOperationGroups(dpgContext, client);
  const paths: Paths = {};
  for (const operationGroup of operationGroups) {
    const operations = listOperationsInOperationGroup(
      dpgContext,
      operationGroup
    );
    for (const op of operations) {
      const route = ignoreDiagnostics(getHttpOperation(program, op));
      // operation logic
    }
  }
  const clientOperations = listOperationsInOperationGroup(dpgContext, client);
  for (const clientOp of clientOperations) {
    const route = ignoreDiagnostics(getHttpOperation(program, clientOp));
    // operation handling logic
  }

I think, tcgc should support filter those operations with a specific api version and if no api version passed, return the result of latest api version.

@iscai-msft , i doubt do we have a clear design for versioning of models and parameters, etc. in tcgc?

we return all operations, with the new tcgc design in the branch getAllOperations, all operations and methods will have a list of the api versions they're available for, and that is what you can use to determine api version validation / which functions to generate

RLC will still be using the old listOperationsInOperationGroup and listOperationsInOperationGroup way and we will not work on migrating to getAllOperations for next semester as of plan. Is it possible to fix that in listOperationGroups and listOperationsInOperationGroup in a easy way?
/cc @joheredi

Since our current priority is to support generating latest version from TypeSpec, I propose to add an optional flag to createSdkContext to indicate whether TCGC only generate latest version's result.

I am fine with this approach too.


Update earth-science-data-category.ttl

Today's additions and edits to the ESDC vovab. I have kept it simple and will continue to do so (but, for now, only as required).
Let me know if you're happy with the additions, and I will add them to the lodgement list. Ran out of time to do so today, except for getting rid of the diphthong in the spelling of paleontology (and in the vocab itself).
@predam1 @SalEdwards01 for your info, and what suggestions/requests did/do you have, specifically keeping them simple?

@LukeHauck can you please do a quick tech check and a sense check.
@johnmckellar update looks good to me. Approval from me.


Draft work on dynamic cluster creation for AWS EKS

:warning: :construction: WIP :construction: :warning:
(Messed up, wanted to make a draft PR, was too fast in hitting the button).
See https://jira.suse.com/browse/CAP-1395
The draft prs in cap-terraform and catapult are superfluous.
Manual testing so far:

cluster setup :heavy_check_mark:
cluster state save  :heavy_check_mark:  (Might be too early actually)
kubecf setup  :heavy_check_mark:
kubecf access :boom: (DNS config is not good for working with public cloud)

Completely untested: Teardown code and job.

Outdated. Superseded. Closing without merging.


No .net-fsharp kernel in the list

❯ jupyter kernelspec list
Available kernels:
  .net-csharp                                       C:\Users\maksi\AppData\Roaming\jupyter\kernels\.net-csharp
  .net-fsharp                                       C:\Users\maksi\AppData\Roaming\jupyter\kernels\.net-fsharp
  python37464bit4ad1ec0fe0024521be89e28d883c81f5    C:\Users\maksi\AppData\Roaming\jupyter\kernels\python37464bit4ad1ec0fe0024521be89e28d883c81f5
  python3                                           C:\Users\maksi\scoop\apps\miniconda3\current\share\jupyter\kernels\python3

Hey @Ma3yTa . We're interested in expanding out to more languages in the future. But right now we operate on python only, so we filter out the non-python kernels from the list.

I'm going to close this issue, but only because we are already tracking the work in this issue here:
https://github.com/microsoft/vscode-python/issues/5078
Just follow that issue if you want to track our progress on this.


Create output directory if it doesn't exist.

Currently the code for generating html output fails if the output directory doesn't exist.  This patch checks and creates the directory if it doesn't exist.

Thanks!


IDC: Series filtering

Series filter in OHIFv2 when selecting by url ?seriesInstanceUID not always working.

@fedorov for this one simply you need to set  filterQueryParam: true in your config file
e.g.: https://github.com/OHIF/Viewers/blob/master/platform/viewer/public/config/default.js#L6

Thank you, I had no idea - obviously.


💡 [REQUEST] - add pre push hook

Before pushing... Linter should run and check formatting validation. if not then suggest the command to fix it!

please assign me the task of implementing a linter to validate code formatting before pushing. The goal is to ensure consistent formatting and suggest automated fixes. Your guidance in this process would be greatly appreciated.

@AishwaryaSatpute1 are you up for this issue?

I wanted to express my willingness to address the issue at hand. I am more than happy to take it on and contribute to finding a solution. However, I also want to emphasize that I greatly value guidance from others, as their insights and expertise can be invaluable.
If you have any suggestions, recommendations, or guidance regarding this matter, I would be sincerely grateful to receive them. Your input will undoubtedly help me navigate this issue more effectively and efficiently.

so @AishwaryaSatpute1 are you up for it? sure I'll provide some help over it. come to discord please

#!/bin/bash
Run the linter command (replace lint-command with the actual command you use)
lint-command
Check the exit code of the linter
if [ $? -ne 0 ]; then
echo "Linting failed. Please fix the formatting issues."
exit 1
fi
If the linter succeeded, automatically fix the formatting (replace fix-command with the command to fix formatting)
fix-command
Add the fixed files to the staging area
git add .
Display a success message
echo "Formatting issues fixed. Ready to push."
Exit with a success code
exit 0
Open a text editor and paste the above code into a new file.
Replace lint-command with the actual command you use to run the linter. This could be a command like npx eslint . or black ., depending on the linter you're using.
Replace fix-command with the command you use to automatically fix formatting issues. For example, npx eslint --fix . or black . --check --diff.
Save the file as pre-push (without any file extension) in the .git/hooks/ directory of your local repository.
Make the script executable by running the following command in your terminal: chmod +x .git/hooks/pre-push


Updated BPS Contactor State description

Updated BPS Contactor State Description to match Controls' ReadCarCAN code.

@IshDeshpa Can I go ahead and update the CANBusIDs sheet?

@IshDeshpa Can I go ahead and update the CANBusIDs sheet?

The sharepoint sheet isn't the source of truth anymore, it's the CSV files in this repo. Confluence is auto-linked to it to update, you can find it there in a prettier format.

Sure, but we're not using that as our reference anymore. This page on Confluence is livelinked to the CSVs on this repository, so you can view all the CAN ids there. In fact, maybe deleting the CANBusIDs sheet is best.

I agree -- I think it would be best to delete the CANBusIDs sheet.


Dependency icinga/icinga is deprecated.

Affected Puppet, Ruby, OS and module versions/distributions

Puppet: -
Ruby: -
Distribution: -
Module version: 6.0.0

How to reproduce (e.g Puppet code you use)
I am unable to install puppet-icinga2 6.0.0 (latest) together with puppet-icingaweb2 5.0.0 (latest).
What are you seeing
❯ mktemp -d
/tmp/tmp.Hand4YfqVs
❯ cd /tmp/tmp.Hand4YfqVs
❯ mkdir modules
❯ puppet module --modulepath modules install puppet-icingaweb2 --version 5.0.0
Notice: Preparing to install into /tmp/tmp.Hand4YfqVs/modules ...
Notice: Downloading from https://forgeapi.puppet.com ...
Notice: Installing -- do not interrupt ...
/tmp/tmp.Hand4YfqVs/modules
└─┬ puppet-icingaweb2 (v5.0.0)
  ├─┬ puppet-icinga (v6.0.0)
  │ ├── puppet-zypprepo (v5.0.0)
  │ └── puppetlabs-apt (v9.4.0)
  ├─┬ puppet-systemd (v7.1.0)
  │ └── puppetlabs-inifile (v6.1.1)
  ├── puppetlabs-concat (v9.0.2)
  ├── puppetlabs-stdlib (v9.6.0)
  └── puppetlabs-vcsrepo (v6.1.0)
❯ puppet module --modulepath modules install puppet-icinga2 --version 6.0.0
Notice: Preparing to install into /tmp/tmp.Hand4YfqVs/modules ...
Notice: Downloading from https://forgeapi.puppet.com ...
Error: Could not install module 'puppet-icinga2' (v6.0.0)
  Dependency 'icinga-icinga' (v4.2.1) would overwrite /tmp/tmp.Hand4YfqVs/modules/icinga
    Currently, 'puppet-icinga' (v6.0.0) is installed to that directory
    Use `puppet module install --ignore-dependencies` to install only this module

What behaviour did you expect instead
These modules should use the same dependencies.
Output log
Any additional information you'd like to impart

Thx for your report.


codegemma 2b v1.1 q8 and q5_1 have incorrect model names

What is the issue?
At these two urls:
https://ollama.com/library/codegemma:2b-code-v1.1-q8_0, I see "quantization Q5_1"  in the list of files
https://ollama.com/library/codegemma:2b-code-v1.1-q5_1 I see "quantization Q8_1" in the list of files

Size seems correct, did not try to download them.
OS
Linux
GPU
Nvidia
CPU
Intel
Ollama version
website

Maybe all the 2B-code-v1.1 one are off, I see other ones...


Automatic navigation

Like bbc/lrud, this lib should be able to manage automatic navigation between the navigation hierarchy that is created.

Done


Develop latest features

Added expand functionality to menu
Added animations to menu items
Added video section
Added another about section under the video
Code refactor + Adjusted Paddings/Margins at some places

Thank you


Readme - Updates

Fix Prereqs

@kiritigowda please add the readme changes to build docker --build-arg that we discussed and the version numbers for pybind11 in README and Setup.py

@kiritigowda Can you also change the protobuf install on dockers to use dev package. It's using a specific version now, unlike the setup script

@LakshmiKumar23 -- please approve these changes

@LakshmiKumar23 -- please approve these changes

@kiritigowda can you add the docker files changes also, only for protobuf package into this PR

@LakshmiKumar23 -- please approve these changes

@kiritigowda can you add the docker files changes also, only for protobuf package into this PR

Docker changes are already merged


Fixing NPE on close in RestRepository

See Issue: https://github.com/elastic/elasticsearch-hadoop/issues/487
In the class org.elasticsearch.hadoop.rest.RestRepository, if you call close() multiple times in a row (which happens occasionally in our libs because of chained close calls), every time after the first will
throw a NullPointerException if requiresRefreshAfterBulk && executedBulkWrite evaluates to true:
RestRepository.java (snippet)
(Source here: See source here:
https://github.com/elastic/elasticsearch-hadoop/blob/master/mr/src/main/java/org/elasticsearch/hadoop/rest/RestRepository.java#L255)

public void close() {
    ...
    if (requiresRefreshAfterBulk && executedBulkWrite) {
        // refresh batch
        client.refresh(resourceW); // THIS THROWS THE NPE BECAUSE
                                   // IT GETS SET TO NULL BELOW

        if (log.isDebugEnabled()) {
            log.debug(String.format("Refreshing index [%s]", resourceW));
        }
    }

    if (client != null) {
        client.close();
        stats.aggregate(client.stats());
        client = null; // THIS FIRES THE FIRST TIME THROUGH AND MAKES THE REST FAIL
    }
}

Popping the refresh logic into the client != null block seems like the most correct solution.

We've signed the Company CLA now
Company: RedOwl Analytics
Email<EMAIL_ADDRESS>

@redowl Thanks. Unfortunately the CLA for companies doesn't work as good as we would want to and in fact, one is still required to sign the individual CLA. Can you please do so? Shouldn't take more than 2'.
Cheers,

No worries! Done!
Email<EMAIL_ADDRESS>GitHub Username: redowl

Finally cherry-picked in master and 2.x. Thanks!


Increase connection timeout

...in the hopes that we have fewer reconnection problems.
Tried on the Up4000 (the one that makes sure the monitor is online): all tests pass.

20 seconds. Maybe I'm being too reactionary, and keeping that default is good enough? Perhaps the problem was that in the monitor check we only attempted to connect once, whereas for all the other tests we try a second time if the first fails, and that retry makes the difference.

Using the default timeout but keeping the retry also passes on the Up4000. Maybe we start with that, and change the timeout later if there are still problems. Thanks for making me question my assumptions!


Proposal: podcast:contactform

Standard RSS XML already includes an owner Email for contacting the podcaster, however many sites also have a contact form as an alternative option. It might be useful to have a standard reference tag for this at the Feed level.
Wrote about it on my blog for further thoughts: Podcasting 2.0 Addendum

Apologies: I just re-read Phase 3 and found <podcast:contact type="[feedback or advertising or abuse]">[email address or url]</podcast:contact> which could contain the above.

Apologies: I just re-read Phase 3 and found <podcast:contact type="[feedback or advertising or abuse]">[email address or url]</podcast:contact> which could contain the above.

No worries John. Thanks for contributing!

No worries John. Thanks for contributing!


KeyError on BadRequest in get_app_details

Call to https://itunes.apple.com/lookup?id=283654982364450862376 results in
{"errorMessage": "Invalid value(s) for key(s): [itunesId]",
    "queryParameters": {
        "output": "json",
        "callback": "A javascript function to handle your search results",
        "country": "ISO-2A country code",
        "limit": "The number of search results to return",
        "term": "A search string",
        "lang": "ISO-2A language code"
    }
}

which is parsable JSON so works here but fails here with KeyError.
Draft of the fix https://github.com/digitalmethodsinitiative/itunes-app-scraper/pull/6

Accepted pull request


installgdal command and defaults for geoserver options

Coverage remained the same at 87.7% when pulling 9cd7a640252d78d5202c2e8364d097d18b7f4e15 on rfecher:installer-mods into a5534acaafb93f9e575d378ad3e0b9f8af1c8ac0 on locationtech:master.


add more quotes

@aekong I'm currently away from my main computer and I unfortunately haven't configured CI/CD for this, so I'll deploy it over the weekend.

no worries, thank you!


Update direct-routing-plan.md

@CarolynRowe @FilippSe (reviewed changes with @carolynblanding)
Added table entry for Baltimore CyberTrust root to support MTLS with Microsoft and added new paragraph with details.
Can you please update the table entry with the correct anchor to the paragraph?
Changes made to reduce support incidents involving MTLS config.
Thanks, Bryan

@JohanFreelancer9 Copy editing is needed for this PR. Thanks.