1+ from __future__ import annotations
2+
13import requests
24import time
35import json
46import warnings
7+ from typing import Any
58
69from urllib .parse import urljoin
710from .exceptions import AnticaptchaException
@@ -15,49 +18,49 @@ class Job:
1518 task_id = None
1619 _last_result = None
1720
18- def __init__ (self , client , task_id ) :
21+ def __init__ (self , client : AnticaptchaClient , task_id : int ) -> None :
1922 self .client = client
2023 self .task_id = task_id
2124
22- def _update (self ):
25+ def _update (self ) -> None :
2326 self ._last_result = self .client .getTaskResult (self .task_id )
2427
25- def check_is_ready (self ):
28+ def check_is_ready (self ) -> bool :
2629 self ._update ()
2730 return self ._last_result ["status" ] == "ready"
2831
29- def get_solution_response (self ): # Recaptcha
32+ def get_solution_response (self ) -> str : # Recaptcha
3033 return self ._last_result ["solution" ]["gRecaptchaResponse" ]
3134
32- def get_solution (self ):
35+ def get_solution (self ) -> dict [ str , Any ] :
3336 return self ._last_result ["solution" ]
3437
35- def get_token_response (self ): # Funcaptcha
38+ def get_token_response (self ) -> str : # Funcaptcha
3639 return self ._last_result ["solution" ]["token" ]
3740
38- def get_answers (self ):
41+ def get_answers (self ) -> dict [ str , str ] :
3942 return self ._last_result ["solution" ]["answers" ]
4043
41- def get_captcha_text (self ): # Image
44+ def get_captcha_text (self ) -> str : # Image
4245 return self ._last_result ["solution" ]["text" ]
4346
44- def get_cells_numbers (self ):
47+ def get_cells_numbers (self ) -> list [ int ] :
4548 return self ._last_result ["solution" ]["cellNumbers" ]
4649
47- def report_incorrect (self ):
50+ def report_incorrect (self ) -> bool :
4851 warnings .warn (
4952 "report_incorrect is deprecated, use report_incorrect_image instead" ,
5053 DeprecationWarning ,
5154 )
5255 return self .client .reportIncorrectImage ()
5356
54- def report_incorrect_image (self ):
57+ def report_incorrect_image (self ) -> bool :
5558 return self .client .reportIncorrectImage (self .task_id )
5659
57- def report_incorrect_recaptcha (self ):
60+ def report_incorrect_recaptcha (self ) -> bool :
5861 return self .client .reportIncorrectRecaptcha (self .task_id )
5962
60- def join (self , maximum_time = None ):
63+ def join (self , maximum_time : int | None = None ) -> None :
6164 elapsed_time = 0
6265 maximum_time = maximum_time or MAXIMUM_JOIN_TIME
6366 while not self .check_is_ready ():
@@ -86,8 +89,8 @@ class AnticaptchaClient:
8689 response_timeout = 5
8790
8891 def __init__ (
89- self , client_key , language_pool = "en" , host = "api.anti-captcha.com" , use_ssl = True
90- ):
92+ self , client_key : str , language_pool : str = "en" , host : str = "api.anti-captcha.com" , use_ssl : bool = True ,
93+ ) -> None :
9194 self .client_key = client_key
9295 self .language_pool = language_pool
9396 self .base_url = "{proto}://{host}/" .format (
@@ -96,14 +99,14 @@ def __init__(
9699 self .session = requests .Session ()
97100
98101 @property
99- def client_ip (self ):
102+ def client_ip (self ) -> str :
100103 if not hasattr (self , "_client_ip" ):
101104 self ._client_ip = self .session .get (
102105 "https://api.myip.com" , timeout = self .response_timeout
103106 ).json ()["ip" ]
104107 return self ._client_ip
105108
106- def _check_response (self , response ) :
109+ def _check_response (self , response : dict [ str , Any ]) -> None :
107110 if response .get ("errorId" , False ) == 11 :
108111 response [
109112 "errorDescription"
@@ -115,7 +118,7 @@ def _check_response(self, response):
115118 response ["errorId" ], response ["errorCode" ], response ["errorDescription" ]
116119 )
117120
118- def createTask (self , task ) :
121+ def createTask (self , task : Any ) -> Job :
119122 request = {
120123 "clientKey" : self .client_key ,
121124 "task" : task .serialize (),
@@ -130,7 +133,7 @@ def createTask(self, task):
130133 self ._check_response (response )
131134 return Job (self , response ["taskId" ])
132135
133- def createTaskSmee (self , task , timeout = MAXIMUM_JOIN_TIME ):
136+ def createTaskSmee (self , task : Any , timeout : int = MAXIMUM_JOIN_TIME ) -> Job :
134137 """
135138 Beta method to stream response from smee.io
136139 """
@@ -172,15 +175,15 @@ def createTaskSmee(self, task, timeout=MAXIMUM_JOIN_TIME):
172175 job ._last_result = payload ["body" ]
173176 return job
174177
175- def getTaskResult (self , task_id ) :
178+ def getTaskResult (self , task_id : int ) -> dict [ str , Any ] :
176179 request = {"clientKey" : self .client_key , "taskId" : task_id }
177180 response = self .session .post (
178181 urljoin (self .base_url , self .TASK_RESULT_URL ), json = request
179182 ).json ()
180183 self ._check_response (response )
181184 return response
182185
183- def getBalance (self ):
186+ def getBalance (self ) -> float :
184187 request = {
185188 "clientKey" : self .client_key ,
186189 "softId" : self .SOFT_ID ,
@@ -191,26 +194,35 @@ def getBalance(self):
191194 self ._check_response (response )
192195 return response ["balance" ]
193196
194- def getAppStats (self , soft_id , mode ) :
197+ def getAppStats (self , soft_id : int , mode : str ) -> dict [ str , Any ] :
195198 request = {"clientKey" : self .client_key , "softId" : soft_id , "mode" : mode }
196199 response = self .session .post (
197200 urljoin (self .base_url , self .APP_STAT_URL ), json = request
198201 ).json ()
199202 self ._check_response (response )
200203 return response
201204
202- def reportIncorrectImage (self , task_id ) :
205+ def reportIncorrectImage (self , task_id : int ) -> bool :
203206 request = {"clientKey" : self .client_key , "taskId" : task_id }
204207 response = self .session .post (
205208 urljoin (self .base_url , self .REPORT_IMAGE_URL ), json = request
206209 ).json ()
207210 self ._check_response (response )
208211 return response .get ("status" , False ) != False
209212
210- def reportIncorrectRecaptcha (self , task_id ) :
213+ def reportIncorrectRecaptcha (self , task_id : int ) -> bool :
211214 request = {"clientKey" : self .client_key , "taskId" : task_id }
212215 response = self .session .post (
213216 urljoin (self .base_url , self .REPORT_RECAPTCHA_URL ), json = request
214217 ).json ()
215218 self ._check_response (response )
216219 return response ["status" ] == "success"
220+
221+ # Snake_case aliases
222+ create_task = createTask
223+ create_task_smee = createTaskSmee
224+ get_task_result = getTaskResult
225+ get_balance = getBalance
226+ get_app_stats = getAppStats
227+ report_incorrect_image = reportIncorrectImage
228+ report_incorrect_recaptcha = reportIncorrectRecaptcha
0 commit comments