TornAPIWrapper 2.16.0__tar.gz → 2.17.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.
Files changed (40) hide show
  1. {tornapiwrapper-2.16.0/src/TornAPIWrapper.egg-info → tornapiwrapper-2.17.0}/PKG-INFO +2 -2
  2. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/README.md +1 -1
  3. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/__init__.py +6 -4
  4. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/client.py +1 -2
  5. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/client_async.py +1 -2
  6. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/torn.py +37 -3
  7. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/errors.py +8 -2
  8. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0/src/TornAPIWrapper.egg-info}/PKG-INFO +2 -2
  9. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper.egg-info/SOURCES.txt +0 -1
  10. tornapiwrapper-2.16.0/src/TornAPIWrapper/text_response_endpoints.py +0 -1
  11. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/LICENSE +0 -0
  12. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/pyproject.toml +0 -0
  13. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/setup.cfg +0 -0
  14. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/__main__.py +0 -0
  15. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/__init__.py +0 -0
  16. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/company.py +0 -0
  17. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/faction.py +0 -0
  18. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/forum.py +0 -0
  19. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/key.py +0 -0
  20. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/market.py +0 -0
  21. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/property.py +0 -0
  22. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/racing.py +0 -0
  23. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints/user.py +0 -0
  24. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/__init__.py +0 -0
  25. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/company.py +0 -0
  26. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/faction.py +0 -0
  27. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/forum.py +0 -0
  28. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/key.py +0 -0
  29. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/market.py +0 -0
  30. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/property.py +0 -0
  31. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/racing.py +0 -0
  32. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/torn.py +0 -0
  33. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/endpoints_async/user.py +0 -0
  34. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/params/__init__.py +0 -0
  35. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/params/builders.py +0 -0
  36. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/params/map.py +0 -0
  37. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper/type_hints.py +0 -0
  38. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper.egg-info/dependency_links.txt +0 -0
  39. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper.egg-info/requires.txt +0 -0
  40. {tornapiwrapper-2.16.0 → tornapiwrapper-2.17.0}/src/TornAPIWrapper.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TornAPIWrapper
3
- Version: 2.16.0
3
+ Version: 2.17.0
4
4
  Summary: A Python wrapper for the Torn City API, providing access to Torn City data.
5
5
  Author: cxdzc
6
6
  License: The MIT License (MIT)
@@ -53,7 +53,7 @@ Dynamic: license-file
53
53
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pypi/v/tornapiwrapper?cacheSeconds=300></a>
54
54
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pypi/pyversions/tornapiwrapper?cacheSeconds=300></a>
55
55
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pepy/dt/tornapiwrapper?color=blue&cacheSeconds=300></a>
56
- <a href="https://www.torn.com/api.html#:~:text=Patch%20Notes"><img src=https://img.shields.io/badge/patch-20.08.2026-c4c4c4?cacheSeconds=300></a>
56
+ <a href="https://www.torn.com/api.html#:~:text=Patch%20Notes"><img src=https://img.shields.io/badge/patch-21.08.2026-c4c4c4?cacheSeconds=300></a>
57
57
  <a rel="license" href="https://github.com/cxdzc/TornAPIWrapper/blob/main/LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-ab1436"/></a>
58
58
  </div>
59
59
 
@@ -6,7 +6,7 @@
6
6
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pypi/v/tornapiwrapper?cacheSeconds=300></a>
7
7
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pypi/pyversions/tornapiwrapper?cacheSeconds=300></a>
8
8
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pepy/dt/tornapiwrapper?color=blue&cacheSeconds=300></a>
9
- <a href="https://www.torn.com/api.html#:~:text=Patch%20Notes"><img src=https://img.shields.io/badge/patch-20.08.2026-c4c4c4?cacheSeconds=300></a>
9
+ <a href="https://www.torn.com/api.html#:~:text=Patch%20Notes"><img src=https://img.shields.io/badge/patch-21.08.2026-c4c4c4?cacheSeconds=300></a>
10
10
  <a rel="license" href="https://github.com/cxdzc/TornAPIWrapper/blob/main/LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-ab1436"/></a>
11
11
  </div>
12
12
 
@@ -26,9 +26,11 @@ __author__ = "cxdzc"
26
26
  __copyright__ = "Copyright 2023-Present cxdzc"
27
27
  __license__ = "MIT"
28
28
  __title__ = "TornAPIWrapper"
29
- __version__ = "2.16.0"
30
- __patch__ = "20.08.2026"
29
+ __version__ = "2.17.0"
30
+ __patch__ = "21.08.2026"
31
31
 
32
+ from .client import TornAPIWrapper
33
+ from .client_async import TornAPIWrapperAsync
32
34
  from .errors import (
33
35
  WrapperError,
34
36
  UnhandledAPIError,
@@ -63,9 +65,8 @@ from .errors import (
63
65
  MigrationRequiredOC2,
64
66
  InvalidLogId,
65
67
  InvalidInteractionLogCategory,
68
+ FileDoesNotExist,
66
69
  )
67
- from .client import TornAPIWrapper
68
- from .client_async import TornAPIWrapperAsync
69
70
 
70
71
  __all__ = [
71
72
  "TornAPIWrapper",
@@ -105,4 +106,5 @@ __all__ = [
105
106
  "MigrationRequiredOC2",
106
107
  "InvalidLogId",
107
108
  "InvalidInteractionLogCategory",
109
+ "FileDoesNotExist",
108
110
  ]
@@ -35,7 +35,6 @@ from .endpoints.racing import Racing
35
35
  from .endpoints.torn import Torn
36
36
  from .endpoints.user import User
37
37
  from .errors import TornAPIErrorHandler
38
- from .text_response_endpoints import text_response_endpoints
39
38
 
40
39
 
41
40
  class TornAPIWrapper:
@@ -71,7 +70,7 @@ class TornAPIWrapper:
71
70
  """
72
71
  api_request = self.session.get(url=f"{self.BASE_URL}{endpoint}", params=params, timeout=self.request_timeout)
73
72
  api_request.raise_for_status()
74
- if endpoint in text_response_endpoints:
73
+ if api_request.headers.get("Content-Type", None) == "text/csv":
75
74
  return api_request.text
76
75
  api_request_json = api_request.json()
77
76
  api_request_error = api_request_json.get("error")
@@ -35,7 +35,6 @@ from .endpoints_async.racing import Racing
35
35
  from .endpoints_async.torn import Torn
36
36
  from .endpoints_async.user import User
37
37
  from .errors import TornAPIErrorHandler
38
- from .text_response_endpoints import text_response_endpoints
39
38
 
40
39
 
41
40
  class TornAPIWrapperAsync:
@@ -77,7 +76,7 @@ class TornAPIWrapperAsync:
77
76
  """
78
77
  async with self.session.get(url=f"{self.BASE_URL}{endpoint}", params=params) as api_request:
79
78
  api_request.raise_for_status()
80
- if endpoint in text_response_endpoints:
79
+ if api_request.headers.get("Content-Type", None) == "text/csv":
81
80
  return await api_request.text()
82
81
  api_request_json = await api_request.json()
83
82
  api_request_error = api_request_json.get("error")
@@ -247,11 +247,11 @@ class Torn:
247
247
  """
248
248
  return self.api.request("/torn/itemammo", build_params(self.get_itemammo, locals()))
249
249
 
250
- def get_itemdetails(self, item_id: int, timestamp: int = None, comment: str = None) -> dict:
250
+ def get_itemdetails(self, item_ids: list[int], timestamp: int = None, comment: str = None) -> dict:
251
251
  """
252
- Get information about a specific item.
252
+ Get details for specific item(s).
253
253
  API key (Public).
254
- :param item_id: Item uid.
254
+ :param item_ids: Item uid or a list of item uids (comma separated), 25 uids maximum.
255
255
  :param timestamp: Timestamp to bypass cache.
256
256
  :param comment: Comment for your tool/service/bot/website to be visible in the logs.
257
257
  :return: API response data.
@@ -270,6 +270,18 @@ class Torn:
270
270
  """
271
271
  return self.api.request("/torn/itemmods", build_params(self.get_itemmods, locals()))
272
272
 
273
+ def get_itemstats(self, item_ids: list[int], timestamp: int = None, comment: str = None) -> dict:
274
+ """
275
+ Get specific item(s) stats.
276
+ API key (Public).
277
+ :param item_ids: Item uid or a list of item uids (comma separated), 25 uids maximum.
278
+ :param timestamp: Timestamp to bypass cache.
279
+ :param comment: Comment for your tool/service/bot/website to be visible in the logs.
280
+ :return: API response data.
281
+ :rtype: dict
282
+ """
283
+ return self.api.request("/torn/itemstats", build_params(self.get_itemstats, locals()))
284
+
273
285
  def get_items(self, item_ids: list[int] = None, item_category: TornItemsCatOptions = None, sort: SortOptions = "ASC", timestamp: int = None, comment: str = None) -> dict:
274
286
  """
275
287
  Get information about items.
@@ -378,6 +390,17 @@ class Torn:
378
390
  """
379
391
  return self.api.request("/torn/properties", build_params(self.get_properties, locals()))
380
392
 
393
+ def get_rockpaperscissors(self, timestamp: int = None, comment: str = None) -> dict:
394
+ """
395
+ Get rock paper scissors competition stats.
396
+ API key (Public).
397
+ :param timestamp: Timestamp to bypass cache.
398
+ :param comment: Comment for your tool/service/bot/website to be visible in the logs.
399
+ :return: API response data.
400
+ :rtype: dict
401
+ """
402
+ return self.api.request("/torn/rockpaperscissors", build_params(self.get_rockpaperscissors, locals()))
403
+
381
404
  def get_searchforcash(self, timestamp: int = None, comment: str = None) -> dict:
382
405
  """
383
406
  Get search for cash crime statuses.
@@ -400,6 +423,17 @@ class Torn:
400
423
  """
401
424
  return self.api.request("/torn/shoplifting", build_params(self.get_shoplifting, locals()))
402
425
 
426
+ def get_stats(self, timestamp: int = None, comment: str = None) -> dict:
427
+ """
428
+ Get daily city stats.
429
+ API key (Public).
430
+ :param timestamp: Timestamp to bypass cache.
431
+ :param comment: Comment for your tool/service/bot/website to be visible in the logs.
432
+ :return: API response data.
433
+ :rtype: dict
434
+ """
435
+ return self.api.request("/torn/stats", build_params(self.get_stats, locals()))
436
+
403
437
  def get_stocks(self, stock_id: int = None, timestamp: int = None, comment: str = None) -> dict:
404
438
  """
405
439
  Get all stocks or specific stock with chart history.
@@ -260,7 +260,6 @@ class MigrationRequiredOC2(APIError):
260
260
  """
261
261
  pass
262
262
 
263
-
264
263
  class InvalidLogId(APIError):
265
264
  """
266
265
  28
@@ -268,7 +267,6 @@ class InvalidLogId(APIError):
268
267
  """
269
268
  pass
270
269
 
271
-
272
270
  class InvalidInteractionLogCategory(APIError):
273
271
  """
274
272
  29
@@ -276,6 +274,13 @@ class InvalidInteractionLogCategory(APIError):
276
274
  """
277
275
  pass
278
276
 
277
+ class FileDoesNotExist(APIError):
278
+ """
279
+ 30
280
+ File does not exist.
281
+ """
282
+ pass
283
+
279
284
  class TornAPIErrorHandler:
280
285
  """
281
286
  Handle Torn API error codes and raise appropriate exceptions.
@@ -311,6 +316,7 @@ class TornAPIErrorHandler:
311
316
  27: (MigrationRequiredOC2, "Must be migrated to organized crimes 2.0."),
312
317
  28: (InvalidLogId, "Incorrect log ID."),
313
318
  29: (InvalidInteractionLogCategory, "Category selection is not available for interaction logs."),
319
+ 30: (FileDoesNotExist, "File does not exist."),
314
320
  }
315
321
 
316
322
  def raise_code(self, error_code: int):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TornAPIWrapper
3
- Version: 2.16.0
3
+ Version: 2.17.0
4
4
  Summary: A Python wrapper for the Torn City API, providing access to Torn City data.
5
5
  Author: cxdzc
6
6
  License: The MIT License (MIT)
@@ -53,7 +53,7 @@ Dynamic: license-file
53
53
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pypi/v/tornapiwrapper?cacheSeconds=300></a>
54
54
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pypi/pyversions/tornapiwrapper?cacheSeconds=300></a>
55
55
  <a href="https://pypi.org/project/TornAPIWrapper/"><img src=https://img.shields.io/pepy/dt/tornapiwrapper?color=blue&cacheSeconds=300></a>
56
- <a href="https://www.torn.com/api.html#:~:text=Patch%20Notes"><img src=https://img.shields.io/badge/patch-20.08.2026-c4c4c4?cacheSeconds=300></a>
56
+ <a href="https://www.torn.com/api.html#:~:text=Patch%20Notes"><img src=https://img.shields.io/badge/patch-21.08.2026-c4c4c4?cacheSeconds=300></a>
57
57
  <a rel="license" href="https://github.com/cxdzc/TornAPIWrapper/blob/main/LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-ab1436"/></a>
58
58
  </div>
59
59
 
@@ -6,7 +6,6 @@ src/TornAPIWrapper/__main__.py
6
6
  src/TornAPIWrapper/client.py
7
7
  src/TornAPIWrapper/client_async.py
8
8
  src/TornAPIWrapper/errors.py
9
- src/TornAPIWrapper/text_response_endpoints.py
10
9
  src/TornAPIWrapper/type_hints.py
11
10
  src/TornAPIWrapper.egg-info/PKG-INFO
12
11
  src/TornAPIWrapper.egg-info/SOURCES.txt
@@ -1 +0,0 @@
1
- text_response_endpoints = {"/user/snapshot", "/faction/snapshot", "/company/snapshot"}
File without changes