python-rucaptcha 6.3__py3-none-any.whl → 6.3.2__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.
@@ -1 +1 @@
1
- __version__ = "6.3"
1
+ __version__ = "6.3.2"
@@ -71,11 +71,14 @@ class atbCaptcha(BaseCaptcha):
71
71
 
72
72
  Notes:
73
73
  https://rucaptcha.com/api-docs/atb-captcha
74
+
74
75
  https://2captcha.com/api-docs/atb-captcha
75
76
  """
76
77
  super().__init__(method=method, *args, **kwargs)
77
78
 
78
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "appId": appId, "apiServer": apiServer})
79
+ self.create_task_payload["task"].update(
80
+ {"websiteURL": websiteURL, "appId": appId, "apiServer": apiServer}
81
+ )
79
82
 
80
83
  # check user params
81
84
  if method not in atbCaptchaEnm.list_values():
@@ -55,10 +55,15 @@ class Control(BaseCaptcha):
55
55
 
56
56
  Notes:
57
57
  https://rucaptcha.com/api-docs/get-balance
58
+
58
59
  https://rucaptcha.com/api-docs/report-correct
60
+
59
61
  https://rucaptcha.com/api-docs/report-incorrect
62
+
60
63
  https://2captcha.com/api-docs/get-balance
64
+
61
65
  https://2captcha.com/api-docs/report-correct
66
+
62
67
  https://2captcha.com/api-docs/report-incorrect
63
68
  """
64
69
 
@@ -12,7 +12,13 @@ from requests.adapters import HTTPAdapter
12
12
 
13
13
  from .enums import ServiceEnm, SaveFormatsEnm
14
14
  from .config import RETRIES, ASYNC_RETRIES
15
- from .serializer import TaskSer, CaptchaOptionsSer, CreateTaskBaseSer, GetTaskResultRequestSer, GetTaskResultResponseSer
15
+ from .serializer import (
16
+ TaskSer,
17
+ CaptchaOptionsSer,
18
+ CreateTaskBaseSer,
19
+ GetTaskResultRequestSer,
20
+ GetTaskResultResponseSer,
21
+ )
16
22
  from .result_handler import get_sync_result, get_async_result
17
23
 
18
24
 
@@ -79,7 +85,9 @@ class BaseCaptcha:
79
85
  time.sleep(self.params.sleep_time)
80
86
 
81
87
  return get_sync_result(
82
- get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, url_response=self.params.url_response
88
+ get_payload=self.get_task_payload,
89
+ sleep_time=self.params.sleep_time,
90
+ url_response=self.params.url_response,
83
91
  )
84
92
 
85
93
  def url_open(self, url: str, **kwargs):
@@ -174,7 +182,9 @@ class BaseCaptcha:
174
182
  )
175
183
  # if the file is transferred in base64 encoding
176
184
  elif captcha_base64:
177
- self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")})
185
+ self.create_task_payload["task"].update(
186
+ {"body": base64.b64encode(captcha_base64).decode("utf-8")}
187
+ )
178
188
  # if a URL is passed
179
189
  elif captcha_link:
180
190
  try:
@@ -209,7 +219,9 @@ class BaseCaptcha:
209
219
  )
210
220
  # if the file is transferred in base64 encoding
211
221
  elif captcha_base64:
212
- self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")})
222
+ self.create_task_payload["task"].update(
223
+ {"body": base64.b64encode(captcha_base64).decode("utf-8")}
224
+ )
213
225
  # if a URL is passed
214
226
  elif captcha_link:
215
227
  try:
@@ -159,3 +159,8 @@ class TencentEnm(str, MyEnum):
159
159
  class atbCaptchaEnm(str, MyEnum):
160
160
  AtbCaptchaTask = "AtbCaptchaTask"
161
161
  AtbCaptchaTaskProxyless = "AtbCaptchaTaskProxyless"
162
+
163
+
164
+ class ProsopoEnm(str, MyEnum):
165
+ ProsopoTask = "ProsopoTask"
166
+ ProsopoTaskProxyless = "ProsopoTaskProxyless "
@@ -10,7 +10,9 @@ from .config import attempts_generator
10
10
  from .serializer import GetTaskResultRequestSer, GetTaskResultResponseSer
11
11
 
12
12
 
13
- def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str) -> Union[dict, Exception]:
13
+ def get_sync_result(
14
+ get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str
15
+ ) -> Union[dict, Exception]:
14
16
  """
15
17
  Function periodically send the SYNC request to service and wait for captcha solving result
16
18
  """
@@ -48,7 +50,9 @@ async def get_async_result(
48
50
  for _ in attempts:
49
51
  try:
50
52
  # send a request for the result of solving the captcha
51
- async with session.post(url_response, json=get_payload.to_dict(), raise_for_status=True) as resp:
53
+ async with session.post(
54
+ url_response, json=get_payload.to_dict(), raise_for_status=True
55
+ ) as resp:
52
56
  captcha_response = await resp.json(content_type=None)
53
57
  captcha_response = GetTaskResultResponseSer(**captcha_response, taskId=get_payload.taskId)
54
58
 
@@ -81,7 +81,9 @@ class CutCaptcha(BaseCaptcha):
81
81
  """
82
82
  super().__init__(method=method, *args, **kwargs)
83
83
 
84
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "miseryKey": miseryKey, "apiKey": apiKey})
84
+ self.create_task_payload["task"].update(
85
+ {"websiteURL": websiteURL, "miseryKey": miseryKey, "apiKey": apiKey}
86
+ )
85
87
 
86
88
  # check user params
87
89
  if method not in CutCaptchaEnm.list_values():
@@ -69,7 +69,9 @@ class FunCaptcha(BaseCaptcha):
69
69
  """
70
70
  super().__init__(method=method, *args, **kwargs)
71
71
 
72
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "websitePublicKey": websitePublicKey})
72
+ self.create_task_payload["task"].update(
73
+ {"websiteURL": websiteURL, "websitePublicKey": websitePublicKey}
74
+ )
73
75
 
74
76
  # check user params
75
77
  if method not in FunCaptchaEnm.list_values():
@@ -78,7 +78,9 @@ class LeminCaptcha(BaseCaptcha):
78
78
  """
79
79
  super().__init__(method=method, *args, **kwargs)
80
80
 
81
- self.create_task_payload["task"].update({"websiteURL": websiteURL, "captchaId": captchaId, "div_id": div_id})
81
+ self.create_task_payload["task"].update(
82
+ {"websiteURL": websiteURL, "captchaId": captchaId, "div_id": div_id}
83
+ )
82
84
 
83
85
  # check user params
84
86
  if method not in LeminCaptchaEnm.list_values():
@@ -0,0 +1,108 @@
1
+ from typing import Union
2
+
3
+ from .core.base import BaseCaptcha
4
+ from .core.enums import ProsopoEnm
5
+
6
+
7
+ class Prosopo(BaseCaptcha):
8
+ def __init__(
9
+ self,
10
+ websiteURL: str,
11
+ websiteKey: str,
12
+ method: Union[str, ProsopoEnm] = ProsopoEnm.ProsopoTaskProxyless,
13
+ *args,
14
+ **kwargs,
15
+ ):
16
+ """
17
+ The class is used to work with Prosopo.
18
+
19
+ Args:
20
+ rucaptcha_key: User API key
21
+ websiteURL: The full URL of target web page where the captcha is loaded.
22
+ We do not open the page, not a problem if it is available
23
+ only for authenticated users
24
+ websiteKey: The value of `siteKey` parameter found on the page.
25
+ method: Captcha type
26
+
27
+ Examples:
28
+ >>> Prosopo(rucaptcha_key="aa9011f31111181111168611f1151122",
29
+ ... websiteURL="https://www.example.com/",
30
+ ... websiteKey="5EPQoMZEDc5LpN7gtxMMzYPTzA6UeWqL2stk1rso9gy4Ahqt",
31
+ ... method=ProsopoEnm.ProsopoTaskProxyless.value,
32
+ ... ).captcha_handler()
33
+ {
34
+ "errorId":0,
35
+ "status":"ready",
36
+ "solution":{
37
+ "token": "0x00016c68747470733950547a4136",
38
+ },
39
+ "cost":"0.00299",
40
+ "ip":"1.2.3.4",
41
+ "createTime":1692863536,
42
+ "endTime":1692863556,
43
+ "solveCount":1,
44
+ "taskId":75190409731
45
+ }
46
+
47
+ >>> await Prosopo(rucaptcha_key="aa9011f31111181111168611f1151122",
48
+ ... websiteURL="https://www.example.com/",
49
+ ... websiteKey="5EPQoMZEDc5LpN7gtxMMzYPTzA6UeWqL2stk1rso9gy4Ahqt",
50
+ ... method=ProsopoEnm.ProsopoTaskProxyless.value,
51
+ ... ).aio_captcha_handler()
52
+ {
53
+ "errorId":0,
54
+ "status":"ready",
55
+ "solution":{
56
+ "token": "0x00016c68747470733950547a4136",
57
+ },
58
+ "cost":"0.00299",
59
+ "ip":"1.2.3.4",
60
+ "createTime":1692863536,
61
+ "endTime":1692863556,
62
+ "solveCount":1,
63
+ "taskId":75190409731
64
+ }
65
+
66
+ Returns:
67
+ Dict with full server response
68
+
69
+ Notes:
70
+ https://rucaptcha.com/api-docs/prosopo-procaptcha
71
+
72
+ https://rucaptcha.com/api-docs/prosopo-procaptcha
73
+ """
74
+ super().__init__(method=method, *args, **kwargs)
75
+
76
+ self.create_task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey})
77
+
78
+ # check user params
79
+ if method not in ProsopoEnm.list_values():
80
+ raise ValueError(f"Invalid method parameter set, available - {ProsopoEnm.list_values()}")
81
+
82
+ def captcha_handler(self, **kwargs) -> dict:
83
+ """
84
+ Sync solving method
85
+
86
+ Args:
87
+ kwargs: additional params for `requests` library
88
+
89
+ Returns:
90
+ Dict with full server response
91
+
92
+ Notes:
93
+ Check class docstirng for more info
94
+ """
95
+
96
+ return self._processing_response(**kwargs)
97
+
98
+ async def aio_captcha_handler(self) -> dict:
99
+ """
100
+ Async solving method
101
+
102
+ Returns:
103
+ Dict with full server response
104
+
105
+ Notes:
106
+ Check class docstirng for more info
107
+ """
108
+ return await self._aio_processing_response()
@@ -74,6 +74,7 @@ class Tencent(BaseCaptcha):
74
74
 
75
75
  Notes:
76
76
  https://rucaptcha.com/api-docs/tencent
77
+
77
78
  https://2captcha.com/api-docs/tencent
78
79
  """
79
80
  super().__init__(method=method, *args, **kwargs)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: python-rucaptcha
3
- Version: 6.3
3
+ Version: 6.3.2
4
4
  Summary: Python 3.9+ RuCaptcha library with AIO module.
5
5
  Author-email: AndreiDrang <python-captcha@pm.me>
6
6
  License: MIT License
@@ -29,22 +29,23 @@ Description-Content-Type: text/markdown
29
29
  License-File: LICENSE
30
30
  Requires-Dist: requests>=2.21.0
31
31
  Requires-Dist: aiohttp>=3.9.2
32
- Requires-Dist: msgspec==0.18.*
32
+ Requires-Dist: msgspec<0.20,>=0.18
33
33
  Requires-Dist: tenacity<10,>=8
34
34
 
35
35
  # python-rucaptcha
36
36
 
37
- ![Logo](https://red-panda-dev.xyz/media/images/RuCaptchaHigh_zkkPoYF.original.png)
37
+ [![RuCaptchaHigh.png](https://s.vyjava.xyz/files/2024/12-December/17/45247a56/RuCaptchaHigh.png)](https://vyjava.xyz/dashboard/image/45247a56-3332-48ee-8df8-fc95bcfc52f0)
38
38
 
39
39
  ### [Capsolver](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
40
40
 
41
- [![Capsolver](files/capsolver.jpg)](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
41
+ [![capsolver.jpg](https://s.vyjava.xyz/files/2024/12-December/17/54e1db0e/capsolver.jpg)](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)
42
42
 
43
43
  <hr>
44
44
 
45
45
  [![PyPI version](https://badge.fury.io/py/python-rucaptcha.svg)](https://badge.fury.io/py/python-rucaptcha)
46
46
  [![Python versions](https://img.shields.io/pypi/pyversions/python-rucaptcha.svg?logo=python&logoColor=FBE072)](https://badge.fury.io/py/python-rucaptcha)
47
47
  [![Downloads](https://static.pepy.tech/badge/python-rucaptcha/month)](https://pepy.tech/project/python-rucaptcha)
48
+ [![Static Badge](https://img.shields.io/badge/docs-Sphinx-green?label=Documentation&labelColor=gray)](https://andreidrang.github.io/python-rucaptcha/)
48
49
 
49
50
  [![Maintainability](https://api.codeclimate.com/v1/badges/aec93bb04a277cf0dde9/maintainability)](https://codeclimate.com/github/AndreiDrang/python-rucaptcha/maintainability)
50
51
  [![Codacy Badge](https://app.codacy.com/project/badge/Grade/b4087362bd024b088b358b3e10e7a62f)](https://www.codacy.com/gh/AndreiDrang/python-rucaptcha/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=AndreiDrang/python-rucaptcha&amp;utm_campaign=Badge_Grade)
@@ -56,21 +57,16 @@ Requires-Dist: tenacity<10,>=8
56
57
  [![Tests](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/test.yml)
57
58
  [![Lint](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/lint.yml/badge.svg?branch=master)](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/lint.yml)
58
59
 
59
- Python3 library for [RuCaptcha](https://rucaptcha.com/) and [2Captcha](https://2captcha.com/) service API.
60
+ Python3 library for [RuCaptcha](https://rucaptcha.com/?from=4170435) and [2Captcha](https://2captcha.com/?from=4170435) service API.
60
61
 
61
62
  Tested on UNIX based OS.
62
63
 
63
- The library is intended for software developers and is used to work with the [RuCaptcha](https://rucaptcha.com/) and [2Captcha](https://2captcha.com/) service API.
64
+ The library is intended for software developers and is used to work with the [RuCaptcha](https://rucaptcha.com/?from=4170435) and [2Captcha](https://2captcha.com/?from=4170435) service API.
64
65
 
65
66
  Support of the service [Death By Captcha](https://deathbycaptcha.com?refid=1237267242) is integrated into this library, more information in the library documentation or in the [service docs](https://deathbycaptcha.com/api/2captcha?refid=1237267242).
66
- ***
67
67
 
68
68
  Application in [RuCaptcha software](https://rucaptcha.com/software/python-rucaptcha) and [2Captcha software](https://2captcha.com/software/python-rucaptcha).
69
69
 
70
- If you have any questions, please send a message to the [Telegram](https://t.me/pythoncaptcha) chat room.
71
-
72
- Or email python-captcha@pm.me
73
-
74
70
  ## How to install?
75
71
 
76
72
  ### pip
@@ -103,4 +99,10 @@ For full changelog info check - [Releases page](https://github.com/AndreiDrang/p
103
99
 
104
100
  ### Get API Key to work with the library
105
101
  1. On the page - https://rucaptcha.com/enterpage
106
- 2. Find it: ![img.png](https://github.com/AndreiDrang/python-rucaptcha/blob/master/files/img.png)
102
+ 2. Find it: [![img.png](https://s.vyjava.xyz/files/2024/12-December/17/ac679557/img.png)](https://vyjava.xyz/dashboard/image/ac679557-f3cc-402f-bf95-6c45d252a2ef)
103
+
104
+ ### Contacts
105
+
106
+ If you have any questions, please send a message to the [Telegram](https://t.me/pythoncaptcha) chat room.
107
+
108
+ Or email python-captcha@pm.me
@@ -1,38 +1,39 @@
1
1
  python_rucaptcha/__init__.py,sha256=odkQWtwx2RgIjD8pw2ZF-KR-5nL0Yu2Wn7Mu2YdBrSk,61
2
- python_rucaptcha/__version__.py,sha256=twnD1Fpmy0_Af7L62IoZy2ao-JBuABOAN2gUt9qHRpo,20
2
+ python_rucaptcha/__version__.py,sha256=OKZjcwD69U3MrIvrJgcMdYy2P_EAc5PTibD6foeyE_E,22
3
3
  python_rucaptcha/amazon_waf.py,sha256=psEg-sym8xQlMPPto1ND_HE0vGV_SRRrDnsKuEbbxNA,3625
4
- python_rucaptcha/atb_captcha.py,sha256=HLY_ZGQLx0ej6NLZ4X-9L6RE9K4LfT8bWZZBnBnz_lA,3701
4
+ python_rucaptcha/atb_captcha.py,sha256=FuGG9MKTy7f_Sku7WQLZ7TCZ1ISFnu_0h4I3_Qri8JQ,3724
5
5
  python_rucaptcha/audio_captcha.py,sha256=Bp6-gF3cTnYL8aeY8k4D4Ii7zPqy1Qo2OFRooSEd0MQ,5600
6
6
  python_rucaptcha/bounding_box_captcha.py,sha256=JvJEU1Y0A1SVkJV9jEFgBQ7Nis-vFkTmfUBoHIeTinY,10648
7
7
  python_rucaptcha/capy_puzzle.py,sha256=ITr1HNALlaKtBkrBht2QtEtP-u6K4-JXpDKKwih7RhA,4973
8
- python_rucaptcha/control.py,sha256=2oBlvCnEV_tEsb8_1V-rrL7RLZZ5JTdGB5IcqDLFTUE,4988
8
+ python_rucaptcha/control.py,sha256=1KnPaUOVEU7DY6x9-CJvuyV8nFapBcxGRfE9y3dprTo,4993
9
9
  python_rucaptcha/coordinates_captcha.py,sha256=lmotaD_dOzo2T9MdcaOgQdB5opL-Hs-ZVUW5nTy-KJ0,9911
10
- python_rucaptcha/cutcaptcha.py,sha256=8FVoIoKyKXL-znpkJUscsR9Q4n-2nWGfBBpWUXTiQFQ,4028
10
+ python_rucaptcha/cutcaptcha.py,sha256=glhvQe8Q35ap7J5dyD7hcXkcswG27fkJpYsvyIoTTRg,4050
11
11
  python_rucaptcha/cyber_siara_captcha.py,sha256=P8oLkn3UZDuy3XjEyd59cK2QOHYesV6KQ5pMbw2deiA,3909
12
12
  python_rucaptcha/datadome_captcha.py,sha256=6ab7vDjYjUT4X_H5VJuAcuGtfUcBidzY-5vo7YH4lWY,4196
13
13
  python_rucaptcha/draw_around_captcha.py,sha256=uUaVk--31p0xh6sqTxtRdtxl0F4ZQ9KeESpmqY1WPR0,11837
14
14
  python_rucaptcha/friendly_captcha.py,sha256=c5sbhAHq5zPlk2-5gGcoPhjslEkBT24EtFip2S8cGao,4232
15
- python_rucaptcha/fun_captcha.py,sha256=hz-ulRnuzqyk8vAXaT52aZ_EyH_mf_VwauGVfjR8rV8,3496
15
+ python_rucaptcha/fun_captcha.py,sha256=iU_twFRGKjeQPPBXfcqEK0d0kffNaCxPpHrihzBRg5w,3518
16
16
  python_rucaptcha/gee_test.py,sha256=lxhqWm2uWWS_uQK5ufArjr-508pfecDYAEh4Ct-FthI,8583
17
17
  python_rucaptcha/grid_captcha.py,sha256=ssfl1BnBzxR1CHGdnjEG4wunTvEk9NvGIoiXQWHrt20,9001
18
18
  python_rucaptcha/hcaptcha.py,sha256=7i0S7A4LvBePUgVsCGpay8733Ve2rzjiZcR-CMTwa8s,3732
19
19
  python_rucaptcha/image_captcha.py,sha256=jWTO-kLSKXG12koO2X9dsFXCr3OjvXgj2aNJyhSomf4,8391
20
20
  python_rucaptcha/key_captcha.py,sha256=hufzqYEb3ZR23AsLWIL82HFTJnA8JsOJtXUA92b9tws,4017
21
- python_rucaptcha/lemin_captcha.py,sha256=vM9_Dk4TYdL3Y1w5JVyQVmeO32Mmhwz-_DBqTigjcYY,4064
21
+ python_rucaptcha/lemin_captcha.py,sha256=inEq-UWUbMX9aZdpyZBGRER-67YCS3PqxnDIpPAzmqM,4086
22
22
  python_rucaptcha/mt_captcha.py,sha256=usQK_LR9piDQM7lxkZbSKi6KIXedIBYyytKJBJe8jNg,3415
23
+ python_rucaptcha/prosopo.py,sha256=kZLn_iZsm1mzQ8pNuPAzbfNfH8UBnLg1iy996Ti3nMo,3516
23
24
  python_rucaptcha/re_captcha.py,sha256=XyJncVbmaV5jZR-qxZ1JdFum10W5yk5zeVrDbZ5dSKo,6083
24
25
  python_rucaptcha/rotate_captcha.py,sha256=o9y9SVLPI6G6NqK1siv3xbOSYm7PGNquJbbhXuxTIDE,6278
25
- python_rucaptcha/tencent.py,sha256=vKCx0R2RYZYwT_3gBVBSZbwqtSBKHw6tq7SS-2oHy0s,3648
26
+ python_rucaptcha/tencent.py,sha256=f7lnRBUl-X5rL2FNRnrlh9ITRCcerTaS6XGUXnQdnOA,3649
26
27
  python_rucaptcha/text_captcha.py,sha256=lZDPwTgpMLvqvfjPbT-uNuNu6JRdWTEE9qfjnRQ5y-A,3708
27
28
  python_rucaptcha/turnstile.py,sha256=VpmYGYJoRVX6NHipO6-g2U5EpwxZToAZRmULj4ReDD0,3686
28
29
  python_rucaptcha/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- python_rucaptcha/core/base.py,sha256=e_5e9q5xaEcz7Wi9l-chdxz5vPpOTm6PpblaBtMkMfw,9315
30
+ python_rucaptcha/core/base.py,sha256=MvP0zQspHUmAgI8mZle_sYhs7H0ynUKwdhz5PwaIx4c,9425
30
31
  python_rucaptcha/core/config.py,sha256=UHP9iAaW3VpVC_7eHz_ihkYWIMAA9t_UXERfs5LwKiM,553
31
- python_rucaptcha/core/enums.py,sha256=3YAUEcI2xXibufgQlbSWElC7c0pwb9jp0HW8tdnsL-8,3797
32
- python_rucaptcha/core/result_handler.py,sha256=uaeRMGP8Sagi7_Vh845lpvNXuNy4nVwgRKOsCKf2vXI,2680
32
+ python_rucaptcha/core/enums.py,sha256=t_7jYpRgTxnAgNx_S0LIBUUmTXBHCqnXxVJ6NhnfAOk,3913
33
+ python_rucaptcha/core/result_handler.py,sha256=LJskNbfgsOdxwzXoNknzVPzCnxBrSR6EwsvOJgs0aD8,2724
33
34
  python_rucaptcha/core/serializer.py,sha256=asJRFD14uwOXG8gaNqsfaukiPBbsxt4r0rDA7lCuNHk,1739
34
- python_rucaptcha-6.3.dist-info/LICENSE,sha256=N_utAsqhTp1pXXp-PTE-CFMg5BfIIqTbF-phwwzOHeQ,1063
35
- python_rucaptcha-6.3.dist-info/METADATA,sha256=c30HaJt6LJoGZhu4EOgLIaZp-9ezHNDv3EulaNtW4pE,6248
36
- python_rucaptcha-6.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
37
- python_rucaptcha-6.3.dist-info/top_level.txt,sha256=Eu_atEB79Y7jCsfXPcXF5N8OLt6kKVbvhuRsI1BmSWM,17
38
- python_rucaptcha-6.3.dist-info/RECORD,,
35
+ python_rucaptcha-6.3.2.dist-info/LICENSE,sha256=N_utAsqhTp1pXXp-PTE-CFMg5BfIIqTbF-phwwzOHeQ,1063
36
+ python_rucaptcha-6.3.2.dist-info/METADATA,sha256=fnY8wPnogkl-HHdUdAn580hiMq8yEyBWSqJBDXvtJ1k,6674
37
+ python_rucaptcha-6.3.2.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
38
+ python_rucaptcha-6.3.2.dist-info/top_level.txt,sha256=Eu_atEB79Y7jCsfXPcXF5N8OLt6kKVbvhuRsI1BmSWM,17
39
+ python_rucaptcha-6.3.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5