capmonstercloudclient 3.0.0__tar.gz → 3.2.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 (51) hide show
  1. {capmonstercloudclient-3.0.0/capmonstercloudclient.egg-info → capmonstercloudclient-3.2.0}/PKG-INFO +1 -1
  2. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/CapMonsterCloudClient.py +6 -2
  3. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/DataDomeCustomTaskRequest.py +0 -4
  4. capmonstercloudclient-3.2.0/capmonstercloud_client/requests/HcaptchaComplexImageTask.py +96 -0
  5. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/ImpervaCustomTaskRequest.py +9 -9
  6. capmonstercloudclient-3.2.0/capmonstercloud_client/requests/MTCaptchaRequest.py +32 -0
  7. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/TurnstileRequest.py +34 -4
  8. capmonstercloudclient-3.2.0/capmonstercloud_client/requests/YidunRequest.py +26 -0
  9. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/__init__.py +3 -0
  10. capmonstercloudclient-3.2.0/capmonstercloud_client/version.txt +1 -0
  11. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0/capmonstercloudclient.egg-info}/PKG-INFO +1 -1
  12. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloudclient.egg-info/SOURCES.txt +2 -0
  13. capmonstercloudclient-3.0.0/capmonstercloud_client/requests/HcaptchaComplexImageTask.py +0 -116
  14. capmonstercloudclient-3.0.0/capmonstercloud_client/version.txt +0 -1
  15. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/LICENSE +0 -0
  16. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/MANIFEST.in +0 -0
  17. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/README.md +0 -0
  18. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/GetResultTimeouts.py +0 -0
  19. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/__init__.py +0 -0
  20. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/captchaResult.py +0 -0
  21. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/clientOptions.py +0 -0
  22. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/exceptions.py +0 -0
  23. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requestController.py +0 -0
  24. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/AmazonWafRequest.py +0 -0
  25. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/BasiliskCustomTaskRequest.py +0 -0
  26. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/BinanceTaskRequest.py +0 -0
  27. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/ComplexImageTaskBase.py +0 -0
  28. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/CustomTaskRequestBase.py +0 -0
  29. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/FuncaptchaComplexImageTask.py +0 -0
  30. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/FuncaptchaRequest.py +0 -0
  31. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/GeetestRequest.py +0 -0
  32. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/HcaptchaRequest.py +0 -0
  33. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/ImageToTextRequest.py +0 -0
  34. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/RecaptchaComplexImageTask.py +0 -0
  35. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/RecaptchaV2EnterpiseRequest.py +0 -0
  36. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/RecaptchaV2Request.py +0 -0
  37. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/RecaptchaV3ProxylessRequest.py +0 -0
  38. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/RecognitionComplexImageTaskRequest.py +0 -0
  39. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/TenDiCustomTaskRequest.py +0 -0
  40. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/baseRequest.py +0 -0
  41. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/baseRequestWithProxy.py +0 -0
  42. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/enums.py +0 -0
  43. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/requests/proxy_info.py +0 -0
  44. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloud_client/utils.py +0 -0
  45. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloudclient.egg-info/dependency_links.txt +0 -0
  46. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloudclient.egg-info/requires.txt +0 -0
  47. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/capmonstercloudclient.egg-info/top_level.txt +0 -0
  48. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/pyproject.toml +0 -0
  49. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/requirements.txt +0 -0
  50. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/setup.cfg +0 -0
  51. {capmonstercloudclient-3.0.0 → capmonstercloudclient-3.2.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: capmonstercloudclient
3
- Version: 3.0.0
3
+ Version: 3.2.0
4
4
  Summary: Official CapMonsterCloud Client: https://capmonster.cloud/
5
5
  Home-page: https://github.com/ZennoLab/capmonstercloud-client-python
6
6
  Author: Andrey Ilyin
@@ -30,7 +30,9 @@ _instance_config = (
30
30
  ((AmazonWafRequest,), getAmazonWafTimeouts),
31
31
  ((BinanceTaskRequest,), getBinanceTimeouts),
32
32
  ((ImpervaCustomTaskRequest,), getImpervaTimeouts),
33
- ((RecognitionComplexImageTaskRequest), getCITTimeouts)
33
+ ((RecognitionComplexImageTaskRequest), getCITTimeouts),
34
+ ((MTCaptchaRequest), getImage2TextTimeouts),
35
+ ((YidunRequest), getImage2TextTimeouts),
34
36
  )
35
37
 
36
38
 
@@ -79,7 +81,9 @@ class CapMonsterClient:
79
81
  BinanceTaskRequest,
80
82
  ImpervaCustomTaskRequest,
81
83
  TurnstileRequest,
82
- RecognitionComplexImageTaskRequest],
84
+ RecognitionComplexImageTaskRequest,
85
+ MTCaptchaRequest,
86
+ YidunRequest],
83
87
  ) -> Dict[str, str]:
84
88
  '''
85
89
  Non-blocking method for captcha solving.
@@ -13,12 +13,8 @@ class DataDomeCustomTaskRequest(CustomTaskRequestBase):
13
13
  if value.get('captchaUrl') and value.get('htmlPageBase64'):
14
14
  raise TypeError(f'Expected only one of [captchaUrl, htmlPageBase64]')
15
15
  elif value.get('captchaUrl'):
16
- if not isinstance(value.get('captchaUrl'), str):
17
- raise TypeError(f'Expect that type imagesUrls array will be <str>, got {type(value.get("captchaUrl"))}')
18
16
  return {i: value[i] for i in value if i != 'htmlPageBase64'}
19
17
  elif value.get('htmlPageBase64'):
20
- if not isinstance(value.get('htmlPageBase64'), str):
21
- raise TypeError(f'Expect that type imagesUrls array will be <str>, got {type(value.get("htmlPageBase64"))}')
22
18
  return {i: value[i] for i in value if i != 'captchaUrl'}
23
19
  else:
24
20
  raise TypeError(f'Expected one of [captchaUrl, htmlPageBase64]')
@@ -0,0 +1,96 @@
1
+ from typing import Dict, Union, List, Optional
2
+ from pydantic import Field, validator
3
+
4
+ from .ComplexImageTaskBase import ComplexImageTaskRequestBase
5
+ from ..exceptions import NumbersImagesErrors, ZeroImagesErrors, TaskNotDefinedError, ExtraParamsError
6
+
7
+ class HcaptchaComplexImageTaskRequest(ComplexImageTaskRequestBase):
8
+
9
+ captchaClass: str = Field(default='hcaptcha')
10
+ metadata : Dict[str, str]
11
+ exampleImageUrls: Optional[List[str]] = None
12
+ exampleImagesBase64: Optional[List[str]] = None
13
+
14
+ @staticmethod
15
+ def _validate_image_array(value, field_name, max_images):
16
+ """Helper method to validate image array"""
17
+ if value is None:
18
+ return value
19
+ if not isinstance(value, (list, tuple)):
20
+ raise TypeError(f'Expect that type {field_name} array will be <list> or <tuple>, got {type(value)}')
21
+
22
+ if not len(value):
23
+ if 'base64' in field_name.lower():
24
+ raise ZeroImagesErrors(f'At least one image base64 expected, got {len(value)}')
25
+ else:
26
+ raise ZeroImagesErrors(f'At least one image url expected, got {len(value)}')
27
+
28
+ if len(value) > max_images:
29
+ raise NumbersImagesErrors(f'Maximum number of images in list {max_images}, got {len(value)}')
30
+
31
+ contain_types = [isinstance(x, str) for x in value]
32
+ if not all(contain_types):
33
+ if 'base64' in field_name.lower():
34
+ raise TypeError(f'Next images from imagesBase64 array are not string: {contain_types}')
35
+ else:
36
+ raise TypeError(f'Next images from imagesUrls array are not string: {contain_types}')
37
+ return value
38
+
39
+ @validator('metadata')
40
+ def validate_metadata(cls, value):
41
+ if value.get('Task') is None:
42
+ raise TaskNotDefinedError('Expect that task will be defined.')
43
+ else:
44
+ return value
45
+
46
+ @validator('exampleImageUrls')
47
+ def validate_example_image_urls(cls, value):
48
+ return cls._validate_image_array(value, 'exampleImageUrls', 1)
49
+
50
+ @validator('exampleImagesBase64')
51
+ def validate_example_images_base64(cls, value):
52
+ return cls._validate_image_array(value, 'exampleImagesBase64', 1)
53
+
54
+ @validator('imagesUrls')
55
+ def validate_images_urls(cls, value):
56
+ return cls._validate_image_array(value, 'imagesUrls', 18)
57
+
58
+ @validator('imagesBase64')
59
+ def validate_images_base64(cls, value):
60
+ return cls._validate_image_array(value, 'imagesBase64', 18)
61
+
62
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
63
+
64
+ task = {}
65
+ task['type'] = self.taskType
66
+ task['class'] = self.captchaClass
67
+
68
+ # fill with images
69
+ if self.imagesBase64 is None and self.imagesUrls is None:
70
+ raise ZeroImagesErrors('Expect at least one of array(imageBase64 or imageUrls) to contain images.')
71
+
72
+ if self.imagesUrls is not None:
73
+ task['imageUrls'] = self.imagesUrls
74
+
75
+ if self.imagesBase64 is not None:
76
+ task['imagesBase64'] = self.imagesBase64
77
+
78
+ task['metadata'] = self.metadata
79
+
80
+ if self.exampleImageUrls and self.exampleImagesBase64:
81
+ raise ExtraParamsError('Expect only one of [exampleImageUrls, exampleImagesBase64]')
82
+
83
+ if self.exampleImageUrls is not None:
84
+ task['exampleImageUrls'] = self.exampleImageUrls
85
+
86
+ if self.exampleImagesBase64 is not None:
87
+ task['exampleImagesBase64'] = self.exampleImagesBase64
88
+
89
+ if self.userAgent is not None:
90
+ task['userAgent'] = self.userAgent
91
+
92
+ if self.websiteUrl is not None:
93
+ task['websiteUrl'] = self.websiteUrl
94
+
95
+ return task
96
+
@@ -9,17 +9,17 @@ class ImpervaCustomTaskRequest(CustomTaskRequestBase):
9
9
 
10
10
  @validator('metadata')
11
11
  def validate_metadata(cls, value):
12
- if value.get('incapsulaScriptBase64') is None:
13
- raise TypeError(f'Expect that incapsulaScriptBase64 will be defined.')
12
+ if value.get('incapsulaScriptUrl') is None:
13
+ raise TypeError(f'Expect that incapsulaScriptUrl will be defined.')
14
14
  else:
15
- if not isinstance(value.get('incapsulaScriptBase64'), str):
16
- raise TypeError(f'Expect that incapsulaScriptBase64 will be str.')
17
- if value.get('incapsulaSessionCookie') is None:
18
- raise TypeError(f'Expect that incapsulaSessionCookie will be defined.')
15
+ if not isinstance(value.get('incapsulaScriptUrl'), str):
16
+ raise TypeError(f'Expect that incapsulaScriptUrl will be str.')
17
+ if value.get('incapsulaCookie') is None:
18
+ raise TypeError(f'Expect that incapsulaCookie will be defined.')
19
19
  else:
20
- if not isinstance(value.get('incapsulaSessionCookie'), str):
21
- raise TypeError(f'Expect that incapsulaSessionCookie will be str.')
22
- if value.get('reese84UrlEndpoint') is not None and not isinstance(value.get('incapsulaSessionCookie'), str):
20
+ if not isinstance(value.get('incapsulaCookie'), str):
21
+ raise TypeError(f'Expect that incapsulaCookie will be str.')
22
+ if value.get('reese84UrlEndpoint') is not None and not isinstance(value.get('reese84UrlEndpoint'), str):
23
23
  raise TypeError(f'Expect that reese84UrlEndpoint will be str.')
24
24
  return value
25
25
 
@@ -0,0 +1,32 @@
1
+ from typing import Dict, Optional, Union
2
+ from pydantic import Field
3
+ from .baseRequestWithProxy import BaseRequestWithProxy
4
+
5
+
6
+ class MTCaptchaRequest(BaseRequestWithProxy):
7
+ type: str = Field(default="MTCaptchaTask")
8
+ websiteUrl: str
9
+ websiteKey: str
10
+ pageAction: Optional[str] = Field(default=None)
11
+ isInvisible: Optional[bool] = Field(default=None)
12
+ userAgent: Optional[str] = Field(default=None)
13
+
14
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
15
+ task = {}
16
+ task["type"] = self.type
17
+ task["websiteURL"] = self.websiteUrl
18
+ task["websiteKey"] = self.websiteKey
19
+ if self.pageAction is not None:
20
+ task["pageAction"] = self.pageAction
21
+ if self.isInvisible is not None:
22
+ task["isInvisible"] = self.isInvisible
23
+ if self.userAgent is not None:
24
+ task["userAgent"] = self.userAgent
25
+ if self.proxy:
26
+ task["proxyType"] = self.proxy.proxyType
27
+ task["proxyAddress"] = self.proxy.proxyAddress
28
+ task["proxyPort"] = self.proxy.proxyPort
29
+ task["proxyLogin"] = self.proxy.proxyLogin
30
+ task["proxyPassword"] = self.proxy.proxyPassword
31
+
32
+ return task
@@ -1,4 +1,4 @@
1
- from typing import Dict, Optional
1
+ from typing import Dict, Optional, Union
2
2
  from pydantic import Field, validator, model_validator
3
3
  from .baseRequestWithProxy import BaseRequestWithProxy
4
4
 
@@ -32,6 +32,11 @@ class TurnstileRequest(BaseRequestWithProxy):
32
32
  raise RuntimeError(f'Expect that "htmlPageBase64" will be filled ' \
33
33
  f'when cloudflareTaskType is "cf_clearance"')
34
34
 
35
+ if self.get('proxy') is None:
36
+ if self.get('cloudflareTaskType') == 'cf_clearance':
37
+ raise RuntimeError(f'You are working using queries, and you need cf_clearance cookies ' \
38
+ f'it is required that you need your proxies.')
39
+
35
40
  if self.get('cloudflareTaskType') == 'token':
36
41
  for field in ['pageAction', 'pageData', 'data']:
37
42
  if self.get(field) is None:
@@ -43,9 +48,34 @@ class TurnstileRequest(BaseRequestWithProxy):
43
48
  if self.get('userAgent') is None:
44
49
  raise RuntimeError(f'Expect that userAgent will be filled ' \
45
50
  f'when cloudflareTaskType specified.')
46
-
51
+
47
52
  return self
48
53
 
49
- def getTaskDict(self) -> Dict[str, str]:
50
- return {k: v for k, v in self.model_dump().items() if v is not None}
54
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
55
+ task = {}
56
+ task['type'] = self.type
57
+ task['websiteURL'] = self.websiteURL
58
+ task['websiteKey'] = self.websiteKey
59
+ if self.pageAction is not None:
60
+ task['pageAction'] = self.pageAction
61
+ if self.data is not None:
62
+ task['data'] = self.data
63
+ if self.pageData is not None:
64
+ task['pageData'] = self.pageData
65
+ if self.userAgent is not None:
66
+ task['userAgent'] = self.userAgent
67
+ if self.cloudflareTaskType is not None:
68
+ task['cloudflareTaskType'] = self.cloudflareTaskType
69
+ if self.htmlPageBase64 is not None:
70
+ task['htmlPageBase64'] = self.htmlPageBase64
71
+ if self.apiJsUrl is not None:
72
+ task['apiJsUrl'] = self.apiJsUrl
73
+ if self.proxy:
74
+ task['proxyType'] = self.proxy.proxyType
75
+ task['proxyAddress'] = self.proxy.proxyAddress
76
+ task['proxyPort'] = self.proxy.proxyPort
77
+ task['proxyLogin'] = self.proxy.proxyLogin
78
+ task['proxyPassword'] = self.proxy.proxyPassword
79
+
80
+ return task
51
81
 
@@ -0,0 +1,26 @@
1
+ from typing import Dict, Optional, Union
2
+ from pydantic import Field
3
+ from .baseRequestWithProxy import BaseRequestWithProxy
4
+
5
+
6
+ class YidunRequest(BaseRequestWithProxy):
7
+ type: str = Field(default="YidunTask")
8
+ websiteUrl: str
9
+ websiteKey: str
10
+ userAgent: Optional[str] = Field(default=None)
11
+
12
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
13
+ task = {}
14
+ task["type"] = self.type
15
+ task["websiteURL"] = self.websiteUrl
16
+ task["websiteKey"] = self.websiteKey
17
+ if self.userAgent is not None:
18
+ task["userAgent"] = self.userAgent
19
+ if self.proxy:
20
+ task["proxyType"] = self.proxy.proxyType
21
+ task["proxyAddress"] = self.proxy.proxyAddress
22
+ task["proxyPort"] = self.proxy.proxyPort
23
+ task["proxyLogin"] = self.proxy.proxyLogin
24
+ task["proxyPassword"] = self.proxy.proxyPassword
25
+
26
+ return task
@@ -18,6 +18,9 @@ from .AmazonWafRequest import AmazonWafRequest
18
18
  from .BinanceTaskRequest import BinanceTaskRequest
19
19
  from .ImpervaCustomTaskRequest import ImpervaCustomTaskRequest
20
20
  from .RecognitionComplexImageTaskRequest import RecognitionComplexImageTaskRequest
21
+ from .MTCaptchaRequest import MTCaptchaRequest
22
+ from .YidunRequest import YidunRequest
23
+ from .proxy_info import ProxyInfo
21
24
 
22
25
 
23
26
  REQUESTS = ['RecaptchaV2EnterpiseRequest', 'RecaptchaV2Request', 'RecaptchaV3ProxylessRequest', 'RecaptchaComplexImageTaskRequest'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: capmonstercloudclient
3
- Version: 3.0.0
3
+ Version: 3.2.0
4
4
  Summary: Official CapMonsterCloud Client: https://capmonster.cloud/
5
5
  Home-page: https://github.com/ZennoLab/capmonstercloud-client-python
6
6
  Author: Andrey Ilyin
@@ -26,6 +26,7 @@ capmonstercloud_client/requests/HcaptchaComplexImageTask.py
26
26
  capmonstercloud_client/requests/HcaptchaRequest.py
27
27
  capmonstercloud_client/requests/ImageToTextRequest.py
28
28
  capmonstercloud_client/requests/ImpervaCustomTaskRequest.py
29
+ capmonstercloud_client/requests/MTCaptchaRequest.py
29
30
  capmonstercloud_client/requests/RecaptchaComplexImageTask.py
30
31
  capmonstercloud_client/requests/RecaptchaV2EnterpiseRequest.py
31
32
  capmonstercloud_client/requests/RecaptchaV2Request.py
@@ -33,6 +34,7 @@ capmonstercloud_client/requests/RecaptchaV3ProxylessRequest.py
33
34
  capmonstercloud_client/requests/RecognitionComplexImageTaskRequest.py
34
35
  capmonstercloud_client/requests/TenDiCustomTaskRequest.py
35
36
  capmonstercloud_client/requests/TurnstileRequest.py
37
+ capmonstercloud_client/requests/YidunRequest.py
36
38
  capmonstercloud_client/requests/__init__.py
37
39
  capmonstercloud_client/requests/baseRequest.py
38
40
  capmonstercloud_client/requests/baseRequestWithProxy.py
@@ -1,116 +0,0 @@
1
- from typing import Dict, Union, List, Optional
2
- from pydantic import Field, validator
3
-
4
- from .ComplexImageTaskBase import ComplexImageTaskRequestBase
5
- from ..exceptions import NumbersImagesErrors, ZeroImagesErrors, TaskNotDefinedError, ExtraParamsError
6
-
7
- class HcaptchaComplexImageTaskRequest(ComplexImageTaskRequestBase):
8
-
9
- captchaClass: str = Field(default='hcaptcha')
10
- metadata : Dict[str, str]
11
- exampleImageUrls: Optional[List[str]] = None
12
- exampleImagesBase64: Optional[List[str]] = None
13
-
14
- @validator('metadata')
15
- def validate_metadata(cls, value):
16
- if value.get('Task') is None:
17
- raise TaskNotDefinedError(f'Expect that task will be defined.')
18
- else:
19
- return value
20
-
21
- @validator('exampleImageUrls')
22
- def validate_urls_array(cls, value):
23
- if value is not None:
24
- if not isinstance(value, (list, tuple)):
25
- raise TypeError(f'Expect that type exampleImageUrls array will be <list> or <tuple>, got {type(value)}')
26
- elif len(value) > 1:
27
- raise NumbersImagesErrors(f'Maximum number of images in list 1, got {len(value)}')
28
- elif not len(value):
29
- raise ZeroImagesErrors(f'At least one image url expected, got {len(value)}')
30
- # Check for each element type
31
- contain_types = [isinstance(x, str) for x in value]
32
- if not all(contain_types):
33
- raise TypeError(f'Next images from imagesUrls array are not string: {contain_types}')
34
- return value
35
-
36
- @validator('exampleImagesBase64')
37
- def validate_urls_array(cls, value):
38
- if value is not None:
39
- if not isinstance(value, (list, tuple)):
40
- raise TypeError(f'Expect that type exampleImagesBase64 array will be <list> or <tuple>, got {type(value)}')
41
- elif len(value) > 1:
42
- raise NumbersImagesErrors(f'Maximum number of images in list 1, got {len(value)}')
43
- elif not len(value):
44
- raise ZeroImagesErrors(f'At least one image base64 expected, got {len(value)}')
45
- # Check for each element type
46
- contain_types = [isinstance(x, str) for x in value]
47
- if not all(contain_types):
48
- raise TypeError(f'Next images from imagesBase64 array are not string: {contain_types}')
49
- return value
50
-
51
- @validator('imagesUrls')
52
- def validate_urls_array(cls, value):
53
- if value is not None:
54
- if not isinstance(value, (list, tuple)):
55
- raise TypeError(f'Expect that type imagesUrls array will be <list> or <tuple>, got {type(value)}')
56
- elif len(value) > 18:
57
- raise NumbersImagesErrors(f'Maximum number of images in list 18, got {len(value)}')
58
- elif not len(value):
59
- raise ZeroImagesErrors(f'At least one image url expected, got {len(value)}')
60
- # Check for each element type
61
- contain_types = [isinstance(x, str) for x in value]
62
- if not all(contain_types):
63
- raise TypeError(f'Next images from imagesUrls array are not string: {contain_types}')
64
- return value
65
-
66
- @validator('imagesBase64')
67
- def validate_images_array(cls, value):
68
- if value is not None:
69
- if not isinstance(value, (list, tuple)):
70
- raise TypeError(f'Expect that type imagesBase64 array will be <list> or <tuple>, got {type(value)}')
71
- elif len(value) > 18:
72
- raise NumbersImagesErrors(f'Maximum number of images in list 18, got {len(value)}')
73
- elif not len(value):
74
- raise ZeroImagesErrors(f'At least one image base64 expected, got {len(value)}')
75
- # Check for each element type
76
- contain_types = [isinstance(x, str) for x in value]
77
- if not all(contain_types):
78
- raise TypeError(f'Next images from imagesBase64 array are not string: {contain_types}')
79
- return value
80
-
81
- def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
82
-
83
- task = {}
84
- task['type'] = self.taskType
85
- task['class'] = self.captchaClass
86
-
87
- # fill with images
88
- if self.imagesBase64 is None and self.imagesUrls is None:
89
- raise ZeroImagesErrors(f'Expect at least one of array(imageBase64 or imageUrls) to contain images.')
90
-
91
- if self.imagesUrls is not None:
92
- task['imageUrls'] = self.imagesUrls
93
-
94
- if self.imagesBase64 is not None:
95
- task['imagesBase64'] = self.imagesBase64
96
-
97
- task['metadata'] = self.metadata
98
-
99
- if self.exampleImageUrls and self.exampleImagesBase64:
100
- raise ExtraParamsError('Expect only one of [exampleImageUrls, exampleImagesBase64]')
101
-
102
- if self.exampleImageUrls is not None:
103
- task['exampleImageUrls'] = self.exampleImageUrls
104
-
105
- if self.exampleImagesBase64 is not None:
106
- task['exampleImagesBase64'] = self.exampleImagesBase64
107
-
108
- if self.userAgent is not None:
109
- task['userAgent'] = self.userAgent
110
-
111
- if self.websiteUrl is not None:
112
- task['websiteUrl'] = self.websiteUrl
113
-
114
- return task
115
-
116
-