TornAPIWrapper 2.9.0__py3-none-any.whl → 2.10.0__py3-none-any.whl

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.
@@ -26,8 +26,8 @@ __author__ = "cxdzc"
26
26
  __copyright__ = "Copyright 2023-Present cxdzc"
27
27
  __license__ = "MIT"
28
28
  __title__ = "TornAPIWrapper"
29
- __version__ = "2.9.0"
30
- __patch__ = "01.06.2026"
29
+ __version__ = "2.10.0"
30
+ __patch__ = "16.07.2026"
31
31
 
32
32
  from .errors import (
33
33
  WrapperError,
TornAPIWrapper/client.py CHANGED
@@ -35,6 +35,8 @@ 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
  class TornAPIWrapper:
40
42
  """
@@ -59,16 +61,18 @@ class TornAPIWrapper:
59
61
  self.key: Key = Key(self)
60
62
  self.torn: Torn = Torn(self)
61
63
 
62
- def request(self, endpoint: str, params: dict | None) -> dict:
64
+ def request(self, endpoint: str, params: dict | None) -> dict | str:
63
65
  """
64
- Sends a request to the Torn API and returns the JSON response.
66
+ Sends a request to the Torn API and returns either JSON data or raw text.
65
67
  :param endpoint: Torn API endpoint path.
66
68
  :param params: Query parameters to include in the request.
67
69
  :return: API response data.
68
- :rtype: dict
70
+ :rtype: dict | str
69
71
  """
70
72
  api_request = self.session.get(url=f"{self.BASE_URL}{endpoint}", params=params, timeout=self.request_timeout)
71
73
  api_request.raise_for_status()
74
+ if endpoint in text_response_endpoints:
75
+ return api_request.text
72
76
  api_request_json = api_request.json()
73
77
  api_request_error = api_request_json.get("error")
74
78
  if api_request_error:
@@ -35,6 +35,8 @@ 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
  class TornAPIWrapperAsync:
40
42
  """
@@ -65,16 +67,18 @@ class TornAPIWrapperAsync:
65
67
  self.key: Key = Key(self)
66
68
  self.torn: Torn = Torn(self)
67
69
 
68
- async def request(self, endpoint: str, params: dict | None) -> dict:
70
+ async def request(self, endpoint: str, params: dict | None) -> dict | str:
69
71
  """
70
- Sends a request to the Torn API and returns the JSON response.
72
+ Sends a request to the Torn API and returns either JSON data or raw text.
71
73
  :param endpoint: Torn API endpoint path.
72
74
  :param params: Query parameters to include in the request.
73
75
  :return: API response data.
74
- :rtype: dict
76
+ :rtype: dict | str
75
77
  """
76
78
  async with self.session.get(url=f"{self.BASE_URL}{endpoint}", params=params) as api_request:
77
79
  api_request.raise_for_status()
80
+ if endpoint in text_response_endpoints:
81
+ return await api_request.text()
78
82
  api_request_json = await api_request.json()
79
83
  api_request_error = api_request_json.get("error")
80
84
  if api_request_error:
@@ -402,6 +402,20 @@ class Faction:
402
402
  """
403
403
  return self.api.request("/faction/search", build_params(self.get_search, locals()))
404
404
 
405
+ def get_snapshot(self, timestamp: int = None, comment: str = None) -> dict:
406
+ """
407
+ Get daily factions snapshot CSV.
408
+ API key (Public).
409
+ Returns a CSV daily snapshot of factions.
410
+ This selection is standalone and cannot be used together with other selections.
411
+ CSV columns: id, name, tag, tag_image, banner_image, leader_id, co_leader_id, respect, days_old, rank, members, members_max, member_list, recruiting, destroyed_timestamp
412
+ :param timestamp: Timestamp to bypass cache.
413
+ :param comment: Comment for your tool/service/bot/website to be visible in the logs.
414
+ :return: API response data.
415
+ :rtype: dict
416
+ """
417
+ return self.api.request("/faction/snapshot", build_params(self.get_snapshot, locals()))
418
+
405
419
  def get_stats(self, timestamp: int = None, comment: str = None) -> dict:
406
420
  """
407
421
  Get your faction's challenges stats.
@@ -402,6 +402,20 @@ class Faction:
402
402
  """
403
403
  return await self.api.request("/faction/search", build_params(self.get_search, locals()))
404
404
 
405
+ async def get_snapshot(self, timestamp: int = None, comment: str = None) -> dict:
406
+ """
407
+ Get daily factions snapshot CSV.
408
+ API key (Public).
409
+ Returns a CSV daily snapshot of factions.
410
+ This selection is standalone and cannot be used together with other selections.
411
+ CSV columns: id, name, tag, tag_image, banner_image, leader_id, co_leader_id, respect, days_old, rank, members, members_max, member_list, recruiting, destroyed_timestamp
412
+ :param timestamp: Timestamp to bypass cache.
413
+ :param comment: Comment for your tool/service/bot/website to be visible in the logs.
414
+ :return: API response data.
415
+ :rtype: dict
416
+ """
417
+ return await self.api.request("/faction/snapshot", build_params(self.get_snapshot, locals()))
418
+
405
419
  async def get_stats(self, timestamp: int = None, comment: str = None) -> dict:
406
420
  """
407
421
  Get your faction's challenges stats.
@@ -0,0 +1 @@
1
+ text_response_endpoints = {"/company/snapshot"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TornAPIWrapper
3
- Version: 2.9.0
3
+ Version: 2.10.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-01.06.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-16.07.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
 
@@ -1,12 +1,13 @@
1
- TornAPIWrapper/__init__.py,sha256=KYA3CC89grnh3B-S1jkYCs_5YrfUFaFA2afhcggfVBg,2763
1
+ TornAPIWrapper/__init__.py,sha256=PeGDDLReUdGrzeAkOxgjVi-U79DNt-hiJe5qYH8HMcE,2764
2
2
  TornAPIWrapper/__main__.py,sha256=JKsDOr6esnYwiUO5HypNL_0ieiEc5YCItsLwdMfxyLs,1806
3
- TornAPIWrapper/client.py,sha256=IFKujsxf2A1buBsQwPmXbxgjRVmXg2rwNBBKv9OXCFc,3199
4
- TornAPIWrapper/client_async.py,sha256=rn_AtgrtgNeumiwKD29F7f8l-4Oxr41AnMXbSGVQXqY,3976
3
+ TornAPIWrapper/client.py,sha256=2Mn4wNgJm8_9OWl7u5OtKM10XcXbIq71jnCmgyosl_c,3368
4
+ TornAPIWrapper/client_async.py,sha256=AsEQBEuCmUkwtPnimoxBcwYpldn_s5sTCwXF9CnvqXA,4161
5
5
  TornAPIWrapper/errors.py,sha256=lq0c7tA7M7-7r7rE7Mt1Edp9lOc4iEGY1BLazYrBEz4,9328
6
+ TornAPIWrapper/text_response_endpoints.py,sha256=h1I5p1PtPz4Z5ebIUxwBPMe13QwC_VP6fQTP3jux5yM,48
6
7
  TornAPIWrapper/type_hints.py,sha256=tf0RLIKI4LKupMLyOVywUPvUBO07k0lfrWr2Qmc-d7U,9050
7
8
  TornAPIWrapper/endpoints/__init__.py,sha256=UoVUdkQ9O_wgG2QJvIsOMFtYR0n2-XjUCFUccBSbD7A,1126
8
9
  TornAPIWrapper/endpoints/company.py,sha256=ibcIZTDJD8RDfH_G_GpaQKpU8A4hceM1OwicwwLSyTM,8699
9
- TornAPIWrapper/endpoints/faction.py,sha256=sdqaBvckixkCL1zfKqC0B8B0rwKRB7sc8CI6EzQ9qe0,30608
10
+ TornAPIWrapper/endpoints/faction.py,sha256=wjXrUH0RLL5GGE-nzGeYy_tT_dA9fRIxAAXD9xGT0to,31395
10
11
  TornAPIWrapper/endpoints/forum.py,sha256=F9ocJ9RAiC67Cvdmgj08GGiqPmITT3-_lZL6Lox8zGY,5701
11
12
  TornAPIWrapper/endpoints/key.py,sha256=GC8e7Z28mKViAauqr38gjAMJfWHns5Rn5sNOICHy854,2494
12
13
  TornAPIWrapper/endpoints/market.py,sha256=Iv7kQ3tCtayjXG-NQu2uTAW04dbS37zMgJx1KDf7_HU,7113
@@ -16,7 +17,7 @@ TornAPIWrapper/endpoints/torn.py,sha256=utJ4vz3hLXaqNdEq-ycs78nsqwYvyGh3oEJqlZEz
16
17
  TornAPIWrapper/endpoints/user.py,sha256=q8kHn2VAnybjAxt3Sr2qJ80nol5YYm6dDJyRic0CLKM,46336
17
18
  TornAPIWrapper/endpoints_async/__init__.py,sha256=1x2hi50HSEPTeUVrUD1NQTkhpLjyVGg8kDo4LcXFcP8,1132
18
19
  TornAPIWrapper/endpoints_async/company.py,sha256=gCrb2TJYpR93b8-gAfQlW3k0QGCzhUZUzLOwpCUj0Rs,8835
19
- TornAPIWrapper/endpoints_async/faction.py,sha256=823cLOK4Y9sqWfP_ARJacJrd4eJbTZlGhjLDw8Uh0C8,31032
20
+ TornAPIWrapper/endpoints_async/faction.py,sha256=zWnVhSBpDe-yDLEAQCXjov_UyeqCnRh71w8Hnj15Cjw,31831
20
21
  TornAPIWrapper/endpoints_async/forum.py,sha256=rIxZYuViGnUYSerak0whRHdbZlLfCbVJMg3roVRLEGU,5789
21
22
  TornAPIWrapper/endpoints_async/key.py,sha256=d04B-YVkghJBqnyroGABlUX_HD-PNFAT-mI1ZYeipbk,2534
22
23
  TornAPIWrapper/endpoints_async/market.py,sha256=lfLwbTTUxTajdWM45XEBLVm83UX2oZRXpA7ZDupuA1g,7225
@@ -27,8 +28,8 @@ TornAPIWrapper/endpoints_async/user.py,sha256=cm5d0INBrZ3xukzOhcLIQcDeCqfHnhKGct
27
28
  TornAPIWrapper/params/__init__.py,sha256=62xgULpfqEnTYmzSz_6W2MVGtna4DFb6oABy02ZsGcY,1123
28
29
  TornAPIWrapper/params/builders.py,sha256=WQIHSmMgJedNpwps8p4QjXvMLG-s09QBsT1Qynaxx1s,2057
29
30
  TornAPIWrapper/params/map.py,sha256=rWxyyQBpUsqQYgjoZRqNWYwr0JfinFMpQtX7FNtGTDs,1421
30
- tornapiwrapper-2.9.0.dist-info/licenses/LICENSE,sha256=tFxfnm48fk5x0JCMs1t7Ao6XDt_bHn_ogl3Y_q2EuPc,1079
31
- tornapiwrapper-2.9.0.dist-info/METADATA,sha256=pvPj4mjTDHh9hsiZ5ZKvxNQkppQaI9u3UmfBEmTTIOE,5069
32
- tornapiwrapper-2.9.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
33
- tornapiwrapper-2.9.0.dist-info/top_level.txt,sha256=z3QKLWbCxzb7qZb9LV37myVFXQm3hgA57PGuSWkc4R4,15
34
- tornapiwrapper-2.9.0.dist-info/RECORD,,
31
+ tornapiwrapper-2.10.0.dist-info/licenses/LICENSE,sha256=tFxfnm48fk5x0JCMs1t7Ao6XDt_bHn_ogl3Y_q2EuPc,1079
32
+ tornapiwrapper-2.10.0.dist-info/METADATA,sha256=yPAp21j5wNaraGdlO6pgUef7wjXkBlmGgLU2raTc99E,5070
33
+ tornapiwrapper-2.10.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
34
+ tornapiwrapper-2.10.0.dist-info/top_level.txt,sha256=z3QKLWbCxzb7qZb9LV37myVFXQm3hgA57PGuSWkc4R4,15
35
+ tornapiwrapper-2.10.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (82.0.1)
2
+ Generator: setuptools (83.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5