buildarr / buildarr-radarr

Radarr movie PVR plugin for Buildarr
https://buildarr.github.io/plugins/radarr
GNU General Public License v3.0
0 stars 2 forks source link

Buildarr reports Sabnzbd download client host is invalid #33

Closed Serneum closed 10 months ago

Serneum commented 10 months ago

I'm trying to run Buildarr and have it dump config for my instances of Radarr. Both instances of Radarr that I run are on version 5.1.3.8246. Buildarr is whatever the latest tag is pointing to for Docker. Given that there are issues for adding Radarr support, I am wondering if the version of Radarr that I am running is the issue

Buildarr is continuously failing on trying to parse Sabnzbd as a Download client. The logs from the debug logging are:

2023-11-26 21:56:35,621 buildarr:1 urllib3.connectionpool [DEBUG] http://radarr:7878 "GET /api/v3/downloadclient HTTP/1.1" 200 None
2023-11-26 21:56:35,622 buildarr:1 radarr.rest [DEBUG] response body: b'[\n  {\n    "enable": true,\n    "protocol": "usenet",\n    "priority": 1,\n    "removeCompletedDownloads": true,\n    "removeFailedDownloads": true,\n    "name": "Sabnzbd",\n    "fields": [\n      {\n        "order": 0,\n        "name": "host",\n        "label": "Host",\n        "value": "sabnzbd",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 1,\n        "name": "port",\n        "label": "Port",\n        "value": 8080,\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 2,\n        "name": "useSsl",\n        "label": "Use SSL",\n        "helpText": "Use secure connection when connecting to Sabnzbd",\n        "value": false,\n        "type": "checkbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 3,\n        "name": "urlBase",\n        "label": "Url Base",\n        "helpText": "Adds a prefix to the Sabnzbd url, e.g. http://[host]:[port]/[urlBase]/api",\n        "type": "textbox",\n        "advanced": true,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 4,\n        "name": "apiKey",\n        "label": "API Key",\n        "value": "********",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "apiKey",\n        "isFloat": false\n      },\n      {\n        "order": 5,\n        "name": "username",\n        "label": "Username",\n        "value": "Serneum",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "userName",\n        "isFloat": false\n      },\n      {\n        "order": 6,\n        "name": "password",\n        "label": "Password",\n        "value": "********",\n        "type": "password",\n        "advanced": false,\n        "privacy": "password",\n        "isFloat": false\n      },\n      {\n        "order": 7,\n        "name": "movieCategory",\n        "label": "Category",\n        "helpText": "Adding a category specific to Radarr avoids conflicts with unrelated non-Radarr downloads. Using a category is optional, but strongly recommended.",\n        "value": "movies",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 8,\n        "name": "recentMoviePriority",\n        "label": "Recent Priority",\n        "helpText": "Priority to use when grabbing movies that released within the last 21 days",\n        "value": -100,\n        "type": "select",\n        "advanced": false,\n        "selectOptions": [\n          {\n            "value": -100,\n            "name": "Default",\n            "order": -100,\n            "dividerAfter": false\n          },\n          {\n            "value": -2,\n            "name": "Paused",\n            "order": -2,\n            "dividerAfter": false\n
},\n          {\n            "value": -1,\n            "name": "Low",\n            "order": -1,\n            "dividerAfter": false\n          },\n          {\n            "value": 0,\n            "name": "Normal",\n            "order": 0,\n            "dividerAfter": false\n          },\n          {\n            "value": 1,\n            "name": "High",\n            "order": 1,\n            "dividerAfter": false\n          },\n          {\n            "value": 2,\n            "name": "Force",\n            "order": 2,\n            "dividerAfter": false\n          }\n        ],\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 9,\n        "name": "olderMoviePriority",\n        "label": "Older Priority",\n        "helpText": "Priority to use when grabbing movies that released over 21 days ago",\n        "value": -100,\n        "type": "select",\n        "advanced": false,\n        "selectOptions": [\n          {\n            "value": -100,\n            "name": "Default",\n            "order": -100,\n            "dividerAfter": false\n          },\n          {\n            "value": -2,\n            "name": "Paused",\n            "order": -2,\n            "dividerAfter": false\n          },\n          {\n            "value": -1,\n            "name": "Low",\n            "order": -1,\n            "dividerAfter": false\n          },\n
{\n            "value": 0,\n            "name": "Normal",\n            "order": 0,\n            "dividerAfter": false\n          },\n          {\n            "value": 1,\n            "name": "High",\n            "order": 1,\n            "dividerAfter": false\n          },\n          {\n            "value": 2,\n            "name": "Force",\n            "order": 2,\n            "dividerAfter": false\n          }\n        ],\n        "privacy": "normal",\n        "isFloat": false\n      }\n    ],\n    "implementationName": "SABnzbd",\n    "implementation": "Sabnzbd",\n    "configContract": "SabnzbdSettings",\n    "infoLink": "https://wiki.servarr.com/radarr/supported#sabnzbd",\n    "tags": [],\n    "id": 1\n  }\n]'
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_radarr/cli.py", line 92, 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_radarr/config/__init__.py", line 181, in from_remote
    settings=RadarrSettings.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_radarr/config/settings/download_clients/__init__.py", line 122, in from_remote
    definitions={
                ^
  File "/usr/local/lib/python3.11/site-packages/buildarr_radarr/config/settings/download_clients/__init__.py", line 125, in <dictcomp>
    ]._from_remote(tag_ids=tag_ids, remote_attrs=api_downloadclient.to_dict())
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/buildarr_radarr/config/settings/download_clients/base.py", line 96, in _from_remote
    return cls(
           ^^^^
  File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for SabnzbdDownloadClient
hostname
  field required (type=value_error.missing)
Callum027 commented 10 months ago

Thank you for trying Buildarr, and the bug report.

This looks to be an issue with how Buildarr is reading the value from Radarr, as I can see that the API version of the value, host, is being supplied as it should.

I don't actually use SABnzbd (don't use Usenet in my local setup yet), so I haven't had an opportunity to test it.

I'll come with a fix soon.

Callum027 commented 10 months ago

Thanks for waiting. The fix for this issue has been released as:

Please give the new version a try to check that it resolves your issue.

Serneum commented 10 months ago

Apologies about the delay. I believe the issue here was resolved, though there is a new issue with parsing out Plex settings from the look of it:

2023-12-03 15:56:48,979 buildarr:1 urllib3.connectionpool [DEBUG] http://radarr:7878 "GET /api/v3/notification HTTP/1.1" 200 None
2023-12-03 15:56:48,979 buildarr:1 radarr.rest [DEBUG] response body: b'[\n  {\n    "onGrab": false,\n    "onDownload": true,\n    "onUpgrade": true,\n    "onRename": true,\n    "onMovieAdded": false,\n    "onMovieDelete": false,\n    "onMovieFileDelete": false,\n    "onMovieFileDeleteForUpgrade": false,\n    "onHealthIssue": false,\n    "onHealthRestored": false,\n    "onApplicationUpdate": false,\n    "onManualInteractionRequired": false,\n    "supportsOnGrab": false,\n    "supportsOnDownload": true,\n    "supportsOnUpgrade": true,\n    "supportsOnRename": true,\n    "supportsOnMovieAdded": false,\n    "supportsOnMovieDelete": true,\n    "supportsOnMovieFileDelete": true,\n    "supportsOnMovieFileDeleteForUpgrade": true,\n    "supportsOnHealthIssue": false,\n    "supportsOnHealthRestored": false,\n    "supportsOnApplicationUpdate": false,\n    "supportsOnManualInteractionRequired": false,\n    "includeHealthWarnings": false,\n    "name": "Plex",\n    "fields": [\n      {\n        "order": 0,\n        "name": "host",\n        "label": "Host",\n        "value": "192.168.1.100",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 1,\n        "name": "port",\n        "label": "Port",\n        "value": 32400,\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 2,\n        "name": "useSsl",\n        "label": "Use SSL",\n        "helpText": "Connect to Plex over HTTPS instead of HTTP",\n        "value": false,\n        "type": "checkbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 3,\n        "name": "authToken",\n        "label": "Auth Token",\n        "value": "********",\n        "type": "textbox",\n        "advanced": true,\n        "privacy": "apiKey",\n        "isFloat": false\n      },\n      {\n        "order": 4,\n        "name": "signIn",\n        "label": "Authenticate with Plex.tv",\n        "value": "startOAuth",\n        "type": "oAuth",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 5,\n        "name": "updateLibrary",\n        "label": "Update Library",\n        "value": true,\n        "type": "checkbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 6,\n        "name": "mapFrom",\n        "label": "Map Paths From",\n        "helpText": "Radarr path, used to modify movie paths when Plex sees library path location differently from Radarr",\n        "type": "textbox",\n        "advanced": true,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 7,\n        "name": "mapTo",\n        "label": "Map Paths To",\n        "helpText": "Plex path, used to modify movie paths when Plex sees library path location differently from Radarr",\n        "type": "textbox",\n        "advanced": true,\n        "privacy": "normal",\n        "isFloat": false\n      }\n    ],\n    "implementationName": "Plex Media Server",\n    "implementation": "PlexServer",\n    "configContract": "PlexServerSettings",\n    "infoLink": "https://wiki.servarr.com/radarr/supported#plexserver",\n    "tags": [],\n    "id": 1\n  }\n]'
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_radarr/cli.py", line 92, 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_radarr/config/__init__.py", line 181, in from_remote
    settings=RadarrSettings.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_radarr/config/settings/notifications/__init__.py", line 144, in from_remote
    definitions={
                ^
  File "/usr/local/lib/python3.11/site-packages/buildarr_radarr/config/settings/notifications/__init__.py", line 145, in <dictcomp>
    api_notification.name: NOTIFICATION_TYPE_MAP[  # type: ignore[attr-defined]
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'PlexServer'

Happy to mark this issue as resolved and open another. Here's the output for the download client:

2023-12-03 16:00:01,112 buildarr:1 urllib3.connectionpool [DEBUG] http://radarr:7878 "GET /api/v3/downloadclient HTTP/1.1" 200 None
2023-12-03 16:00:01,112 buildarr:1 radarr.rest [DEBUG] response body: b'[\n  {\n    "enable": true,\n    "protocol": "usenet",\n    "priority": 1,\n    "removeCompletedDownloads": true,\n    "removeFailedDownloads": true,\n    "name": "Sabnzbd",\n    "fields": [\n      {\n        "order": 0,\n        "name": "host",\n        "label": "Host",\n        "value": "sabnzbd",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 1,\n        "name": "port",\n        "label": "Port",\n        "value": 8080,\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 2,\n        "name": "useSsl",\n        "label": "Use SSL",\n        "helpText": "Use secure connection when connecting to Sabnzbd",\n        "value": false,\n        "type": "checkbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 3,\n        "name": "urlBase",\n        "label": "Url Base",\n        "helpText": "Adds a prefix to the Sabnzbd url, e.g. http://[host]:[port]/[urlBase]/api",\n        "type": "textbox",\n        "advanced": true,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 4,\n        "name": "apiKey",\n        "label": "API Key",\n        "value": "********",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "apiKey",\n        "isFloat": false\n      },\n      {\n        "order": 5,\n        "name": "username",\n        "label": "Username",\n        "value": "Serneum",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "userName",\n        "isFloat": false\n      },\n      {\n        "order": 6,\n        "name": "password",\n        "label": "Password",\n        "value": "********",\n        "type": "password",\n        "advanced": false,\n        "privacy": "password",\n        "isFloat": false\n      },\n      {\n        "order": 7,\n        "name": "movieCategory",\n        "label": "Category",\n        "helpText": "Adding a category specific to Radarr avoids conflicts with unrelated non-Radarr downloads. Using a category is optional, but strongly recommended.",\n        "value": "movies",\n        "type": "textbox",\n        "advanced": false,\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 8,\n        "name": "recentMoviePriority",\n        "label": "Recent Priority",\n        "helpText": "Priority to use when grabbing movies that released within the last 21 days",\n        "value": -100,\n        "type": "select",\n        "advanced": false,\n        "selectOptions": [\n          {\n            "value": -100,\n            "name": "Default",\n            "order": -100,\n            "dividerAfter": false\n          },\n          {\n            "value": -2,\n            "name": "Paused",\n            "order": -2,\n            "dividerAfter": false\n          },\n          {\n            "value": -1,\n            "name": "Low",\n            "order": -1,\n            "dividerAfter": false\n          },\n          {\n            "value": 0,\n            "name": "Normal",\n            "order": 0,\n            "dividerAfter": false\n          },\n          {\n            "value": 1,\n            "name": "High",\n            "order": 1,\n            "dividerAfter": false\n          },\n          {\n            "value": 2,\n            "name": "Force",\n            "order": 2,\n            "dividerAfter": false\n          }\n        ],\n        "privacy": "normal",\n        "isFloat": false\n      },\n      {\n        "order": 9,\n        "name": "olderMoviePriority",\n        "label": "Older Priority",\n        "helpText": "Priority to use when grabbing movies that released over 21 days ago",\n        "value": -100,\n        "type": "select",\n        "advanced": false,\n        "selectOptions": [\n          {\n            "value": -100,\n            "name": "Default",\n            "order": -100,\n            "dividerAfter": false\n          },\n          {\n            "value": -2,\n            "name": "Paused",\n            "order": -2,\n            "dividerAfter": false\n          },\n          {\n            "value": -1,\n            "name": "Low",\n            "order": -1,\n            "dividerAfter": false\n          },\n          {\n            "value": 0,\n            "name": "Normal",\n            "order": 0,\n            "dividerAfter": false\n          },\n          {\n            "value": 1,\n            "name": "High",\n            "order": 1,\n            "dividerAfter": false\n          },\n          {\n            "value": 2,\n            "name": "Force",\n            "order": 2,\n            "dividerAfter": false\n          }\n        ],\n        "privacy": "normal",\n        "isFloat": false\n      }\n    ],\n    "implementationName": "SABnzbd",\n    "implementation": "Sabnzbd",\n    "configContract": "SabnzbdSettings",\n    "infoLink": "https://wiki.servarr.com/radarr/supported#sabnzbd",\n    "tags": [],\n    "id": 1\n  }\n]'