upgradinatorr 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,149 @@
1
+ Metadata-Version: 2.3
2
+ Name: upgradinatorr
3
+ Version: 0.1.0
4
+ Summary: Automated media upgrade search for Starr applications
5
+ Author: MountainGod2
6
+ Author-email: MountainGod2 <admin@reid.ca>
7
+ Requires-Dist: aiohttp==3.14.3
8
+ Requires-Dist: pydantic==2.13.5
9
+ Requires-Dist: pydantic-settings==2.13.1
10
+ Requires-Dist: rich==14.3.4
11
+ Requires-Dist: rich-click==1.9.8
12
+ Requires-Dist: stamina==25.2.0
13
+ Requires-Dist: textual==8.1.1
14
+ Requires-Dist: textual-dev==1.8.0
15
+ Requires-Python: >=3.12
16
+ Description-Content-Type: text/markdown
17
+
18
+ # Upgradinatorr
19
+
20
+ Automated media upgrade search for Starr applications (Radarr, Sonarr, Lidarr, Readarr).
21
+
22
+ ## Installation
23
+
24
+ ```bash
25
+ uv tool install upgradinatorr
26
+ ```
27
+
28
+ Or install from source:
29
+
30
+ ```bash
31
+ git clone https://github.com/yourusername/upgradinatorr
32
+ cd upgradinatorr
33
+ uv sync
34
+ source .venv/bin/activate # or prefix the commands below with `uv run`
35
+ ```
36
+
37
+ ## Usage
38
+
39
+ ```bash
40
+ # Process single application
41
+ upgradinatorr -a radarr
42
+
43
+ # Process multiple applications
44
+ upgradinatorr -a radarr,sonarr
45
+
46
+ # Process multiple instances
47
+ upgradinatorr -a radarr,radarr4k
48
+
49
+ # Use custom config file
50
+ upgradinatorr -a radarr -c /path/to/config.conf
51
+
52
+ # Enable verbose output
53
+ upgradinatorr -a radarr --verbose
54
+
55
+ # Preview processing
56
+ upgradinatorr -a radarr --dry-run
57
+ ```
58
+
59
+ ### Docker Usage
60
+
61
+ Run with docker:
62
+
63
+ ```bash
64
+ docker run --rm \
65
+ -e PUID=99 \
66
+ -e PGID=100 \
67
+ -v /mnt/user/appdata/upgradinatorr/config:/config \
68
+ mountaingod2/upgradinatorr:latest \
69
+ -a radarr,sonarr --verbose
70
+ ```
71
+
72
+ Or use docker-compose:
73
+
74
+ ```yaml
75
+ name: upgradinatorr
76
+
77
+ services:
78
+ upgradinatorr:
79
+ image: mountaingod2/upgradinatorr:latest
80
+ container_name: upgradinatorr
81
+ volumes:
82
+ - /path/to/config:/config
83
+ environment:
84
+ - PUID=99
85
+ - PGID=100
86
+ command: ["-a", "radarr,sonarr", "--verbose"]
87
+ ```
88
+
89
+ **Environment Variables:**
90
+
91
+ > [!TIP]
92
+ > Run `id` to display values for the current user.
93
+
94
+ - `PUID` - User ID to run as (default: 999)
95
+ - `PGID` - Group ID to run as (default: 999)
96
+
97
+ **Volumes:**
98
+ - `/config` - Directory containing your `upgradinatorr.conf` file
99
+
100
+ The container will automatically create a default config file from the example if one doesn't exist.
101
+
102
+ ## Configuration
103
+
104
+ App arguments passed to `-a/--apps` should match your config section names (case-insensitive).
105
+ For example, if your config has `[Radarr]` and `[Radarr4K]`, use `-a radarr,radarr4k`.
106
+
107
+ Create a `upgradinatorr.conf` file (see example from [original repo](https://github.com/angrycuban13/Just-A-Bunch-Of-Starr-Scripts/blob/main/Upgradinatorr/upgradinatorr-example.conf)):
108
+
109
+ ```ini
110
+ [Notifications]
111
+ DiscordWebhook=https://discord.com/api/webhooks/...
112
+ NotifiarrPassthroughWebhook=https://notifiarr.com/api/v1/notification/passthrough/...
113
+ NotifiarrPassthroughDiscordChannelId=123456789
114
+
115
+ [Radarr]
116
+ ApiKey=your_api_key_here
117
+ Count=10
118
+ Monitored=true
119
+ MovieStatus=released
120
+ TagName=upgrade
121
+ Unattended=false
122
+ Url=http://localhost:7878
123
+
124
+ [Sonarr]
125
+ ApiKey=your_api_key_here
126
+ Count=5
127
+ Monitored=true
128
+ SeriesStatus=continuing
129
+ TagName=upgrade
130
+ Unattended=false
131
+ Url=http://localhost:8989
132
+ ```
133
+
134
+ ## Requirements
135
+
136
+ - Python 3.12+
137
+ - aiohttp
138
+ - stamina
139
+ - rich
140
+ - rich-click
141
+ - pydantic
142
+
143
+ ## License
144
+
145
+ MIT
146
+
147
+ ## Credits
148
+
149
+ Original PowerShell version by [angrycuban13](https://github.com/angrycuban13/Just-A-Bunch-Of-Starr-Scripts/blob/main/Upgradinatorr/)
@@ -0,0 +1,132 @@
1
+ # Upgradinatorr
2
+
3
+ Automated media upgrade search for Starr applications (Radarr, Sonarr, Lidarr, Readarr).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ uv tool install upgradinatorr
9
+ ```
10
+
11
+ Or install from source:
12
+
13
+ ```bash
14
+ git clone https://github.com/yourusername/upgradinatorr
15
+ cd upgradinatorr
16
+ uv sync
17
+ source .venv/bin/activate # or prefix the commands below with `uv run`
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ```bash
23
+ # Process single application
24
+ upgradinatorr -a radarr
25
+
26
+ # Process multiple applications
27
+ upgradinatorr -a radarr,sonarr
28
+
29
+ # Process multiple instances
30
+ upgradinatorr -a radarr,radarr4k
31
+
32
+ # Use custom config file
33
+ upgradinatorr -a radarr -c /path/to/config.conf
34
+
35
+ # Enable verbose output
36
+ upgradinatorr -a radarr --verbose
37
+
38
+ # Preview processing
39
+ upgradinatorr -a radarr --dry-run
40
+ ```
41
+
42
+ ### Docker Usage
43
+
44
+ Run with docker:
45
+
46
+ ```bash
47
+ docker run --rm \
48
+ -e PUID=99 \
49
+ -e PGID=100 \
50
+ -v /mnt/user/appdata/upgradinatorr/config:/config \
51
+ mountaingod2/upgradinatorr:latest \
52
+ -a radarr,sonarr --verbose
53
+ ```
54
+
55
+ Or use docker-compose:
56
+
57
+ ```yaml
58
+ name: upgradinatorr
59
+
60
+ services:
61
+ upgradinatorr:
62
+ image: mountaingod2/upgradinatorr:latest
63
+ container_name: upgradinatorr
64
+ volumes:
65
+ - /path/to/config:/config
66
+ environment:
67
+ - PUID=99
68
+ - PGID=100
69
+ command: ["-a", "radarr,sonarr", "--verbose"]
70
+ ```
71
+
72
+ **Environment Variables:**
73
+
74
+ > [!TIP]
75
+ > Run `id` to display values for the current user.
76
+
77
+ - `PUID` - User ID to run as (default: 999)
78
+ - `PGID` - Group ID to run as (default: 999)
79
+
80
+ **Volumes:**
81
+ - `/config` - Directory containing your `upgradinatorr.conf` file
82
+
83
+ The container will automatically create a default config file from the example if one doesn't exist.
84
+
85
+ ## Configuration
86
+
87
+ App arguments passed to `-a/--apps` should match your config section names (case-insensitive).
88
+ For example, if your config has `[Radarr]` and `[Radarr4K]`, use `-a radarr,radarr4k`.
89
+
90
+ Create a `upgradinatorr.conf` file (see example from [original repo](https://github.com/angrycuban13/Just-A-Bunch-Of-Starr-Scripts/blob/main/Upgradinatorr/upgradinatorr-example.conf)):
91
+
92
+ ```ini
93
+ [Notifications]
94
+ DiscordWebhook=https://discord.com/api/webhooks/...
95
+ NotifiarrPassthroughWebhook=https://notifiarr.com/api/v1/notification/passthrough/...
96
+ NotifiarrPassthroughDiscordChannelId=123456789
97
+
98
+ [Radarr]
99
+ ApiKey=your_api_key_here
100
+ Count=10
101
+ Monitored=true
102
+ MovieStatus=released
103
+ TagName=upgrade
104
+ Unattended=false
105
+ Url=http://localhost:7878
106
+
107
+ [Sonarr]
108
+ ApiKey=your_api_key_here
109
+ Count=5
110
+ Monitored=true
111
+ SeriesStatus=continuing
112
+ TagName=upgrade
113
+ Unattended=false
114
+ Url=http://localhost:8989
115
+ ```
116
+
117
+ ## Requirements
118
+
119
+ - Python 3.12+
120
+ - aiohttp
121
+ - stamina
122
+ - rich
123
+ - rich-click
124
+ - pydantic
125
+
126
+ ## License
127
+
128
+ MIT
129
+
130
+ ## Credits
131
+
132
+ Original PowerShell version by [angrycuban13](https://github.com/angrycuban13/Just-A-Bunch-Of-Starr-Scripts/blob/main/Upgradinatorr/)
@@ -0,0 +1,112 @@
1
+ [project]
2
+ name = "upgradinatorr"
3
+ version = "0.1.0"
4
+ description = "Automated media upgrade search for Starr applications"
5
+ readme = "README.md"
6
+ requires-python = ">=3.12"
7
+ dependencies = [
8
+ "aiohttp==3.14.3",
9
+ "pydantic==2.13.5",
10
+ "pydantic-settings==2.13.1",
11
+ "rich==14.3.4",
12
+ "rich-click==1.9.8",
13
+ "stamina==25.2.0",
14
+ "textual==8.1.1",
15
+ "textual-dev==1.8.0",
16
+ ]
17
+
18
+ [[project.authors]]
19
+ name = "MountainGod2"
20
+ email = "admin@reid.ca"
21
+
22
+ [project.scripts]
23
+ upgradinatorr = "upgradinatorr.cli:main"
24
+ upgradinatorr-tui = "upgradinatorr.tui:run_tui"
25
+
26
+ [dependency-groups]
27
+ dev = [
28
+ "aioresponses==0.7.9",
29
+ "mypy==1.20.2",
30
+ "pre-commit==4.6.2",
31
+ "pytest==9.1.1",
32
+ "pytest-asyncio==1.4.0",
33
+ "pytest-cov==7.0.0",
34
+ "ruff==0.15.2",
35
+ ]
36
+ build = [
37
+ "python-semantic-release==10.5.3",
38
+ "uv==0.12.7",
39
+ ]
40
+
41
+ [build-system]
42
+ requires = ["uv_build==0.12.7"]
43
+ build-backend = "uv_build"
44
+
45
+ [tool.uv]
46
+ constraint-dependencies = ["gitpython<=3.1.59"]
47
+
48
+ [tool.semantic_release]
49
+ build_command = """
50
+ uv lock --upgrade-package "$PACKAGE_NAME"
51
+ uv build
52
+ """
53
+ allow_zero_version = true
54
+ major_on_zero = false
55
+
56
+ [tool.semantic_release.changelog]
57
+ exclude_commit_patterns = [
58
+ 'refactor(?:\([^)]*?\))?(?!!): .+',
59
+ 'chore(?:\([^)]*?\))?(?!!): .+',
60
+ 'ci(?:\([^)]*?\))?(?!!): .+',
61
+ 'docs(?:\([^)]*?\))?(?!!): .+',
62
+ 'style(?:\([^)]*?\))?(?!!): .+',
63
+ 'test(?:\([^)]*?\))?(?!!): .+',
64
+ 'build\((?!deps\): .+)',
65
+ "Initial [Cc]ommit.*",
66
+ ]
67
+ mode = "init"
68
+
69
+ [tool.ruff]
70
+ line-length = 100
71
+ target-version = "py312"
72
+ preview = true
73
+
74
+ [tool.ruff.lint]
75
+ select = ["ALL"]
76
+ ignore = ["COM812"]
77
+ explicit-preview-rules = true
78
+
79
+ [tool.ruff.lint.pydocstyle]
80
+ convention = "google"
81
+
82
+ [tool.ruff.lint.mccabe]
83
+ max-complexity = 35
84
+
85
+ [tool.ruff.lint.pylint]
86
+ max-branches = 50
87
+ max-statements = 120
88
+ max-args = 10
89
+
90
+ [tool.ruff.lint.per-file-ignores]
91
+ "tests/*" = [
92
+ "ANN401",
93
+ "INP001",
94
+ "S101",
95
+ "SLF001",
96
+ ]
97
+
98
+ [tool.ruff.format]
99
+ quote-style = "double"
100
+ indent-style = "space"
101
+ skip-magic-trailing-comma = false
102
+ line-ending = "lf"
103
+ docstring-code-format = true
104
+ docstring-code-line-length = "dynamic"
105
+
106
+ [tool.mypy]
107
+ packages = "upgradinatorr"
108
+ python_version = "3.12"
109
+ warn_return_any = true
110
+ warn_unused_configs = true
111
+ disallow_untyped_defs = true
112
+ strict = true
@@ -0,0 +1,89 @@
1
+ [project]
2
+ name = "upgradinatorr"
3
+ version = "0.1.0"
4
+ description = "Automated media upgrade search for Starr applications"
5
+ readme = "README.md"
6
+ authors = [{ name = "MountainGod2", email = "admin@reid.ca" }]
7
+ requires-python = ">=3.12"
8
+ dependencies = [
9
+ "aiohttp==3.14.3",
10
+ "pydantic==2.13.5",
11
+ "pydantic-settings==2.13.1",
12
+ "rich==14.3.4",
13
+ "rich-click==1.9.8",
14
+ "stamina==25.2.0",
15
+ "textual==8.1.1",
16
+ "textual-dev==1.8.0",
17
+ ]
18
+
19
+ [dependency-groups]
20
+ dev = [
21
+ "aioresponses==0.7.9",
22
+ "mypy==1.20.2",
23
+ "pre-commit==4.6.2",
24
+ "pytest==9.1.1",
25
+ "pytest-asyncio==1.4.0",
26
+ "pytest-cov==7.0.0",
27
+ "ruff==0.15.2",
28
+ ]
29
+ build = ["python-semantic-release==10.5.3", "uv==0.12.7"]
30
+
31
+ [project.scripts]
32
+ upgradinatorr = "upgradinatorr.cli:main"
33
+ upgradinatorr-tui = "upgradinatorr.tui:run_tui"
34
+
35
+ [build-system]
36
+ requires = ["uv_build==0.12.7"]
37
+ build-backend = "uv_build"
38
+
39
+ [tool.uv]
40
+ constraint-dependencies = [
41
+ "gitpython<=3.1.59"
42
+ ]
43
+
44
+ [tool.semantic_release]
45
+ build_command = """
46
+ uv lock --upgrade-package "$PACKAGE_NAME"
47
+ uv build
48
+ """
49
+ allow_zero_version = true
50
+ major_on_zero = false
51
+ changelog.exclude_commit_patterns = [
52
+ '''refactor(?:\([^)]*?\))?(?!!): .+''',
53
+ '''chore(?:\([^)]*?\))?(?!!): .+''',
54
+ '''ci(?:\([^)]*?\))?(?!!): .+''',
55
+ '''docs(?:\([^)]*?\))?(?!!): .+''',
56
+ '''style(?:\([^)]*?\))?(?!!): .+''',
57
+ '''test(?:\([^)]*?\))?(?!!): .+''',
58
+ '''build\((?!deps\): .+)''',
59
+ '''Initial [Cc]ommit.*''',
60
+ ]
61
+ changelog.mode = "init"
62
+
63
+ [tool.ruff]
64
+ line-length = 100
65
+ target-version = "py312"
66
+ preview = true
67
+ lint.select = ["ALL"]
68
+ lint.ignore = ["COM812"]
69
+ lint.pydocstyle.convention = "google"
70
+ lint.explicit-preview-rules = true
71
+ lint.mccabe.max-complexity = 35
72
+ lint.pylint.max-branches = 50
73
+ lint.pylint.max-statements = 120
74
+ lint.pylint.max-args = 10
75
+ lint.per-file-ignores = { "tests/*" = ["ANN401", "INP001", "S101", "SLF001"] }
76
+ format.quote-style = "double"
77
+ format.indent-style = "space"
78
+ format.skip-magic-trailing-comma = false
79
+ format.line-ending = "lf"
80
+ format.docstring-code-format = true
81
+ format.docstring-code-line-length = "dynamic"
82
+
83
+ [tool.mypy]
84
+ packages = "upgradinatorr"
85
+ python_version = "3.12"
86
+ warn_return_any = true
87
+ warn_unused_configs = true
88
+ disallow_untyped_defs = true
89
+ strict = true
@@ -0,0 +1,10 @@
1
+ """Upgradinatorr - Media upgrade automation for Starr applications."""
2
+
3
+ from importlib.metadata import version
4
+
5
+ __version__ = version("upgradinatorr")
6
+ __author__ = "MountainGod2"
7
+
8
+ from upgradinatorr.config import ApplicationConfig, NotificationConfig, validate_application_name
9
+
10
+ __all__ = ["ApplicationConfig", "NotificationConfig", "validate_application_name"]
@@ -0,0 +1,6 @@
1
+ """Entry point for running upgradinatorr as a module."""
2
+
3
+ from upgradinatorr.cli import main
4
+
5
+ if __name__ == "__main__":
6
+ main()