Python-3xui 0.0.8.post1__tar.gz → 0.0.9.post2__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.
Files changed (22) hide show
  1. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/PKG-INFO +12 -4
  2. python_3xui-0.0.9.post2/README.md +16 -0
  3. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/pyproject.toml +58 -58
  4. python_3xui-0.0.9.post2/python_3xui/__init__.py +9 -0
  5. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/python_3xui/api.py +271 -94
  6. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/python_3xui/base_model.py +15 -15
  7. python_3xui-0.0.9.post2/python_3xui/custom_exceptions.py +27 -0
  8. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/python_3xui/endpoints.py +69 -66
  9. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/python_3xui/models.py +73 -38
  10. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/python_3xui/util.py +52 -23
  11. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/tests/conftest.py +1 -8
  12. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/tests/gather_response_stubs.py +2 -2
  13. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/tests/test_endpoints_inbounds.py +10 -4
  14. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/tests/test_non_idempotent_endpoints_clients.py +32 -33
  15. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/tests/test_non_idempotent_endpoints_inbounds.py +1 -0
  16. python_3xui-0.0.9.post2/tests/test_xuiclient_helpers.py +188 -0
  17. python_3xui-0.0.8.post1/README.md +0 -8
  18. python_3xui-0.0.8.post1/python_3xui/__init__.py +0 -5
  19. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/.gitignore +0 -0
  20. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/LICENSE +0 -0
  21. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/tests/pytest.ini +0 -0
  22. {python_3xui-0.0.8.post1 → python_3xui-0.0.9.post2}/tests/test_endpoints_clients.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Python-3xui
3
- Version: 0.0.8.post1
3
+ Version: 0.0.9.post2
4
4
  Summary: 3x-ui wrapper for python
5
5
  Project-URL: Homepage, https://github.com/Artem-Potapov/3x-py
6
6
  Project-URL: Issues, https://github.com/Artem-Potapov/3x-py/issues
@@ -12,7 +12,7 @@ Classifier: Intended Audience :: Developers
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Requires-Python: >=3.11
15
- Requires-Dist: async-lru~=2.2.0
15
+ Requires-Dist: async-lru~=2.3.0
16
16
  Requires-Dist: dotenv~=0.9.9
17
17
  Requires-Dist: httpx~=0.28.1
18
18
  Requires-Dist: pydantic<3,~=2.12.5
@@ -28,7 +28,15 @@ Description-Content-Type: text/markdown
28
28
  <p>I'm not expecting much to be honest, so please feel free to fork it if I abandon the project and you need it!</p>
29
29
  <p>Also, if you REALLY want it I can give you the ownership if I step down, you can find my email in the pyproject.toml (I don't check it that much but trust me I do)</p>
30
30
 
31
- <h2>0.0.81 Release Notes</h2>
31
+ <h2>0.0.9 Release Notes</h2>
32
32
  <ul>
33
- <li>Minor change: make custom sub generators available instead of the default one</li>
33
+ <li>Fix _request_update_client for it to actually work and NOT create "zombies"</li>
34
+ <li>DTO un-split because fields reset when not provided, so full inbounds must be fetched</li>
35
+ <li>New method: update_client_by_tgid</li>
36
+ <li>Fixed test suite</li>
37
+ <li>Fix from_response and from_list</li>
38
+ <li>Remove obsolete and useless client fields from models</li>
39
+ <li>Inbound settings actually get parsed properly into ClientsSettings</li>
40
+ <li>New asyncio task management so they won't get destroyed when GCed</li>
41
+ <li>XUIClient async_lru cache now binds to event loop at runtime, not in initialization</li>
34
42
  </ul>
@@ -0,0 +1,16 @@
1
+ <h1>Hi! This is my example python 3x-ui wrapper!</h1>
2
+ <p>I'm not expecting much to be honest, so please feel free to fork it if I abandon the project and you need it!</p>
3
+ <p>Also, if you REALLY want it I can give you the ownership if I step down, you can find my email in the pyproject.toml (I don't check it that much but trust me I do)</p>
4
+
5
+ <h2>0.0.9 Release Notes</h2>
6
+ <ul>
7
+ <li>Fix _request_update_client for it to actually work and NOT create "zombies"</li>
8
+ <li>DTO un-split because fields reset when not provided, so full inbounds must be fetched</li>
9
+ <li>New method: update_client_by_tgid</li>
10
+ <li>Fixed test suite</li>
11
+ <li>Fix from_response and from_list</li>
12
+ <li>Remove obsolete and useless client fields from models</li>
13
+ <li>Inbound settings actually get parsed properly into ClientsSettings</li>
14
+ <li>New asyncio task management so they won't get destroyed when GCed</li>
15
+ <li>XUIClient async_lru cache now binds to event loop at runtime, not in initialization</li>
16
+ </ul>
@@ -1,59 +1,59 @@
1
- [project]
2
- name = "Python-3xui"
3
- version = "0.0.8r1"
4
- authors = [
5
- { name="JustMe_001", email="justme001.causation755@passinbox.com" },
6
- ]
7
- description = "3x-ui wrapper for python"
8
- readme = "README.md"
9
-
10
- requires-python = ">=3.11"
11
- classifiers = [
12
- "Programming Language :: Python :: 3",
13
- "Operating System :: OS Independent",
14
-
15
- "Development Status :: 3 - Alpha",
16
- "Intended Audience :: Developers",
17
- ]
18
-
19
- license = "Apache-2.0"
20
- license-files = ["LICEN[CS]E*"]
21
-
22
- dependencies = [
23
- "pydantic ~= 2.12.5, < 3",
24
- "httpx ~=0.28.1",
25
- "dotenv ~= 0.9.9",
26
- "async_lru ~= 2.2.0",
27
- "pyotp ~= 2.9.0"
28
- ]
29
-
30
-
31
- [project.optional-dependencies]
32
- testing = ["requests", "pytest", "pytest-asyncio", "pytest-dependency"]
33
-
34
-
35
- [project.urls]
36
- Homepage = "https://github.com/Artem-Potapov/3x-py"
37
- Issues = "https://github.com/Artem-Potapov/3x-py/issues"
38
-
39
-
40
- [build-system]
41
- requires = ["hatchling >= 1.26"]
42
- build-backend = "hatchling.build"
43
-
44
-
45
- [tool.hatch.build.targets.sdist]
46
- include = [
47
- "python_3xui/*.py",
48
- "/tests/*.py",
49
- "/tests/pytest.ini"
50
- ]
51
- exclude = [
52
- "requirements.txt",
53
- "main.py",
54
- ".env"
55
- ]
56
-
57
-
58
- [[tool.hatch.envs.hatch-test.matrix]]
1
+ [project]
2
+ name = "Python-3xui"
3
+ version = "0.0.9r2"
4
+ authors = [
5
+ { name="JustMe_001", email="justme001.causation755@passinbox.com" },
6
+ ]
7
+ description = "3x-ui wrapper for python"
8
+ readme = "README.md"
9
+
10
+ requires-python = ">=3.11"
11
+ classifiers = [
12
+ "Programming Language :: Python :: 3",
13
+ "Operating System :: OS Independent",
14
+
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Developers",
17
+ ]
18
+
19
+ license = "Apache-2.0"
20
+ license-files = ["LICEN[CS]E*"]
21
+
22
+ dependencies = [
23
+ "pydantic ~= 2.12.5, < 3",
24
+ "httpx ~=0.28.1",
25
+ "dotenv ~= 0.9.9",
26
+ "async_lru ~= 2.3.0",
27
+ "pyotp ~= 2.9.0"
28
+ ]
29
+
30
+
31
+ [project.optional-dependencies]
32
+ testing = ["requests", "pytest", "pytest-asyncio", "pytest-dependency"]
33
+
34
+
35
+ [project.urls]
36
+ Homepage = "https://github.com/Artem-Potapov/3x-py"
37
+ Issues = "https://github.com/Artem-Potapov/3x-py/issues"
38
+
39
+
40
+ [build-system]
41
+ requires = ["hatchling >= 1.26"]
42
+ build-backend = "hatchling.build"
43
+
44
+
45
+ [tool.hatch.build.targets.sdist]
46
+ include = [
47
+ "python_3xui/*.py",
48
+ "/tests/*.py",
49
+ "/tests/pytest.ini"
50
+ ]
51
+ exclude = [
52
+ "requirements.txt",
53
+ "main.py",
54
+ ".env"
55
+ ]
56
+
57
+
58
+ [[tool.hatch.envs.hatch-test.matrix]]
59
59
  python = ["3.13", "3.12", "3.11"]
@@ -0,0 +1,9 @@
1
+ """Public package interface for the python_3xui API wrapper."""
2
+
3
+ from .api import XUIClient
4
+
5
+ __author__ = "JustMe_001"
6
+ __version__ = "0.0.9r2"
7
+ __email__ = ""
8
+
9
+