From 65ff7ff22b37e024d9534663584aac5da903da69 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Sun, 28 Jan 2024 18:55:07 -0500 Subject: [PATCH] feat(action): allow additional request types --- action.yml | 16 ++++---- docs/source/about/github_action.rst | 10 +++-- scripts/plex_bootstraptest.py | 63 ++++++++++++++++++++++++----- 3 files changed, 67 insertions(+), 22 deletions(-) diff --git a/action.yml b/action.yml index 849f0d9..b0e3dbf 100644 --- a/action.yml +++ b/action.yml @@ -9,11 +9,13 @@ inputs: description: Accept Plex's EULA. default: "false" required: false - additional_server_queries_put: + additional_server_queries: description: >- - Space separated list of additional PUT requests to send to the server. The requests are sent before the - library sections are created. You can use this to enable third party metadata agents, as an example. - e.g. `/system/agents/com.plexapp.agents.imdb/config/1?order=com.plexapp.agents.imdb%2C` + Space separated list of additional requests to send to the server. The type of request should be at the beginning + of the endpoint, followed by a `|`. If no `|` is found the default request type of `PUT` will be used. + The requests are sent before the library sections are created. + You can use this to enable third party metadata agents, as an example. + e.g. `put|/system/agents/com.plexapp.agents.imdb/config/1?order=com.plexapp.agents.imdb%2C` default: "" required: false bootstrap_timeout: @@ -325,9 +327,9 @@ runs: if [[ "${{ inputs.accept_eula }}" == "true" ]]; then accept_eula="--accept-eula" fi - if [[ -n "${{ inputs.additional_server_queries_put }}" ]]; then - echo "additional_server_queries_put: ${{ inputs.additional_server_queries_put }}" - server_queries_put="--additional-server-queries-put ${{ inputs.additional_server_queries_put }}" + if [[ -n "${{ inputs.additional_server_queries }}" ]]; then + echo "additional_server_queries: ${{ inputs.additional_server_queries }}" + server_queries_put="--additional-server-queries ${{ inputs.additional_server_queries }}" fi if [[ "${{ inputs.use_docker }}" == "false" ]]; then use_docker="--no-docker" diff --git a/docs/source/about/github_action.rst b/docs/source/about/github_action.rst index 1d90d9a..3e698ad 100644 --- a/docs/source/about/github_action.rst +++ b/docs/source/about/github_action.rst @@ -28,10 +28,12 @@ Inputs - Accept Plex's EULA. - ``false`` - false - * - ``additional_server_queries_put`` - - Space separated list of additional PUT requests to send to the server. The requests are sent before the - library sections are created. You can use this to enable third party metadata agents, as an example. - e.g. `/system/agents/com.plexapp.agents.imdb/config/1?order=com.plexapp.agents.imdb%2C` + * - ``additional_server_queries`` + - Space separated list of additional requests to send to the server. The type of request should be at the beginning + of the endpoint, followed by a `|`. If no `|` is found the default request type of `PUT` will be used. + The requests are sent before the library sections are created. + You can use this to enable third party metadata agents, as an example. + e.g. `put|/system/agents/com.plexapp.agents.imdb/config/1?order=com.plexapp.agents.imdb%2C` - ``""`` - false * - ``bootstrap_timeout`` diff --git a/scripts/plex_bootstraptest.py b/scripts/plex_bootstraptest.py index 4896577..4bd7ccc 100644 --- a/scripts/plex_bootstraptest.py +++ b/scripts/plex_bootstraptest.py @@ -385,10 +385,14 @@ def alert_callback(data): "--accept-eula", help="Accept Plex's EULA", default=False, action="store_true" ) # noqa parser.add_argument( - "--additional-server-queries-put", - help="Comma separated list of additional PUT requests to send to the server. The requests are sent before the " - "library sections are created. You can use this to enable third party metadata agents, as an example. " - "e.g. `/system/agents/com.plexapp.agents.imdb/config/1?order=com.plexapp.agents.imdb%2C`", + "--additional-server-queries", + help="Space separated list of additional requests to send to the server. The type of request should be at the " + "beginning of the endpoint, followed by a `|`. " + "If no `|` is found the default request type of `PUT` will be used. " + "The requests are sent before the library sections are created. " + "You can use this to enable third party metadata agents, as an example. " + "e.g. " + "`put|/system/agents/com.plexapp.agents.imdb/config/1?order=com.plexapp.agents.imdb%2C` ", default=[], nargs='*', ) # noqa @@ -734,13 +738,50 @@ def alert_callback(data): ) # send additional server queries - if opts.additional_server_queries_put: - print("Sending additional PUT requests to the server") - print("Additional PUT requests: {}".format(opts.additional_server_queries_put)) - for query in opts.additional_server_queries_put: - query = query.strip() - print("Sending PUT request to {}".format(query)) - server.query(key=query, method=server._session.put) + if opts.additional_server_queries: + request_map = { + "delete": server._session.delete, + "get": server._session.get, + "post": server._session.post, + "put": server._session.put, + } + + print("Sending additional requests to the server") + print("Additional requests: {}".format(opts.additional_server_queries)) + + completed_queries = [] + start = time.time() + runtime = 0 + while runtime < 60 and len(completed_queries) < len(opts.additional_server_queries): + for query in opts.additional_server_queries: + query = query.strip() + if query not in completed_queries: + if '|' in query: + method, key = query.split('|') + method = method.strip() + key = key.strip() + else: + method = 'put' + key = query.strip() + + if method not in request_map: + raise SystemExit("Invalid method specified: {}".format(method)) + if not key.startswith('/'): + raise SystemExit("Invalid key specified: {}".format(key)) + print("Sending {} request to {}".format(method, key)) + try: + server.query(key=key, method=request_map[method]) + except NotFound as err: + # if 404, wait + print("error: {}".format(err)) + time.sleep(5) + else: + completed_queries.append(query) + finally: + runtime = time.time() - start + + if len(completed_queries) < len(opts.additional_server_queries): + raise SystemExit("Did not successfully complete all additional server queries") # Create the Plex library in our instance if sections: