buildarr / buildarr-prowlarr Goto Github PK
View Code? Open in Web Editor NEWProwlarr indexer manager plugin for Buildarr
Home Page: https://buildarr.github.io/plugins/prowlarr
License: GNU General Public License v3.0
Prowlarr indexer manager plugin for Buildarr
Home Page: https://buildarr.github.io/plugins/prowlarr
License: GNU General Public License v3.0
Checklist:
v0.4.0
$ git log --oneline --decorate v0.3.1..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/6757385046Follow the standards defined in buildarr/buildarr#3.
Use mocking for testing the API interactions between the plugin and the instance.
Hi! Nifty tool ๐. Always seemed odd to me that all the Arr tools were so click-ops centric. I'm looking to integrate it into my stack.
While I was trying to onboard buildarr-prowlarr
, I ran into this issue any time the plugin was trying to download the existing Prowlarr config:
2023-10-18 15:13:06,493 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (prowlarr) Fetching remote configuration to check if updates are required
Traceback (most recent call last):
File "/usr/local/bin/buildarr", line 8, in <module>
sys.exit(main())
^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 568, in daemon
).start()
^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 113, in start
self._initial_run()
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 226, in _initial_run
run_apply(secrets_file_path=self._secrets_file_path)
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 287, in _run
remote_instance_config = manager.from_remote(instance_config, instance_secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/manager/__init__.py", line 171, in from_remote
return instance_config.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/__init__.py", line 157, in from_remote
settings=ProwlarrSettings.from_remote(secrets),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 85, in from_remote
fields[field_name] = field.type_.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 85, in from_remote
fields[field_name] = field.type_.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/indexers/indexers.py", line 654, in from_remote
definitions[indexer.name] = Indexer._from_remote(
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/indexers/indexers.py", line 280, in _from_remote
value: Any = remote_attrs["indexerUrls"][field["value"]]
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
TypeError: list indices must be integers or slices, not str
A few items of note:
dump-config
commandHere is my builder.yml
that I was trying to startup with, but I don't think the configuration affects anything since I don't think buildarr
got past downloading the remote config from prowlarr
. Figured I'd send it just in case:
buildarr:
watch_config: true
update_days:
- "monday"
- "tuesday"
- "wednesday"
- "thursday"
- "friday"
- "saturday"
- "sunday"
update_times:
- "03:00"
prowlarr:
# Configuration common to all prowlarr instances can be defined here.
# settings:
# ...
instances:
# Name of the instance as referred to by prowlarr.
# Assign instance-specific configuration to it.
prowlarr:
host: "host.docker.internal"
port: 9696
protocol: "http"
api_key: "<redacted>"
Happy to provide any additional details or help debug. Thanks again for making this tool
Buildarr v0.8 is planned to provide a number of backwards-incompatible changes, chief of which is the upgrade to Pydantic V2.
This plugin will need to be adapted with these changes in mind.
Checklist:
v0.5.1
$ git log --oneline --decorate v0.5.0..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/7066342294At the moment they're pointing to the Sonarr plugin, but should go to the Prowlarr plugin docs.
Leftover from when this plugin was forked from the Sonarr plugin.
While trying to create the radarr app setting in prowlarr I'm getting the following error:
2023-11-05 14:42:11,944 buildarr:1 buildarr.cli.daemon [INFO] Buildarr version 0.6.1 (log level: INFO)
2023-11-05 14:42:11,944 buildarr:1 buildarr.cli.daemon [INFO] Loading configuration file '/config/buildarr.yml'
2023-11-05 14:42:11,972 buildarr:1 buildarr.cli.daemon [INFO] Finished loading configuration file
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] Daemon configuration:
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Watch configuration files: Yes
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Configuration files to watch:
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - /config/buildarr.yml
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - /prowlarr/prowlarr.yaml
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Update at:
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Monday 03:00
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Tuesday 03:00
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Wednesday 03:00
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Thursday 03:00
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Friday 03:00
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Saturday 03:00
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] - Sunday 03:00
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] Scheduling update jobs
2023-11-05 14:42:11,973 buildarr:1 buildarr.cli.daemon [INFO] Finished scheduling update jobs
2023-11-05 14:42:11,974 buildarr:1 buildarr.cli.daemon [INFO] Enabling config file monitoring
2023-11-05 14:42:11,974 buildarr:1 buildarr.cli.daemon [INFO] Finished enabling config file monitoring
2023-11-05 14:42:11,974 buildarr:1 buildarr.cli.daemon [INFO] Applying initial configuration
2023-11-05 14:42:11,981 buildarr:1 buildarr.cli.run [INFO] Loaded plugins: jellyseerr (0.2.0), prowlarr (0.4.0), radarr (0.1.1), sonarr (0.5.4)
2023-11-05 14:42:11,981 buildarr:1 buildarr.cli.run [INFO] Loading instance configurations
2023-11-05 14:42:11,983 buildarr:1 buildarr.cli.run [INFO] Finished loading instance configurations
2023-11-05 14:42:11,983 buildarr:1 buildarr.cli.run [INFO] Running with plugins: prowlarr
2023-11-05 14:42:11,983 buildarr:1 buildarr.cli.run [INFO] Resolving instance dependencies
2023-11-05 14:42:11,983 buildarr:1 buildarr.cli.run [INFO] Finished resolving instance dependencies
2023-11-05 14:42:11,983 buildarr:1 buildarr.cli.run [INFO] Rendering instance configuration dynamic attributes
2023-11-05 14:42:11,983 buildarr:1 buildarr.cli.run [INFO] Finished rendering instance configuration dynamic attributes
2023-11-05 14:42:11,983 buildarr:1 buildarr.cli.run [INFO] Loading secrets file from '/secrets/secrets.json'
2023-11-05 14:42:11,984 buildarr:1 buildarr.cli.run [INFO] Secrets file does not exist, will create new file
2023-11-05 14:42:11,984 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Checking secrets
2023-11-05 14:42:11,984 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Connection test failed using cached secrets (or not cached), fetching secrets
2023-11-05 14:42:11,988 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Connection test successful using fetched secrets
2023-11-05 14:42:11,988 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Finished checking secrets
2023-11-05 14:42:11,988 buildarr:1 buildarr.cli.run [INFO] Saving updated secrets file to '/secrets/secrets.json'
2023-11-05 14:42:11,989 buildarr:1 buildarr.cli.run [INFO] Finished saving updated secrets file
2023-11-05 14:42:11,989 buildarr:1 buildarr.cli.run [INFO] Performing post-initialisation configuration render
2023-11-05 14:42:11,989 buildarr:1 buildarr.cli.run [INFO] Finished performing post-initialisation configuration render
2023-11-05 14:42:11,989 buildarr:1 buildarr.cli.run [INFO] Updating configuration on remote instances
2023-11-05 14:42:11,989 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Fetching remote configuration to check if updates are required
2023-11-05 14:42:12,036 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Finished fetching remote configuration
2023-11-05 14:42:12,044 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Updating remote configuration
2023-11-05 14:42:12,060 buildarr:1 buildarr.config.base [INFO] <prowlarr> (default) prowlarr.settings.apps.applications.definitions['Radarr'].prowlarr_url: 'http://prowlarr.prowlarr' -> (created)
2023-11-05 14:42:12,060 buildarr:1 buildarr.config.base [INFO] <prowlarr> (default) prowlarr.settings.apps.applications.definitions['Radarr'].base_url: 'http://radarr.radarr' -> (created)
2023-11-05 14:42:12,060 buildarr:1 buildarr.config.base [INFO] <prowlarr> (default) prowlarr.settings.apps.applications.definitions['Radarr'].sync_level: 'full-sync' -> (created)
2023-11-05 14:42:12,060 buildarr:1 buildarr.config.base [INFO] <prowlarr> (default) prowlarr.settings.apps.applications.definitions['Radarr'].sync_categories: {'movies/sd', 'movies/hd', 'movies/other', 'movies/foreign', 'movies', 'movies/dvd', 'movies/bluray', 'movies/uhd', 'movies/web-dl', 'movies/3d'} -> (created)
2023-11-05 14:42:12,060 buildarr:1 buildarr.config.base [INFO] <prowlarr> (default) prowlarr.settings.apps.applications.definitions['Radarr'].tags: set() -> (created)
2023-11-05 14:42:12,060 buildarr:1 buildarr.config.base [INFO] <prowlarr> (default) prowlarr.settings.apps.applications.definitions['Radarr'].api_key: '**********' -> (created)
Traceback (most recent call last):
File "/usr/local/bin/buildarr", line 8, in <module>
sys.exit(main())
^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 568, in daemon
).start()
^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 113, in start
self._initial_run()
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 226, in _initial_run
run_apply(secrets_file_path=self._secrets_file_path)
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 300, in _run
if manager.update_remote(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/manager/__init__.py", line 192, in update_remote
return local_instance_config.update_remote(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 272, in update_remote
if isinstance(field, ConfigBase) and field.update_remote(
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/__init__.py", line 70, in update_remote
self.apps.update_remote(
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 272, in update_remote
if isinstance(field, ConfigBase) and field.update_remote(
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 740, in update_remote
local_application._create_remote(
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 207, in _create_remote
remote_attrs = {"name": application_name, **api_schema, **set_attrs}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'ApplicationResource' object is not a mapping
Note that no application is created in Prowlarr. Does radarr actually need to exist for the config the successfully push? I know this is required in the Prowlarr UI but I hoped this would not be the case through buildarr/ the api.
Checklist:
v0.4.3
$ git log --oneline --decorate v0.4.2..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/6782156880Prowlarr v1.13 introduced a change where any passwords or API keys returned via the API (and to the UI) are obfuscated with * characters.
This makes it impossible to idempotently check and update resources with API keys or passwords in them. It also means the values returned by the API no longer satisfy the value constraints Buildarr places on the configuration.
2024-04-25 15:32:04,558 buildarr:82 buildarr.cli.run [INFO] Finished updating configuration on remote instances
2024-04-25 15:32:04,559 buildarr:82 buildarr.cli.run [INFO] Deleting unmanaged/unused resources on remote instances
2024-04-25 15:32:04,559 buildarr:82 buildarr.cli.run [INFO] <prowlarr> (default) Refetching remote configuration to delete unused resources
Traceback (most recent call last):
File "/usr/local/bin/buildarr", line 8, in <module>
sys.exit(main())
^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 101, in run
_run(use_plugins)
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 273, in _run
remote_instance_config = manager.from_remote(instance_config, instance_secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/manager/__init__.py", line 171, in from_remote
return instance_config.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/__init__.py", line 169, in from_remote
settings=ProwlarrSettings.from_remote(secrets),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 85, in from_remote
fields[field_name] = field.type_.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 85, in from_remote
fields[field_name] = field.type_.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 695, in from_remote
definitions={
^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 698, in <dictcomp>
]._from_remote(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 178, in _from_remote
return cls(
^^^^
File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for RadarrApplication
api_key
ensure this value has at least 32 characters (type=value_error.any_str.min_length; limit_value=32)
As a temporary workaround to get Buildarr working for users again, loosen the restrictions
Related:
Checklist:
v0.3.0
$ git log --oneline --decorate v0.2.0..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/6127176687Cleans up the code slightly and ensures the URL is always valid during parsing.
2023-09-01 20:12:09,730 buildarr:1 buildarr_prowlarr.config.settings.indexers.indexers [INFO] <prowlarr> (prowlarr) prowlarr.settings.indexers.indexers.definitions['example'].fields['torrentBaseSettings.seedRatio']: None -> ''
Checklist:
v0.5.2
$ git log --oneline --decorate v0.5.1..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/8847358229Checklist:
v0.5.0
$ git log --oneline --decorate v0.4.3..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/6839538877Hi once again ๐.
I am trying to use Buildarr for all my *arr setups in my repo here. Here is my builldarr config.
When I startup the pod, which is configured to update Prowlarr, I get this error message (I'm using debug level logging):
2024-06-22 23:04:35,338 buildarr:1 buildarr_prowlarr.config.settings.indexers.indexers [INFO] <prowlarr> (prowlarr) prowlarr.settings.indexers.indexers.definitions['Orpheus'].fields['torrentBaseSettings.appMinimumSeeders']: None (created)
2024-06-22 23:04:35,338 buildarr:1 buildarr_prowlarr.config.settings.indexers.indexers [INFO] <prowlarr> (prowlarr) prowlarr.settings.indexers.indexers.definitions['Orpheus'].fields['torrentBaseSettings.seedRatio']: None (created)
2024-06-22 23:04:35,338 buildarr:1 buildarr_prowlarr.config.settings.indexers.indexers [INFO] <prowlarr> (prowlarr) prowlarr.settings.indexers.indexers.definitions['Orpheus'].fields['torrentBaseSettings.seedTime']: None (created)
2024-06-22 23:04:35,338 buildarr:1 buildarr_prowlarr.config.settings.indexers.indexers [INFO] <prowlarr> (prowlarr) prowlarr.settings.indexers.indexers.definitions['Orpheus'].fields['torrentBaseSettings.packSeedTime']: None (created)
2024-06-22 23:04:35,347 buildarr:1 urllib3.connectionpool [DEBUG] <prowlarr> (prowlarr) Starting new HTTP connection (1): prowlarr.media.svc.cluster.local:80
send: b'POST /api/v1/indexer HTTP/1.1\r\nHost: prowlarr.media.svc.cluster.local\r\nAccept-Encoding: identity\r\nContent-Length: 6336\r\nAccept: application/json\r\nContent-Type: application/json\r\nUser-Agent: prowlarr-py/v0.4.1\r\nX-Api-Key: foobarbazfoobarbazfoobarbazfooba\r\n\r\n'
send: b'<REDACTED>'
reply: 'HTTP/1.1 400 Bad Request\r\n'
header: Content-Type: application/json
header: Date: Sat, 22 Jun 2024 23:04:35 GMT
header: Server: Kestrel
header: Cache-Control: no-cache,no-store
header: Expires: -1
header: Pragma: no-cache
header: Transfer-Encoding: chunked
2024-06-22 23:04:36,495 buildarr:1 urllib3.connectionpool [DEBUG] <prowlarr> (prowlarr) http://prowlarr.media.svc.cluster.local:80 "POST /api/v1/indexer HTTP/1.1" 400 None
2024-06-22 23:04:36,497 buildarr:1 prowlarr.rest [DEBUG] <prowlarr> (prowlarr) response body: b'[\n {\n "isWarning": false,\n "propertyName": "",\n "errorMessage": "Query successful, but no results were returned from your indexer. This may be an issue with the indexer, your indexer category settings, or other indexer settings such as search freeleech only etc.",\n "severity": "error"\n }\n]'
2024-06-22 23:04:36,498 buildarr:1 buildarr.cli.daemon [ERROR] <prowlarr> (prowlarr) An error occurred while applying initial configuration: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json', 'Date': 'Sat, 22 Jun 2024 23:04:35 GMT', 'Server': 'Kestrel', 'Cache-Control': 'no-cache,no-store', 'Expires': '-1', 'Pragma': 'no-cache', 'Transfer-Encoding': 'chunked'})
HTTP response body: [
{
"isWarning": false,
"propertyName": "",
"errorMessage": "Query successful, but no results were returned from your indexer. This may be an issue with the indexer, your indexer category settings, or other indexer settings such as search freeleech only etc.",
"severity": "error"
}
]
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 215, in _initial_run
run_apply()
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 248, in _run
if manager.update_remote(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/manager/__init__.py", line 192, in update_remote
return local_instance_config.update_remote(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 272, in update_remote
if isinstance(field, ConfigBase) and field.update_remote(
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/__init__.py", line 76, in update_remote
self.indexers.update_remote(
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/indexers/__init__.py", line 54, in update_remote
self.indexers.update_remote(
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/indexers/indexers.py", line 695, in update_remote
indexer._create_remote(
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/indexers/indexers.py", line 413, in _create_remote
prowlarr.IndexerApi(api_client).create_indexer(
File "pydantic/decorator.py", line 40, in pydantic.decorator.validate_arguments.validate.wrapper_function
File "pydantic/decorator.py", line 134, in pydantic.decorator.ValidatedFunction.call
File "pydantic/decorator.py", line 206, in pydantic.decorator.ValidatedFunction.execute
File "/usr/local/lib/python3.11/site-packages/prowlarr/api/indexer_api.py", line 76, in create_indexer
return self.create_indexer_with_http_info(force_save, indexer_resource, **kwargs) # noqa: E501
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pydantic/decorator.py", line 40, in pydantic.decorator.validate_arguments.validate.wrapper_function
File "pydantic/decorator.py", line 134, in pydantic.decorator.ValidatedFunction.call
File "pydantic/decorator.py", line 206, in pydantic.decorator.ValidatedFunction.execute
File "/usr/local/lib/python3.11/site-packages/prowlarr/api/indexer_api.py", line 184, in create_indexer_with_http_info
return self.api_client.call_api(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/prowlarr/api_client.py", line 413, in call_api
return self.__call_api(resource_path, method,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/prowlarr/api_client.py", line 228, in __call_api
raise e
File "/usr/local/lib/python3.11/site-packages/prowlarr/api_client.py", line 218, in __call_api
response_data = self.request(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/prowlarr/api_client.py", line 457, in request
return self.rest_client.post_request(url,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/prowlarr/rest.py", line 270, in post_request
return self.request("POST", url,
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/prowlarr/rest.py", line 229, in request
raise ApiException(http_resp=r)
prowlarr.exceptions.ApiException: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json', 'Date': 'Sat, 22 Jun 2024 23:04:35 GMT', 'Server': 'Kestrel', 'Cache-Control': 'no-cache,no-store', 'Expires': '-1', 'Pragma': 'no-cache', 'Transfer-Encoding': 'chunked'})
HTTP response body: [
{
"isWarning": false,
"propertyName": "",
"errorMessage": "Query successful, but no results were returned from your indexer. This may be an issue with the indexer, your indexer category settings, or other indexer settings such as search freeleech only etc.",
"severity": "error"
}
]
2024-06-22 23:04:36,516 buildarr:1 buildarr.cli.daemon [WARNING] Aborted applying initial configuration
2024-06-22 23:04:36,615 buildarr:1 buildarr.cli.daemon [INFO] Setting up signal handlers
2024-06-22 23:04:36,616 buildarr:1 buildarr.cli.daemon [DEBUG] Setting up SIGINT signal handler
2024-06-22 23:04:36,616 buildarr:1 buildarr.cli.daemon [DEBUG] Setting up SIGTERM signal handler
2024-06-22 23:04:36,617 buildarr:1 buildarr.cli.daemon [DEBUG] Setting up SIGHUP signal handler
2024-06-22 23:04:36,617 buildarr:1 buildarr.cli.daemon [INFO] Finished setting up signal handlers
2024-06-22 23:04:36,618 buildarr:1 buildarr.cli.daemon [INFO] The next run will be at 2024-06-23 02:30
2024-06-22 23:04:36,619 buildarr:1 buildarr.cli.daemon [INFO] Buildarr ready.
2024-06-22 23:04:36,619 buildarr:1 buildarr.cli.daemon [DEBUG] Thread 'MainThread' releasing daemon run lock
The logs seem to indicate that we're sending an invalid request that's somehow related to the indexer results ๐ค? I'm struggling to make sense of that one. If you have some time to take a look, any pointers would be appreciated here ๐.
Checklist:
v0.4.2
$ git log --oneline --decorate v0.4.1..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/6777982330Checklist:
v0.2.0
$ git log --oneline --decorate v0.1.1..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/4711619090Create the Buildarr plugin for configuring and managing the Prowlarr indexer manager.
Checklist:
v0.5.3
$ git log --oneline --decorate v0.5.2..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/8871167907At the moment, the Prowlarr plugin does not handle dry runs, and carries on as it normally would.
We need to add support for this.
Checklist:
v0.4.1
$ git log --oneline --decorate v0.4.0..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/6759277345Checklist:
v0.1.1
$ git log --oneline --decorate v0.1.0..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/4644718992delete_remote
stageBaseIntEnum
request_timeout
from global statevalidate_assignment
Discussed in buildarr/buildarr#206.
Looks like this is a new parameter for *Arr-type application definitions, added in Prowlarr v1.15.0.4631.
Add support for this field as sync_reject_blocklisted_torrent_hashes
, and make the application updating code tolerant to new attributes being added in the future.
2024-04-27 15:48:06,550 buildarr:65 buildarr.cli.run [INFO] <prowlarr> (default) Fetching remote configuration to check if updates are required
2024-04-27 15:48:06,660 buildarr:65 buildarr.cli.run [INFO] <prowlarr> (default) Finished fetching remote configuration
2024-04-27 15:48:06,684 buildarr:65 buildarr.cli.run [INFO] <prowlarr> (default) Updating remote configuration
2024-04-27 15:48:06,721 buildarr:65 buildarr.config.base [INFO] <prowlarr> (default) prowlarr.settings.apps.applications.definitions['Sonarr'].api_key: '**********' -> '**********'
Traceback (most recent call last):
File "/usr/local/bin/buildarr", line 8, in <module>
sys.exit(main())
^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 101, in run
_run(use_plugins)
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 248, in _run
if manager.update_remote(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/manager/__init__.py", line 192, in update_remote
return local_instance_config.update_remote(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 272, in update_remote
if isinstance(field, ConfigBase) and field.update_remote(
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/__init__.py", line 70, in update_remote
self.apps.update_remote(
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 272, in update_remote
if isinstance(field, ConfigBase) and field.update_remote(
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 748, in update_remote
elif local_application._update_remote(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 233, in _update_remote
set_attrs["fields"] = [
^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 234, in <listcomp>
{**f, "value": field_values[f["name"]]} for f in api_schema.to_dict()["fields"]
~~~~~~~~~~~~^^^^^^^^^^^
KeyError: 'syncRejectBlocklistedTorrentHashesWhileGrabbing'
The Prowlarr plugin requires Buildarr v0.6.1 when using email notification connections, due to that version containing built-in parsing support for NameEmail
type attributes.
It otherwise works fine on v0.6.0, however, and on new Python installations v0.6.1 will be installed, so it is not as urgent an issue.
Checklist:
v0.3.1
$ git log --oneline --decorate v0.3.0..HEAD
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/6128973991Checklist:
v0.1.0
tool.poetry.version
field in pyproject.toml
docs/release-notes.md
main
: https://github.com/buildarr/buildarr-prowlarr/actions/runs/4641942527Incompatible changes:
state.secrets
has been replaced with state.instance_secrets
(type Mapping[str, Mapping[str, SecretsPlugin]
)According to the docs AuthenticationMethod should be set to External if authentication should be disabled but this value is not supported by buildarr.
https://wiki.servarr.com/prowlarr/faq#authentication-method
Note that this value comes from the remote config and is accepted by prowlarr:
2023-11-05 14:38:37,349 buildarr:1 buildarr.cli.daemon [INFO] Buildarr version 0.6.1 (log level: INFO)
2023-11-05 14:38:37,349 buildarr:1 buildarr.cli.daemon [INFO] Loading configuration file '/config/buildarr.yml'
2023-11-05 14:38:37,377 buildarr:1 buildarr.cli.daemon [INFO] Finished loading configuration file
2023-11-05 14:38:37,377 buildarr:1 buildarr.cli.daemon [INFO] Daemon configuration:
2023-11-05 14:38:37,377 buildarr:1 buildarr.cli.daemon [INFO] - Watch configuration files: Yes
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Configuration files to watch:
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - /config/buildarr.yml
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - /prowlarr/prowlarr.yaml
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Update at:
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Monday 03:00
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Tuesday 03:00
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Wednesday 03:00
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Thursday 03:00
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Friday 03:00
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Saturday 03:00
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] - Sunday 03:00
2023-11-05 14:38:37,378 buildarr:1 buildarr.cli.daemon [INFO] Scheduling update jobs
2023-11-05 14:38:37,379 buildarr:1 buildarr.cli.daemon [INFO] Finished scheduling update jobs
2023-11-05 14:38:37,379 buildarr:1 buildarr.cli.daemon [INFO] Enabling config file monitoring
2023-11-05 14:38:37,379 buildarr:1 buildarr.cli.daemon [INFO] Finished enabling config file monitoring
2023-11-05 14:38:37,379 buildarr:1 buildarr.cli.daemon [INFO] Applying initial configuration
2023-11-05 14:38:37,386 buildarr:1 buildarr.cli.run [INFO] Loaded plugins: jellyseerr (0.2.0), prowlarr (0.4.0), radarr (0.1.1), sonarr (0.5.4)
2023-11-05 14:38:37,386 buildarr:1 buildarr.cli.run [INFO] Loading instance configurations
2023-11-05 14:38:37,387 buildarr:1 buildarr.cli.run [INFO] Finished loading instance configurations
2023-11-05 14:38:37,387 buildarr:1 buildarr.cli.run [INFO] Running with plugins: prowlarr
2023-11-05 14:38:37,388 buildarr:1 buildarr.cli.run [INFO] Resolving instance dependencies
2023-11-05 14:38:37,388 buildarr:1 buildarr.cli.run [INFO] Finished resolving instance dependencies
2023-11-05 14:38:37,388 buildarr:1 buildarr.cli.run [INFO] Rendering instance configuration dynamic attributes
2023-11-05 14:38:37,388 buildarr:1 buildarr.cli.run [INFO] Finished rendering instance configuration dynamic attributes
2023-11-05 14:38:37,388 buildarr:1 buildarr.cli.run [INFO] Loading secrets file from '/secrets/secrets.json'
2023-11-05 14:38:37,389 buildarr:1 buildarr.cli.run [INFO] Finished loading secrets file
2023-11-05 14:38:37,389 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Checking secrets
2023-11-05 14:38:37,393 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Connection test successful using cached secrets
2023-11-05 14:38:37,393 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Finished checking secrets
2023-11-05 14:38:37,393 buildarr:1 buildarr.cli.run [INFO] Saving updated secrets file to '/secrets/secrets.json'
2023-11-05 14:38:37,394 buildarr:1 buildarr.cli.run [INFO] Finished saving updated secrets file
2023-11-05 14:38:37,394 buildarr:1 buildarr.cli.run [INFO] Performing post-initialisation configuration render
2023-11-05 14:38:37,394 buildarr:1 buildarr.cli.run [INFO] Finished performing post-initialisation configuration render
2023-11-05 14:38:37,394 buildarr:1 buildarr.cli.run [INFO] Updating configuration on remote instances
2023-11-05 14:38:37,394 buildarr:1 buildarr.cli.run [INFO] <prowlarr> (default) Fetching remote configuration to check if updates are required
Traceback (most recent call last):
File "/usr/local/bin/buildarr", line 8, in <module>
sys.exit(main())
^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 568, in daemon
).start()
^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 113, in start
self._initial_run()
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/daemon.py", line 226, in _initial_run
run_apply(secrets_file_path=self._secrets_file_path)
File "/usr/local/lib/python3.11/site-packages/buildarr/cli/run.py", line 287, in _run
remote_instance_config = manager.from_remote(instance_config, instance_secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/manager/__init__.py", line 171, in from_remote
return instance_config.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/__init__.py", line 157, in from_remote
settings=ProwlarrSettings.from_remote(secrets),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 85, in from_remote
fields[field_name] = field.type_.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/general.py", line 585, in from_remote
security=SecurityGeneralSettings._from_remote(remote_attrs),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/general.py", line 107, in _from_remote
return cls(**cls.get_local_attrs(cls._remote_map, remote_attrs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 243, in get_local_attrs
local_attrs[attr_name] = decoder(remote_attr)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 195, in <lambda>
lambda v: cls._decode_attr(attr_name, v),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 714, in _decode_attr
return cls._decode_attr_(cls.__fields__[attr_name].outer_type_, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 740, in _decode_attr_
return type_tree[-1](value)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/enum.py", line 712, in __call__
return cls.__new__(cls, value)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/enum.py", line 1135, in __new__
raise ve_exc
ValueError: <AuthenticationType.EXTERNAL: 'external'> is not a valid AuthenticationMethod
Error when dumping existing config:
Traceback (most recent call last):
File "/usr/local/bin/buildarr", line 8, in <module>
sys.exit(main())
^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/cli.py", line 81, in dump_config
.from_remote(
^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/manager/__init__.py", line 171, in from_remote
return instance_config.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/__init__.py", line 157, in from_remote
settings=ProwlarrSettings.from_remote(secrets),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 85, in from_remote
fields[field_name] = field.type_.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 85, in from_remote
fields[field_name] = field.type_.from_remote(secrets)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 684, in from_remote
definitions={
^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 687, in <dictcomp>
]._from_remote(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 162, in _from_remote
**cls.get_local_attrs(
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr/config/base.py", line 243, in get_local_attrs
local_attrs[attr_name] = decoder(remote_attr)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 120, in <lambda>
"decoder": lambda v: cls._sync_categories_decoder(category_ids, v),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 143, in _sync_categories_decoder
return set(category_names[category_id] for category_id in api_sync_categories)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/buildarr_prowlarr/config/settings/apps/applications.py", line 143, in <genexpr>
return set(category_names[category_id] for category_id in api_sync_categories)
~~~~~~~~~~~~~~^^^^^^^^^^^^^
KeyError: 2000
API content:
[
{
"syncLevel": "fullSync",
"name": "Radarr",
"fields": [
{
"order": 0,
"name": "prowlarrUrl",
"label": "Prowlarr Server",
"helpText": "Prowlarr server URL as Radarr sees it, including http(s)://, port, and urlbase if needed",
"value": "http://prowlarr:9696",
"type": "textbox",
"advanced": false,
"placeholder": "http://localhost:9696",
"isFloat": false
},
{
"order": 1,
"name": "baseUrl",
"label": "Radarr Server",
"helpText": "URL used to connect to Radarr server, including http(s)://, port, and urlbase if required",
"value": "http://radarr:7878",
"type": "textbox",
"advanced": false,
"placeholder": "http://localhost:7878",
"isFloat": false
},
{
"order": 2,
"name": "apiKey",
"label": "API Key",
"helpText": "The ApiKey generated by Radarr in Settings/General",
"value": "",
"type": "textbox",
"advanced": false,
"isFloat": false
},
{
"order": 3,
"name": "syncCategories",
"label": "Sync Categories",
"helpText": "Only Indexers that support these categories will be synced",
"value": [
2000,
2010,
2020,
2030,
2040,
2045,
2050,
2060,
2070,
2080
],
"type": "select",
"advanced": true,
"selectOptions": [
{
"value": 0,
"name": "Other",
"order": 0,
"hint": "(0)"
},
{
"value": 10,
"name": "Other/Misc",
"order": 0,
"hint": "(10)",
"parentValue": 0
},
{
"value": 20,
"name": "Other/Hashed",
"order": 0,
"hint": "(20)",
"parentValue": 0
},
{
"value": 1000,
"name": "Console",
"order": 0,
"hint": "(1000)"
},
{
"value": 1010,
"name": "Console/NDS",
"order": 0,
"hint": "(1010)",
"parentValue": 1000
},
{
"value": 1020,
"name": "Console/PSP",
"order": 0,
"hint": "(1020)",
"parentValue": 1000
},
{
"value": 1030,
"name": "Console/Wii",
"order": 0,
"hint": "(1030)",
"parentValue": 1000
},
{
"value": 1040,
"name": "Console/XBox",
"order": 0,
"hint": "(1040)",
"parentValue": 1000
},
{
"value": 1050,
"name": "Console/XBox 360",
"order": 0,
"hint": "(1050)",
"parentValue": 1000
},
{
"value": 1060,
"name": "Console/Wiiware",
"order": 0,
"hint": "(1060)",
"parentValue": 1000
},
{
"value": 1070,
"name": "Console/XBox 360 DLC",
"order": 0,
"hint": "(1070)",
"parentValue": 1000
},
{
"value": 1080,
"name": "Console/PS3",
"order": 0,
"hint": "(1080)",
"parentValue": 1000
},
{
"value": 1090,
"name": "Console/Other",
"order": 0,
"hint": "(1090)",
"parentValue": 1000
},
{
"value": 1110,
"name": "Console/3DS",
"order": 0,
"hint": "(1110)",
"parentValue": 1000
},
{
"value": 1120,
"name": "Console/PS Vita",
"order": 0,
"hint": "(1120)",
"parentValue": 1000
},
{
"value": 1130,
"name": "Console/WiiU",
"order": 0,
"hint": "(1130)",
"parentValue": 1000
},
{
"value": 1140,
"name": "Console/XBox One",
"order": 0,
"hint": "(1140)",
"parentValue": 1000
},
{
"value": 1180,
"name": "Console/PS4",
"order": 0,
"hint": "(1180)",
"parentValue": 1000
},
{
"value": 2000,
"name": "Movies",
"order": 0,
"hint": "(2000)"
},
{
"value": 2010,
"name": "Movies/Foreign",
"order": 0,
"hint": "(2010)",
"parentValue": 2000
},
{
"value": 2020,
"name": "Movies/Other",
"order": 0,
"hint": "(2020)",
"parentValue": 2000
},
{
"value": 2030,
"name": "Movies/SD",
"order": 0,
"hint": "(2030)",
"parentValue": 2000
},
{
"value": 2040,
"name": "Movies/HD",
"order": 0,
"hint": "(2040)",
"parentValue": 2000
},
{
"value": 2045,
"name": "Movies/UHD",
"order": 0,
"hint": "(2045)",
"parentValue": 2000
},
{
"value": 2050,
"name": "Movies/BluRay",
"order": 0,
"hint": "(2050)",
"parentValue": 2000
},
{
"value": 2060,
"name": "Movies/3D",
"order": 0,
"hint": "(2060)",
"parentValue": 2000
},
{
"value": 2070,
"name": "Movies/DVD",
"order": 0,
"hint": "(2070)",
"parentValue": 2000
},
{
"value": 2080,
"name": "Movies/WEB-DL",
"order": 0,
"hint": "(2080)",
"parentValue": 2000
},
{
"value": 2090,
"name": "Movies/x265",
"order": 0,
"hint": "(2090)",
"parentValue": 2000
},
{
"value": 3000,
"name": "Audio",
"order": 0,
"hint": "(3000)"
},
{
"value": 3010,
"name": "Audio/MP3",
"order": 0,
"hint": "(3010)",
"parentValue": 3000
},
{
"value": 3020,
"name": "Audio/Video",
"order": 0,
"hint": "(3020)",
"parentValue": 3000
},
{
"value": 3030,
"name": "Audio/Audiobook",
"order": 0,
"hint": "(3030)",
"parentValue": 3000
},
{
"value": 3040,
"name": "Audio/Lossless",
"order": 0,
"hint": "(3040)",
"parentValue": 3000
},
{
"value": 3050,
"name": "Audio/Other",
"order": 0,
"hint": "(3050)",
"parentValue": 3000
},
{
"value": 3060,
"name": "Audio/Foreign",
"order": 0,
"hint": "(3060)",
"parentValue": 3000
},
{
"value": 4000,
"name": "PC",
"order": 0,
"hint": "(4000)"
},
{
"value": 4010,
"name": "PC/0day",
"order": 0,
"hint": "(4010)",
"parentValue": 4000
},
{
"value": 4020,
"name": "PC/ISO",
"order": 0,
"hint": "(4020)",
"parentValue": 4000
},
{
"value": 4030,
"name": "PC/Mac",
"order": 0,
"hint": "(4030)",
"parentValue": 4000
},
{
"value": 4040,
"name": "PC/Mobile-Other",
"order": 0,
"hint": "(4040)",
"parentValue": 4000
},
{
"value": 4050,
"name": "PC/Games",
"order": 0,
"hint": "(4050)",
"parentValue": 4000
},
{
"value": 4060,
"name": "PC/Mobile-iOS",
"order": 0,
"hint": "(4060)",
"parentValue": 4000
},
{
"value": 4070,
"name": "PC/Mobile-Android",
"order": 0,
"hint": "(4070)",
"parentValue": 4000
},
{
"value": 5000,
"name": "TV",
"order": 0,
"hint": "(5000)"
},
{
"value": 5010,
"name": "TV/WEB-DL",
"order": 0,
"hint": "(5010)",
"parentValue": 5000
},
{
"value": 5020,
"name": "TV/Foreign",
"order": 0,
"hint": "(5020)",
"parentValue": 5000
},
{
"value": 5030,
"name": "TV/SD",
"order": 0,
"hint": "(5030)",
"parentValue": 5000
},
{
"value": 5040,
"name": "TV/HD",
"order": 0,
"hint": "(5040)",
"parentValue": 5000
},
{
"value": 5045,
"name": "TV/UHD",
"order": 0,
"hint": "(5045)",
"parentValue": 5000
},
{
"value": 5050,
"name": "TV/Other",
"order": 0,
"hint": "(5050)",
"parentValue": 5000
},
{
"value": 5060,
"name": "TV/Sport",
"order": 0,
"hint": "(5060)",
"parentValue": 5000
},
{
"value": 5070,
"name": "TV/Anime",
"order": 0,
"hint": "(5070)",
"parentValue": 5000
},
{
"value": 5080,
"name": "TV/Documentary",
"order": 0,
"hint": "(5080)",
"parentValue": 5000
},
{
"value": 5090,
"name": "TV/x265",
"order": 0,
"hint": "(5090)",
"parentValue": 5000
},
{
"value": 6000,
"name": "XXX",
"order": 0,
"hint": "(6000)"
},
{
"value": 6010,
"name": "XXX/DVD",
"order": 0,
"hint": "(6010)",
"parentValue": 6000
},
{
"value": 6020,
"name": "XXX/WMV",
"order": 0,
"hint": "(6020)",
"parentValue": 6000
},
{
"value": 6030,
"name": "XXX/XviD",
"order": 0,
"hint": "(6030)",
"parentValue": 6000
},
{
"value": 6040,
"name": "XXX/x264",
"order": 0,
"hint": "(6040)",
"parentValue": 6000
},
{
"value": 6045,
"name": "XXX/UHD",
"order": 0,
"hint": "(6045)",
"parentValue": 6000
},
{
"value": 6050,
"name": "XXX/Pack",
"order": 0,
"hint": "(6050)",
"parentValue": 6000
},
{
"value": 6060,
"name": "XXX/ImageSet",
"order": 0,
"hint": "(6060)",
"parentValue": 6000
},
{
"value": 6070,
"name": "XXX/Other",
"order": 0,
"hint": "(6070)",
"parentValue": 6000
},
{
"value": 6080,
"name": "XXX/SD",
"order": 0,
"hint": "(6080)",
"parentValue": 6000
},
{
"value": 6090,
"name": "XXX/WEB-DL",
"order": 0,
"hint": "(6090)",
"parentValue": 6000
},
{
"value": 7000,
"name": "Books",
"order": 0,
"hint": "(7000)"
},
{
"value": 7010,
"name": "Books/Mags",
"order": 0,
"hint": "(7010)",
"parentValue": 7000
},
{
"value": 7020,
"name": "Books/EBook",
"order": 0,
"hint": "(7020)",
"parentValue": 7000
},
{
"value": 7030,
"name": "Books/Comics",
"order": 0,
"hint": "(7030)",
"parentValue": 7000
},
{
"value": 7040,
"name": "Books/Technical",
"order": 0,
"hint": "(7040)",
"parentValue": 7000
},
{
"value": 7050,
"name": "Books/Other",
"order": 0,
"hint": "(7050)",
"parentValue": 7000
},
{
"value": 7060,
"name": "Books/Foreign",
"order": 0,
"hint": "(7060)",
"parentValue": 7000
},
{
"value": 8000,
"name": "Other",
"order": 0,
"hint": "(8000)"
},
{
"value": 8010,
"name": "Other/Misc",
"order": 0,
"hint": "(8010)",
"parentValue": 8000
},
{
"value": 8020,
"name": "Other/Hashed",
"order": 0,
"hint": "(8020)",
"parentValue": 8000
}
],
"isFloat": false
}
],
"implementationName": "Radarr",
"implementation": "Radarr",
"configContract": "RadarrSettings",
"infoLink": "https://wiki.servarr.com/prowlarr/supported#radarr",
"tags": [],
"id": 1
},
{
"syncLevel": "fullSync",
"name": "Sonarr",
"fields": [
{
"order": 0,
"name": "prowlarrUrl",
"label": "Prowlarr Server",
"helpText": "Prowlarr server URL as Sonarr sees it, including http(s)://, port, and urlbase if needed",
"value": "http://prowlarr:9696",
"type": "textbox",
"advanced": false,
"placeholder": "http://localhost:9696",
"isFloat": false
},
{
"order": 1,
"name": "baseUrl",
"label": "Sonarr Server",
"helpText": "URL used to connect to Sonarr server, including http(s)://, port, and urlbase if required",
"value": "http://sonarr:8989",
"type": "textbox",
"advanced": false,
"placeholder": "http://localhost:8989",
"isFloat": false
},
{
"order": 2,
"name": "apiKey",
"label": "API Key",
"helpText": "The ApiKey generated by Sonarr in Settings/General",
"value": "",
"type": "textbox",
"advanced": false,
"isFloat": false
},
{
"order": 3,
"name": "syncCategories",
"label": "Sync Categories",
"helpText": "Only Indexers that support these categories will be synced",
"value": [
5000,
5010,
5020,
5030,
5040,
5045,
5050,
5070
],
"type": "select",
"advanced": true,
"selectOptions": [
{
"value": 0,
"name": "Other",
"order": 0,
"hint": "(0)"
},
{
"value": 10,
"name": "Other/Misc",
"order": 0,
"hint": "(10)",
"parentValue": 0
},
{
"value": 20,
"name": "Other/Hashed",
"order": 0,
"hint": "(20)",
"parentValue": 0
},
{
"value": 1000,
"name": "Console",
"order": 0,
"hint": "(1000)"
},
{
"value": 1010,
"name": "Console/NDS",
"order": 0,
"hint": "(1010)",
"parentValue": 1000
},
{
"value": 1020,
"name": "Console/PSP",
"order": 0,
"hint": "(1020)",
"parentValue": 1000
},
{
"value": 1030,
"name": "Console/Wii",
"order": 0,
"hint": "(1030)",
"parentValue": 1000
},
{
"value": 1040,
"name": "Console/XBox",
"order": 0,
"hint": "(1040)",
"parentValue": 1000
},
{
"value": 1050,
"name": "Console/XBox 360",
"order": 0,
"hint": "(1050)",
"parentValue": 1000
},
{
"value": 1060,
"name": "Console/Wiiware",
"order": 0,
"hint": "(1060)",
"parentValue": 1000
},
{
"value": 1070,
"name": "Console/XBox 360 DLC",
"order": 0,
"hint": "(1070)",
"parentValue": 1000
},
{
"value": 1080,
"name": "Console/PS3",
"order": 0,
"hint": "(1080)",
"parentValue": 1000
},
{
"value": 1090,
"name": "Console/Other",
"order": 0,
"hint": "(1090)",
"parentValue": 1000
},
{
"value": 1110,
"name": "Console/3DS",
"order": 0,
"hint": "(1110)",
"parentValue": 1000
},
{
"value": 1120,
"name": "Console/PS Vita",
"order": 0,
"hint": "(1120)",
"parentValue": 1000
},
{
"value": 1130,
"name": "Console/WiiU",
"order": 0,
"hint": "(1130)",
"parentValue": 1000
},
{
"value": 1140,
"name": "Console/XBox One",
"order": 0,
"hint": "(1140)",
"parentValue": 1000
},
{
"value": 1180,
"name": "Console/PS4",
"order": 0,
"hint": "(1180)",
"parentValue": 1000
},
{
"value": 2000,
"name": "Movies",
"order": 0,
"hint": "(2000)"
},
{
"value": 2010,
"name": "Movies/Foreign",
"order": 0,
"hint": "(2010)",
"parentValue": 2000
},
{
"value": 2020,
"name": "Movies/Other",
"order": 0,
"hint": "(2020)",
"parentValue": 2000
},
{
"value": 2030,
"name": "Movies/SD",
"order": 0,
"hint": "(2030)",
"parentValue": 2000
},
{
"value": 2040,
"name": "Movies/HD",
"order": 0,
"hint": "(2040)",
"parentValue": 2000
},
{
"value": 2045,
"name": "Movies/UHD",
"order": 0,
"hint": "(2045)",
"parentValue": 2000
},
{
"value": 2050,
"name": "Movies/BluRay",
"order": 0,
"hint": "(2050)",
"parentValue": 2000
},
{
"value": 2060,
"name": "Movies/3D",
"order": 0,
"hint": "(2060)",
"parentValue": 2000
},
{
"value": 2070,
"name": "Movies/DVD",
"order": 0,
"hint": "(2070)",
"parentValue": 2000
},
{
"value": 2080,
"name": "Movies/WEB-DL",
"order": 0,
"hint": "(2080)",
"parentValue": 2000
},
{
"value": 2090,
"name": "Movies/x265",
"order": 0,
"hint": "(2090)",
"parentValue": 2000
},
{
"value": 3000,
"name": "Audio",
"order": 0,
"hint": "(3000)"
},
{
"value": 3010,
"name": "Audio/MP3",
"order": 0,
"hint": "(3010)",
"parentValue": 3000
},
{
"value": 3020,
"name": "Audio/Video",
"order": 0,
"hint": "(3020)",
"parentValue": 3000
},
{
"value": 3030,
"name": "Audio/Audiobook",
"order": 0,
"hint": "(3030)",
"parentValue": 3000
},
{
"value": 3040,
"name": "Audio/Lossless",
"order": 0,
"hint": "(3040)",
"parentValue": 3000
},
{
"value": 3050,
"name": "Audio/Other",
"order": 0,
"hint": "(3050)",
"parentValue": 3000
},
{
"value": 3060,
"name": "Audio/Foreign",
"order": 0,
"hint": "(3060)",
"parentValue": 3000
},
{
"value": 4000,
"name": "PC",
"order": 0,
"hint": "(4000)"
},
{
"value": 4010,
"name": "PC/0day",
"order": 0,
"hint": "(4010)",
"parentValue": 4000
},
{
"value": 4020,
"name": "PC/ISO",
"order": 0,
"hint": "(4020)",
"parentValue": 4000
},
{
"value": 4030,
"name": "PC/Mac",
"order": 0,
"hint": "(4030)",
"parentValue": 4000
},
{
"value": 4040,
"name": "PC/Mobile-Other",
"order": 0,
"hint": "(4040)",
"parentValue": 4000
},
{
"value": 4050,
"name": "PC/Games",
"order": 0,
"hint": "(4050)",
"parentValue": 4000
},
{
"value": 4060,
"name": "PC/Mobile-iOS",
"order": 0,
"hint": "(4060)",
"parentValue": 4000
},
{
"value": 4070,
"name": "PC/Mobile-Android",
"order": 0,
"hint": "(4070)",
"parentValue": 4000
},
{
"value": 5000,
"name": "TV",
"order": 0,
"hint": "(5000)"
},
{
"value": 5010,
"name": "TV/WEB-DL",
"order": 0,
"hint": "(5010)",
"parentValue": 5000
},
{
"value": 5020,
"name": "TV/Foreign",
"order": 0,
"hint": "(5020)",
"parentValue": 5000
},
{
"value": 5030,
"name": "TV/SD",
"order": 0,
"hint": "(5030)",
"parentValue": 5000
},
{
"value": 5040,
"name": "TV/HD",
"order": 0,
"hint": "(5040)",
"parentValue": 5000
},
{
"value": 5045,
"name": "TV/UHD",
"order": 0,
"hint": "(5045)",
"parentValue": 5000
},
{
"value": 5050,
"name": "TV/Other",
"order": 0,
"hint": "(5050)",
"parentValue": 5000
},
{
"value": 5060,
"name": "TV/Sport",
"order": 0,
"hint": "(5060)",
"parentValue": 5000
},
{
"value": 5070,
"name": "TV/Anime",
"order": 0,
"hint": "(5070)",
"parentValue": 5000
},
{
"value": 5080,
"name": "TV/Documentary",
"order": 0,
"hint": "(5080)",
"parentValue": 5000
},
{
"value": 5090,
"name": "TV/x265",
"order": 0,
"hint": "(5090)",
"parentValue": 5000
},
{
"value": 6000,
"name": "XXX",
"order": 0,
"hint": "(6000)"
},
{
"value": 6010,
"name": "XXX/DVD",
"order": 0,
"hint": "(6010)",
"parentValue": 6000
},
{
"value": 6020,
"name": "XXX/WMV",
"order": 0,
"hint": "(6020)",
"parentValue": 6000
},
{
"value": 6030,
"name": "XXX/XviD",
"order": 0,
"hint": "(6030)",
"parentValue": 6000
},
{
"value": 6040,
"name": "XXX/x264",
"order": 0,
"hint": "(6040)",
"parentValue": 6000
},
{
"value": 6045,
"name": "XXX/UHD",
"order": 0,
"hint": "(6045)",
"parentValue": 6000
},
{
"value": 6050,
"name": "XXX/Pack",
"order": 0,
"hint": "(6050)",
"parentValue": 6000
},
{
"value": 6060,
"name": "XXX/ImageSet",
"order": 0,
"hint": "(6060)",
"parentValue": 6000
},
{
"value": 6070,
"name": "XXX/Other",
"order": 0,
"hint": "(6070)",
"parentValue": 6000
},
{
"value": 6080,
"name": "XXX/SD",
"order": 0,
"hint": "(6080)",
"parentValue": 6000
},
{
"value": 6090,
"name": "XXX/WEB-DL",
"order": 0,
"hint": "(6090)",
"parentValue": 6000
},
{
"value": 7000,
"name": "Books",
"order": 0,
"hint": "(7000)"
},
{
"value": 7010,
"name": "Books/Mags",
"order": 0,
"hint": "(7010)",
"parentValue": 7000
},
{
"value": 7020,
"name": "Books/EBook",
"order": 0,
"hint": "(7020)",
"parentValue": 7000
},
{
"value": 7030,
"name": "Books/Comics",
"order": 0,
"hint": "(7030)",
"parentValue": 7000
},
{
"value": 7040,
"name": "Books/Technical",
"order": 0,
"hint": "(7040)",
"parentValue": 7000
},
{
"value": 7050,
"name": "Books/Other",
"order": 0,
"hint": "(7050)",
"parentValue": 7000
},
{
"value": 7060,
"name": "Books/Foreign",
"order": 0,
"hint": "(7060)",
"parentValue": 7000
},
{
"value": 8000,
"name": "Other",
"order": 0,
"hint": "(8000)"
},
{
"value": 8010,
"name": "Other/Misc",
"order": 0,
"hint": "(8010)",
"parentValue": 8000
},
{
"value": 8020,
"name": "Other/Hashed",
"order": 0,
"hint": "(8020)",
"parentValue": 8000
}
],
"isFloat": false
},
{
"order": 4,
"name": "animeSyncCategories",
"label": "Anime Sync Categories",
"helpText": "Only Indexers that support these categories will be synced",
"value": [
5070
],
"type": "select",
"advanced": true,
"selectOptions": [
{
"value": 0,
"name": "Other",
"order": 0,
"hint": "(0)"
},
{
"value": 10,
"name": "Other/Misc",
"order": 0,
"hint": "(10)",
"parentValue": 0
},
{
"value": 20,
"name": "Other/Hashed",
"order": 0,
"hint": "(20)",
"parentValue": 0
},
{
"value": 1000,
"name": "Console",
"order": 0,
"hint": "(1000)"
},
{
"value": 1010,
"name": "Console/NDS",
"order": 0,
"hint": "(1010)",
"parentValue": 1000
},
{
"value": 1020,
"name": "Console/PSP",
"order": 0,
"hint": "(1020)",
"parentValue": 1000
},
{
"value": 1030,
"name": "Console/Wii",
"order": 0,
"hint": "(1030)",
"parentValue": 1000
},
{
"value": 1040,
"name": "Console/XBox",
"order": 0,
"hint": "(1040)",
"parentValue": 1000
},
{
"value": 1050,
"name": "Console/XBox 360",
"order": 0,
"hint": "(1050)",
"parentValue": 1000
},
{
"value": 1060,
"name": "Console/Wiiware",
"order": 0,
"hint": "(1060)",
"parentValue": 1000
},
{
"value": 1070,
"name": "Console/XBox 360 DLC",
"order": 0,
"hint": "(1070)",
"parentValue": 1000
},
{
"value": 1080,
"name": "Console/PS3",
"order": 0,
"hint": "(1080)",
"parentValue": 1000
},
{
"value": 1090,
"name": "Console/Other",
"order": 0,
"hint": "(1090)",
"parentValue": 1000
},
{
"value": 1110,
"name": "Console/3DS",
"order": 0,
"hint": "(1110)",
"parentValue": 1000
},
{
"value": 1120,
"name": "Console/PS Vita",
"order": 0,
"hint": "(1120)",
"parentValue": 1000
},
{
"value": 1130,
"name": "Console/WiiU",
"order": 0,
"hint": "(1130)",
"parentValue": 1000
},
{
"value": 1140,
"name": "Console/XBox One",
"order": 0,
"hint": "(1140)",
"parentValue": 1000
},
{
"value": 1180,
"name": "Console/PS4",
"order": 0,
"hint": "(1180)",
"parentValue": 1000
},
{
"value": 2000,
"name": "Movies",
"order": 0,
"hint": "(2000)"
},
{
"value": 2010,
"name": "Movies/Foreign",
"order": 0,
"hint": "(2010)",
"parentValue": 2000
},
{
"value": 2020,
"name": "Movies/Other",
"order": 0,
"hint": "(2020)",
"parentValue": 2000
},
{
"value": 2030,
"name": "Movies/SD",
"order": 0,
"hint": "(2030)",
"parentValue": 2000
},
{
"value": 2040,
"name": "Movies/HD",
"order": 0,
"hint": "(2040)",
"parentValue": 2000
},
{
"value": 2045,
"name": "Movies/UHD",
"order": 0,
"hint": "(2045)",
"parentValue": 2000
},
{
"value": 2050,
"name": "Movies/BluRay",
"order": 0,
"hint": "(2050)",
"parentValue": 2000
},
{
"value": 2060,
"name": "Movies/3D",
"order": 0,
"hint": "(2060)",
"parentValue": 2000
},
{
"value": 2070,
"name": "Movies/DVD",
"order": 0,
"hint": "(2070)",
"parentValue": 2000
},
{
"value": 2080,
"name": "Movies/WEB-DL",
"order": 0,
"hint": "(2080)",
"parentValue": 2000
},
{
"value": 2090,
"name": "Movies/x265",
"order": 0,
"hint": "(2090)",
"parentValue": 2000
},
{
"value": 3000,
"name": "Audio",
"order": 0,
"hint": "(3000)"
},
{
"value": 3010,
"name": "Audio/MP3",
"order": 0,
"hint": "(3010)",
"parentValue": 3000
},
{
"value": 3020,
"name": "Audio/Video",
"order": 0,
"hint": "(3020)",
"parentValue": 3000
},
{
"value": 3030,
"name": "Audio/Audiobook",
"order": 0,
"hint": "(3030)",
"parentValue": 3000
},
{
"value": 3040,
"name": "Audio/Lossless",
"order": 0,
"hint": "(3040)",
"parentValue": 3000
},
{
"value": 3050,
"name": "Audio/Other",
"order": 0,
"hint": "(3050)",
"parentValue": 3000
},
{
"value": 3060,
"name": "Audio/Foreign",
"order": 0,
"hint": "(3060)",
"parentValue": 3000
},
{
"value": 4000,
"name": "PC",
"order": 0,
"hint": "(4000)"
},
{
"value": 4010,
"name": "PC/0day",
"order": 0,
"hint": "(4010)",
"parentValue": 4000
},
{
"value": 4020,
"name": "PC/ISO",
"order": 0,
"hint": "(4020)",
"parentValue": 4000
},
{
"value": 4030,
"name": "PC/Mac",
"order": 0,
"hint": "(4030)",
"parentValue": 4000
},
{
"value": 4040,
"name": "PC/Mobile-Other",
"order": 0,
"hint": "(4040)",
"parentValue": 4000
},
{
"value": 4050,
"name": "PC/Games",
"order": 0,
"hint": "(4050)",
"parentValue": 4000
},
{
"value": 4060,
"name": "PC/Mobile-iOS",
"order": 0,
"hint": "(4060)",
"parentValue": 4000
},
{
"value": 4070,
"name": "PC/Mobile-Android",
"order": 0,
"hint": "(4070)",
"parentValue": 4000
},
{
"value": 5000,
"name": "TV",
"order": 0,
"hint": "(5000)"
},
{
"value": 5010,
"name": "TV/WEB-DL",
"order": 0,
"hint": "(5010)",
"parentValue": 5000
},
{
"value": 5020,
"name": "TV/Foreign",
"order": 0,
"hint": "(5020)",
"parentValue": 5000
},
{
"value": 5030,
"name": "TV/SD",
"order": 0,
"hint": "(5030)",
"parentValue": 5000
},
{
"value": 5040,
"name": "TV/HD",
"order": 0,
"hint": "(5040)",
"parentValue": 5000
},
{
"value": 5045,
"name": "TV/UHD",
"order": 0,
"hint": "(5045)",
"parentValue": 5000
},
{
"value": 5050,
"name": "TV/Other",
"order": 0,
"hint": "(5050)",
"parentValue": 5000
},
{
"value": 5060,
"name": "TV/Sport",
"order": 0,
"hint": "(5060)",
"parentValue": 5000
},
{
"value": 5070,
"name": "TV/Anime",
"order": 0,
"hint": "(5070)",
"parentValue": 5000
},
{
"value": 5080,
"name": "TV/Documentary",
"order": 0,
"hint": "(5080)",
"parentValue": 5000
},
{
"value": 5090,
"name": "TV/x265",
"order": 0,
"hint": "(5090)",
"parentValue": 5000
},
{
"value": 6000,
"name": "XXX",
"order": 0,
"hint": "(6000)"
},
{
"value": 6010,
"name": "XXX/DVD",
"order": 0,
"hint": "(6010)",
"parentValue": 6000
},
{
"value": 6020,
"name": "XXX/WMV",
"order": 0,
"hint": "(6020)",
"parentValue": 6000
},
{
"value": 6030,
"name": "XXX/XviD",
"order": 0,
"hint": "(6030)",
"parentValue": 6000
},
{
"value": 6040,
"name": "XXX/x264",
"order": 0,
"hint": "(6040)",
"parentValue": 6000
},
{
"value": 6045,
"name": "XXX/UHD",
"order": 0,
"hint": "(6045)",
"parentValue": 6000
},
{
"value": 6050,
"name": "XXX/Pack",
"order": 0,
"hint": "(6050)",
"parentValue": 6000
},
{
"value": 6060,
"name": "XXX/ImageSet",
"order": 0,
"hint": "(6060)",
"parentValue": 6000
},
{
"value": 6070,
"name": "XXX/Other",
"order": 0,
"hint": "(6070)",
"parentValue": 6000
},
{
"value": 6080,
"name": "XXX/SD",
"order": 0,
"hint": "(6080)",
"parentValue": 6000
},
{
"value": 6090,
"name": "XXX/WEB-DL",
"order": 0,
"hint": "(6090)",
"parentValue": 6000
},
{
"value": 7000,
"name": "Books",
"order": 0,
"hint": "(7000)"
},
{
"value": 7010,
"name": "Books/Mags",
"order": 0,
"hint": "(7010)",
"parentValue": 7000
},
{
"value": 7020,
"name": "Books/EBook",
"order": 0,
"hint": "(7020)",
"parentValue": 7000
},
{
"value": 7030,
"name": "Books/Comics",
"order": 0,
"hint": "(7030)",
"parentValue": 7000
},
{
"value": 7040,
"name": "Books/Technical",
"order": 0,
"hint": "(7040)",
"parentValue": 7000
},
{
"value": 7050,
"name": "Books/Other",
"order": 0,
"hint": "(7050)",
"parentValue": 7000
},
{
"value": 7060,
"name": "Books/Foreign",
"order": 0,
"hint": "(7060)",
"parentValue": 7000
},
{
"value": 8000,
"name": "Other",
"order": 0,
"hint": "(8000)"
},
{
"value": 8010,
"name": "Other/Misc",
"order": 0,
"hint": "(8010)",
"parentValue": 8000
},
{
"value": 8020,
"name": "Other/Hashed",
"order": 0,
"hint": "(8020)",
"parentValue": 8000
}
],
"isFloat": false
},
{
"order": 5,
"name": "syncAnimeStandardFormatSearch",
"label": "Sync Anime Standard Format Search",
"helpText": "Sync also searching for anime using the standard numbering",
"value": false,
"type": "checkbox",
"advanced": true,
"isFloat": false
}
],
"implementationName": "Sonarr",
"implementation": "Sonarr",
"configContract": "SonarrSettings",
"infoLink": "https://wiki.servarr.com/prowlarr/supported#sonarr",
"tags": [],
"id": 2
}
]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.