From c882c85d2be2b97d69bfa629c1aae6c7a3e061be Mon Sep 17 00:00:00 2001 From: Chisa Yomoda Date: Sat, 23 May 2020 11:19:45 +0300 Subject: [PATCH] some unfinished shit --- example.py | 27 -- examples/get_cheapest_price.py | 18 ++ requirements.txt | 1 + smspva_wrapper/__init__.py | 3 - smspva_wrapper/async/#TODO | 1 + smspva_wrapper/async/__init__.py | 0 smspva_wrapper/caller/__init__.py | 1 - smspva_wrapper/caller/caller.py | 52 ---- smspva_wrapper/errors/__init__.py | 1 + smspva_wrapper/errors/errors.py | 8 +- smspva_wrapper/methods/__init__.py | 14 - smspva_wrapper/methods/balance_sim.py | 40 --- smspva_wrapper/methods/ban.py | 41 --- smspva_wrapper/methods/denial.py | 42 --- smspva_wrapper/methods/get_2fa.py | 36 --- smspva_wrapper/methods/get_balance.py | 38 --- smspva_wrapper/methods/get_clearsms.py | 41 --- smspva_wrapper/methods/get_count_new.py | 37 --- smspva_wrapper/methods/get_number.py | 40 --- smspva_wrapper/methods/get_proverka.py | 57 ---- smspva_wrapper/methods/get_service_price.py | 37 --- smspva_wrapper/methods/get_sms.py | 55 ---- smspva_wrapper/methods/get_userinfo.py | 38 --- smspva_wrapper/methods/redirect.py | 48 --- smspva_wrapper/sync/__init__.py | 0 smspva_wrapper/sync/caller/__init__.py | 1 + smspva_wrapper/sync/caller/caller.py | 60 ++++ smspva_wrapper/sync/client/__init__.py | 0 smspva_wrapper/{ => sync/client}/client.py | 294 +++++++++--------- .../sync/client/methods/__init__.py | 0 .../sync/client/methods/calls/__init__.py | 0 .../sync/client/methods/calls/balance_sim.py | 9 + .../sync/client/methods/raw_api/__init__.py | 31 ++ .../methods/raw_api}/helpers/__init__.py | 4 +- .../methods/raw_api}/helpers/check_errors.py | 80 ++--- .../methods/raw_api}/helpers/responce_hack.py | 26 +- .../client/methods/raw_api/raw_balance_sim.py | 41 +++ .../sync/client/methods/raw_api/raw_ban.py | 42 +++ .../sync/client/methods/raw_api/raw_denial.py | 43 +++ .../client/methods/raw_api/raw_get_2fa.py | 37 +++ .../client/methods/raw_api/raw_get_balance.py | 39 +++ .../methods/raw_api/raw_get_clearsms.py | 42 +++ .../methods/raw_api/raw_get_count_new.py | 38 +++ .../client/methods/raw_api/raw_get_number.py | 41 +++ .../methods/raw_api/raw_get_proverka.py | 58 ++++ .../methods/raw_api/raw_get_service_price.py | 38 +++ .../client/methods/raw_api/raw_get_sms.py | 56 ++++ .../methods/raw_api/raw_get_userinfo.py | 39 +++ .../client/methods/raw_api/raw_redirect.py | 49 +++ smspva_wrapper/sync/ext/__init__.py | 1 + smspva_wrapper/sync/ext/base.py | 25 ++ smspva_wrapper/types/__init__.py | 2 - smspva_wrapper/types/backends.py | 3 - smspva_wrapper/types/containers/__init__.py | 45 ++- .../types/containers/balance_object.py | 2 +- .../types/containers/balance_sim_object.py | 2 +- smspva_wrapper/types/containers/ban_object.py | 2 +- .../types/containers/clearsms_object.py | 2 +- .../types/containers/count_new_object.py | 6 +- .../types/containers/denial_object.py | 2 +- .../types/containers/number_object.py | 2 +- .../types/containers/proverka_object.py | 2 +- .../types/containers/redirect_object.py | 2 +- .../types/containers/service_price_object.py | 6 +- smspva_wrapper/types/containers/sms_object.py | 2 +- .../types/containers/two_fa_object.py | 2 +- .../types/containers/userinfo_object.py | 2 +- 67 files changed, 972 insertions(+), 882 deletions(-) delete mode 100644 example.py create mode 100644 examples/get_cheapest_price.py create mode 100644 requirements.txt create mode 100644 smspva_wrapper/async/#TODO create mode 100644 smspva_wrapper/async/__init__.py delete mode 100644 smspva_wrapper/caller/__init__.py delete mode 100644 smspva_wrapper/caller/caller.py delete mode 100644 smspva_wrapper/methods/__init__.py delete mode 100644 smspva_wrapper/methods/balance_sim.py delete mode 100644 smspva_wrapper/methods/ban.py delete mode 100644 smspva_wrapper/methods/denial.py delete mode 100644 smspva_wrapper/methods/get_2fa.py delete mode 100644 smspva_wrapper/methods/get_balance.py delete mode 100644 smspva_wrapper/methods/get_clearsms.py delete mode 100644 smspva_wrapper/methods/get_count_new.py delete mode 100644 smspva_wrapper/methods/get_number.py delete mode 100644 smspva_wrapper/methods/get_proverka.py delete mode 100644 smspva_wrapper/methods/get_service_price.py delete mode 100644 smspva_wrapper/methods/get_sms.py delete mode 100644 smspva_wrapper/methods/get_userinfo.py delete mode 100644 smspva_wrapper/methods/redirect.py create mode 100644 smspva_wrapper/sync/__init__.py create mode 100644 smspva_wrapper/sync/caller/__init__.py create mode 100644 smspva_wrapper/sync/caller/caller.py create mode 100644 smspva_wrapper/sync/client/__init__.py rename smspva_wrapper/{ => sync/client}/client.py (88%) create mode 100644 smspva_wrapper/sync/client/methods/__init__.py create mode 100644 smspva_wrapper/sync/client/methods/calls/__init__.py create mode 100644 smspva_wrapper/sync/client/methods/calls/balance_sim.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/__init__.py rename smspva_wrapper/{methods => sync/client/methods/raw_api}/helpers/__init__.py (97%) rename smspva_wrapper/{methods => sync/client/methods/raw_api}/helpers/check_errors.py (96%) rename smspva_wrapper/{methods => sync/client/methods/raw_api}/helpers/responce_hack.py (95%) create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_balance_sim.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_ban.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_denial.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_2fa.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_balance.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_clearsms.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_count_new.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_number.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_proverka.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_service_price.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_sms.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_get_userinfo.py create mode 100644 smspva_wrapper/sync/client/methods/raw_api/raw_redirect.py create mode 100644 smspva_wrapper/sync/ext/__init__.py create mode 100644 smspva_wrapper/sync/ext/base.py delete mode 100644 smspva_wrapper/types/backends.py diff --git a/example.py b/example.py deleted file mode 100644 index f1eb3f2..0000000 --- a/example.py +++ /dev/null @@ -1,27 +0,0 @@ -from smspva_wrapper import Client, Backends, Services, Countries -from smspva_wrapper.types import country_dict, service_dict - -SIMSMS_API_KEY = '' -SMSPVA_API_KEY = '' - -c = Client(api_key=SMSPVA_API_KEY, backend=Backends.SMSPVA) - - -def cheapest_price_finder(): - prices = [] - for country in country_dict: - a = c.get_service_price(Services.TELEGRAM, country) - item = (a.price, a.country) - prices.append(item) - - prices.sort() - for item in prices: - print(f"{item[1]}: {item[0]}") - - -if '__main__' == __name__: - print(c.name) - print(c.balance) - print(c.karma) - print(c.name) - cheapest_price_finder() diff --git a/examples/get_cheapest_price.py b/examples/get_cheapest_price.py new file mode 100644 index 0000000..82c2898 --- /dev/null +++ b/examples/get_cheapest_price.py @@ -0,0 +1,18 @@ +from smspva_wrapper import Client, Services +from smspva_wrapper.types import country_dict + +SIMSMS_API_KEY = '' # SIMSMS KEY + +c = Client(api_key=SIMSMS_API_KEY) + + +prices = [] +for country in country_dict: + a = c.get_service_price(Services.TELEGRAM, country) + item = (a.price, a.country) + prices.append(item) + +prices.sort() + +for item in prices: + print(f"{item[1]}: {item[0]}") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f229360 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +requests diff --git a/smspva_wrapper/__init__.py b/smspva_wrapper/__init__.py index e9327e4..e69de29 100644 --- a/smspva_wrapper/__init__.py +++ b/smspva_wrapper/__init__.py @@ -1,3 +0,0 @@ -from smspva_wrapper.client import Client -from smspva_wrapper.errors import Errors -from smspva_wrapper.types import Countries, Services, Backends, Operators diff --git a/smspva_wrapper/async/#TODO b/smspva_wrapper/async/#TODO new file mode 100644 index 0000000..4e40578 --- /dev/null +++ b/smspva_wrapper/async/#TODO @@ -0,0 +1 @@ +TODO: ASYNC WRAPPER diff --git a/smspva_wrapper/async/__init__.py b/smspva_wrapper/async/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smspva_wrapper/caller/__init__.py b/smspva_wrapper/caller/__init__.py deleted file mode 100644 index 38f4f77..0000000 --- a/smspva_wrapper/caller/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .caller import caller as caller diff --git a/smspva_wrapper/caller/caller.py b/smspva_wrapper/caller/caller.py deleted file mode 100644 index f55343b..0000000 --- a/smspva_wrapper/caller/caller.py +++ /dev/null @@ -1,52 +0,0 @@ -import requests -from smspva_wrapper.errors import Errors - - -def caller(query: str) -> dict: - """Low-level function for calling API - - Args: - query (str): API link to request - - Returns: - json_dict (dict): containing dictionary of parsed json from API - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - APIGeneralError - NetworkingError - UnknownAPIError - """ - r = requests.get(query) - print("Called API") - - if r.status_code == 200: - try: - json_dict: dict = r.json() - return json_dict - except ValueError: - error = r.content.decode() - if 'API KEY не получен!' == error: - raise Errors.InvalidAPIKeyError(error) - elif 'API KEY не найден!' == error: - raise Errors.InvalidAPIKeyError(error) - elif 'API KEY not received!' == error: - raise Errors.InvalidAPIKeyError(error) - elif 'Недостаточно средств!' == error: - raise Errors.InsufficientFundsError(error) - elif 'Превышено количество попыток!' == error: - raise Errors.TooShortIntervalError(error) - elif 'Произошла неизвестная ошибка.' == error: - raise Errors.RepeatRequestLaterError(error) - elif 'Неверный запрос.' == error: - raise Errors.RequestSyntaxError(error) - elif 'Произошла внутренняя ошибка сервера.' == error: - raise Errors.RepeatRequestLaterError(error) - else: - raise Errors.UnknownAPIError(error) - else: - raise Errors.NetworkingError("status code: ", r.status_code) diff --git a/smspva_wrapper/errors/__init__.py b/smspva_wrapper/errors/__init__.py index d83d8c5..3d7ea78 100644 --- a/smspva_wrapper/errors/__init__.py +++ b/smspva_wrapper/errors/__init__.py @@ -23,3 +23,4 @@ class Errors: from .errors import ProverkaNumberError from .errors import RedirectFailError from .errors import RedirectInvalidNumberFormat + from .errors import UnrecognizableBackEndError diff --git a/smspva_wrapper/errors/errors.py b/smspva_wrapper/errors/errors.py index 00228d0..8c7d1d9 100644 --- a/smspva_wrapper/errors/errors.py +++ b/smspva_wrapper/errors/errors.py @@ -2,6 +2,10 @@ class GeneralError(Exception): """Base class for exceptions in this module.""" +class UnrecognizableBackEndError(GeneralError): + """Unrecognizable backend""" + + class NetworkingError(GeneralError): """Networking Error""" @@ -61,7 +65,7 @@ class NumberAlreadyTakenError(APIError): # ban class BanError(APIError): - """Ban request has failed""" + """RawBan request has failed""" # get_sms @@ -71,7 +75,7 @@ class GetSMSError(APIError): # denial class DenialFailedError(APIError): - """Denial request has failed""" + """RawDenial request has failed""" # clearsms diff --git a/smspva_wrapper/methods/__init__.py b/smspva_wrapper/methods/__init__.py deleted file mode 100644 index 759b4b2..0000000 --- a/smspva_wrapper/methods/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -class Methods: - from .balance_sim import balance_sim - from .ban import ban - from .denial import denial - from .get_2fa import get_2fa - from .get_balance import get_balance - from .get_clearsms import get_clearsms - from .get_count_new import get_count_new - from .get_number import get_number - from .get_proverka import get_proverka - from .get_service_price import get_service_price - from .get_sms import get_sms - from .get_userinfo import get_userinfo - from .redirect import redirect diff --git a/smspva_wrapper/methods/balance_sim.py b/smspva_wrapper/methods/balance_sim.py deleted file mode 100644 index c4034f1..0000000 --- a/smspva_wrapper/methods/balance_sim.py +++ /dev/null @@ -1,40 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def balance_sim(api_base: str, service: str, _id: str) -> dict: - """Low level function to receive SIM card balance for avito+forwarding service. - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt59" - _id (str): "25623" - - Returns: - dict: provides an API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - BalanceSIMError - """ - - q = f"{api_base}&metod=balance_sim&service={service}&id={_id}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == '2': - raise Errors.BalanceSIMError(c['amount'], c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/ban.py b/smspva_wrapper/methods/ban.py deleted file mode 100644 index b59ce8d..0000000 --- a/smspva_wrapper/methods/ban.py +++ /dev/null @@ -1,41 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def ban(api_base: str, service: str, _id: str) -> dict: - """Low level function to report to the server that the number is already used - In this method id parameter is indicated from the response to request for phone number get_number - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - _id (str): "25623" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - BanFailedError - """ - - q = f"{api_base}&metod=ban&service={service}&id={_id}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == '2': - raise Errors.BanError(c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/denial.py b/smspva_wrapper/methods/denial.py deleted file mode 100644 index 98d0316..0000000 --- a/smspva_wrapper/methods/denial.py +++ /dev/null @@ -1,42 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def denial(api_base: str, service: str, country: str, _id: str) -> dict: - """Low level function to cancel the order to number you got - In this method id parameter is indicated from the response to request for phone number get_number - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - country (str): "ru" - _id (str): "25623" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - DenialFailedError - """ - - q = f"{api_base}&metod=denial&service={service}&country={country}&id={_id}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == '2': - raise Errors.DenialFailedError(c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_2fa.py b/smspva_wrapper/methods/get_2fa.py deleted file mode 100644 index 8246f01..0000000 --- a/smspva_wrapper/methods/get_2fa.py +++ /dev/null @@ -1,36 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_2fa(api_base: str, secret: str) -> dict: - """Low level function for obtaining 2FA authorization code from Google, Microsoft, etc. by secret key - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - secret (str): "1234567890" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - """ - - q = f"{api_base}&metod=get_2fa&secret={secret}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_balance.py b/smspva_wrapper/methods/get_balance.py deleted file mode 100644 index 603f165..0000000 --- a/smspva_wrapper/methods/get_balance.py +++ /dev/null @@ -1,38 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_balance(api_base: str) -> dict: - """Low level function that returns balance of the account - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - UserInfoError - """ - - q = f"{api_base}&metod=get_balance" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == 'error': - raise Errors.UserInfoError(c['error_msg'], c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_clearsms.py b/smspva_wrapper/methods/get_clearsms.py deleted file mode 100644 index c43c8b7..0000000 --- a/smspva_wrapper/methods/get_clearsms.py +++ /dev/null @@ -1,41 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_clearsms(api_base: str, service: str, _id: str) -> dict: - """SIMSMS ONLY! Low level function to check the number to receive several SMS consecutively within one order - In this method, the parameter id indicates the order number within which you need to receive another text. - - Args: - api_base (str): "http://simsms.org/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - _id (str): "25623" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - ClearSMSError - """ - - q = f"{api_base}&metod=get_clearsms&service={service}&id={_id}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == '2': - raise Errors.ClearSMSError(c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_count_new.py b/smspva_wrapper/methods/get_count_new.py deleted file mode 100644 index 5858695..0000000 --- a/smspva_wrapper/methods/get_count_new.py +++ /dev/null @@ -1,37 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_count_new(api_base: str, service: str, country: str) -> dict: - """Low level function to request for the amount of free activations for a certain service - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - country (str): "ru" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - """ - - q = f"{api_base}&metod=get_count_new&service={service}&country={country}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_number.py b/smspva_wrapper/methods/get_number.py deleted file mode 100644 index bae3310..0000000 --- a/smspva_wrapper/methods/get_number.py +++ /dev/null @@ -1,40 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_number(api_base: str, service: str, country: str) -> dict: - """Low level function to receive a phone number for a certain service. - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - country (str): "ru" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - NumberAlreadyTakenError - """ - - q = f"{api_base}&metod=get_number&service={service}&country={country}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == '2': - raise Errors.NumberAlreadyTakenError(c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_proverka.py b/smspva_wrapper/methods/get_proverka.py deleted file mode 100644 index 29a22af..0000000 --- a/smspva_wrapper/methods/get_proverka.py +++ /dev/null @@ -1,57 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_proverka(api_base: str, service: str, number: str) -> dict: - """Low level function for checking the numbers for multiple SMS - In this method, number parameter specifies the number that you want to check. - - Note: - Following the successful check of a number, send a request for getting the number - get_number ALSO with number parameter.\ - To check SMS send a request for SMS get_sms according to conditions - - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - number (str): "9685156912" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - ProverkaGSMModuleBusyError - ProverkaNoOrderForNumberForServiceError - ProverkaNoSuchNumberError - """ - - q = f"{api_base}&metod=get_proverka&service={service}&id={number}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - else: - e_msg = c['error_msg'] - if e_msg == 'Number shall consist of 10 digits!': - raise Errors.ProverkaNumberForServiceError(c) - elif e_msg == 'Such a number you did not order for the service': - raise Errors.ProverkaNumberForServiceError(c) - elif e_msg == 'The modem is busy, try to order in 5 minutes': - raise Errors.ProverkaGSMBusyError(c) - elif 'not_number' in c: - if c['not_number'] == 'This number is no longer in the system': - raise Errors.ProverkaNumberError(c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_service_price.py b/smspva_wrapper/methods/get_service_price.py deleted file mode 100644 index 0b36719..0000000 --- a/smspva_wrapper/methods/get_service_price.py +++ /dev/null @@ -1,37 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_service_price(api_base: str, service: str, country: str) -> dict: - """Low level function to request current price sms for country and service - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - country (str): "ru" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - """ - - q = f"{api_base}&metod=get_service_price&service={service}&country={country}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_sms.py b/smspva_wrapper/methods/get_sms.py deleted file mode 100644 index 120cc5f..0000000 --- a/smspva_wrapper/methods/get_sms.py +++ /dev/null @@ -1,55 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_sms(api_base: str, service: str, country: str, _id: str, sms: bool = False) -> dict: - """Low level function for receiving a SMS for a certain service - In this method id parameter is indicated from the response to request for phone number get_number - - Note: - If you get the response that a code from SMS hasn't been found yet, send request get_sms once again 20 seconds later.\ - Note, the server searches for SMS for 10 minutes. You need to send your request within 10 minutes each 20 seconds per one request.\ - That said, you receive a code from SMS or error message. - If you want to get re-SMS without closing the order (Code Refinement), then set sms parameter to True \ - In this case, your order can not be closed and you may receive a re-SMS. Re-chargeable SMS. The cost is the cost of an ordinary SMS for this service. - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt4" - country (str): "ru" - _id (str): "25623" - sms (bool): False - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - GetSMSError - """ - - q = f"{api_base}&metod=get_sms&service={service}&country={country}&id={_id}" - if sms: - q = f"{q}&sms=sms" - - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == '2': - return c - elif c['response'] == '3': - raise Errors.GetSMSError(c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/get_userinfo.py b/smspva_wrapper/methods/get_userinfo.py deleted file mode 100644 index fdfd9ea..0000000 --- a/smspva_wrapper/methods/get_userinfo.py +++ /dev/null @@ -1,38 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def get_userinfo(api_base: str) -> dict: - """Low level function to request user's balance and karma - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - UserInfoError - """ - - q = f"{api_base}&metod=get_userinfo" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == 'error': - raise Errors.UserInfoError(c['error_msg'], c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/methods/redirect.py b/smspva_wrapper/methods/redirect.py deleted file mode 100644 index 910ffce..0000000 --- a/smspva_wrapper/methods/redirect.py +++ /dev/null @@ -1,48 +0,0 @@ -from smspva_wrapper.caller import caller -from smspva_wrapper.methods.helpers import responce_hack, check_errors -from smspva_wrapper.errors import Errors - - -def redirect(api_base: str, service: str, _id: str, number_redirect: str) -> dict: - """Low level function for number forwarding - This method works only for avito+forwarding service. - - Note: - Indicate the number for forwarding in the parameter number_redirect! - - Args: - api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" - service (str): "opt59" - _id (str): "25623" - number_redirect (str): "9869788422" - - Returns: - dict: API call dictionary - - Raises: - InvalidAPIKeyError - InsufficientFundsError - TooShortIntervalError - RepeatRequestLaterError - RequestSyntaxError - UnknownAPIError - NetworkingError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - RedirectInvalidNumberFormat - RedirectFailError - """ - - q = f"{api_base}&service={service}&id={_id}&number_redirect={number_redirect}" - r = caller(q) - c = responce_hack(r) - - if check_errors(c) is True: - return c - elif c['response'] == '2': - raise Errors.RedirectInvalidNumberFormat(c['forwarding'], c) - elif c['response'] == '3': - raise Errors.RedirectFailError(c['forwarding'], c) - else: - raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/__init__.py b/smspva_wrapper/sync/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smspva_wrapper/sync/caller/__init__.py b/smspva_wrapper/sync/caller/__init__.py new file mode 100644 index 0000000..97a25ad --- /dev/null +++ b/smspva_wrapper/sync/caller/__init__.py @@ -0,0 +1 @@ +from .caller import Caller diff --git a/smspva_wrapper/sync/caller/caller.py b/smspva_wrapper/sync/caller/caller.py new file mode 100644 index 0000000..73f5b08 --- /dev/null +++ b/smspva_wrapper/sync/caller/caller.py @@ -0,0 +1,60 @@ +import logging +import requests +from smspva_wrapper.errors import Errors +from smspva_wrapper.sync.ext import Base + +log = logging.getLogger(__name__) + + +class Caller(Base): + def __init__(self): + super().__init__() + + def call(self, query: str) -> dict: + """Low-level function for calling API + + Args: + query (str): API link to request + + Returns: + json_dict (dict): containing dictionary of parsed json from API + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + APIGeneralError + NetworkingError + UnknownAPIError + """ + r = requests.get(query) + log.debug(r.status_code, r.content) + + if r.status_code == 200: + try: + json_dict: dict = r.json() + return json_dict + except ValueError: + error = r.content.decode() + if 'API KEY не получен!' == error: + raise Errors.InvalidAPIKeyError(error) + elif 'API KEY не найден!' == error: + raise Errors.InvalidAPIKeyError(error) + elif 'API KEY not received!' == error: + raise Errors.InvalidAPIKeyError(error) + elif 'Недостаточно средств!' == error: + raise Errors.InsufficientFundsError(error) + elif 'Превышено количество попыток!' == error: + raise Errors.TooShortIntervalError(error) + elif 'Произошла неизвестная ошибка.' == error: + raise Errors.RepeatRequestLaterError(error) + elif 'Неверный запрос.' == error: + raise Errors.RequestSyntaxError(error) + elif 'Произошла внутренняя ошибка сервера.' == error: + raise Errors.RepeatRequestLaterError(error) + else: + raise Errors.UnknownAPIError(error) + else: + raise Errors.NetworkingError("status code: ", r.status_code) diff --git a/smspva_wrapper/sync/client/__init__.py b/smspva_wrapper/sync/client/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smspva_wrapper/client.py b/smspva_wrapper/sync/client/client.py similarity index 88% rename from smspva_wrapper/client.py rename to smspva_wrapper/sync/client/client.py index bcd8c98..602329f 100644 --- a/smspva_wrapper/client.py +++ b/smspva_wrapper/sync/client/client.py @@ -1,142 +1,152 @@ -from typing import Union - -from smspva_wrapper.types import Backends, Services, Countries, Containers -from smspva_wrapper.methods import Methods - - -# noinspection PyCallByClass -class Client: - def __init__(self, api_key: str, backend: Backends): - self._api_base = f'{backend}apikey={api_key}' - self.name = self.me.name - - @property - def api_base(self) -> str: - return str(self._api_base) - - @property - def me(self) -> Containers.UserInfo: - return self.get_userinfo() - - @property - def balance(self) -> float: - return float(self.me.balance) - - @property - def karma(self) -> float: - return float(self.me.karma) - - def get_balance(self) -> Containers.Balance: - return Containers.Balance( - Methods.get_balance( - api_base=self.api_base - ) - ) - - def get_userinfo(self) -> Containers.UserInfo: - return Containers.UserInfo( - Methods.get_userinfo( - api_base=self.api_base - ) - ) - - def get_count_new(self, service: Union[Services, str], country: Union[Countries, str]) -> Containers.CountNew: - return Containers.CountNew( - Methods.get_count_new( - api_base=self.api_base, - service=str(service), - country=str(country) - ) - ) - - def get_service_price(self, service: Union[Services, str], country: Union[Countries, str]) -> Containers.ServicePrice: - return Containers.ServicePrice( - Methods.get_service_price( - api_base=self.api_base, - service=str(service), - country=str(country) - ) - ) - - def get_number(self, service: Union[Services, str], country: Union[Countries, str]) -> Containers.Number: - return Containers.Number( - Methods.get_number( - api_base=self.api_base, - service=str(service), - country=str(country) - ) - ) - - def ban(self, service: Union[Services, str], _id: str) -> Containers.Ban: - return Containers.Ban( - Methods.ban( - api_base=self.api_base, - service=str(service), - _id=_id - ) - ) - - def get_sms(self, service: Union[Services, str], country: Union[Countries, str], _id: str) -> Containers.SMS: - return Containers.SMS( - Methods.get_sms( - api_base=self.api_base, - service=str(service), - country=str(country), - _id=_id - ) - ) - - def denial(self, service: Union[Services, str], country: Union[Countries, str], _id: str) -> Containers.Denial: - return Containers.Denial( - Methods.denial( - api_base=self.api_base, - service=str(service), - country=str(country), - _id=_id - ) - ) - - def get_proveka(self, service: Union[Services, str], number: str) -> Containers.Proverka: - return Containers.Proverka( - Methods.get_proverka( - api_base=self.api_base, - service=str(service), - number=number - ) - ) - - def balance_sim(self, service: Union[Services, str], _id: str) -> Containers.BalanceSIM: - return Containers.BalanceSIM( - Methods.balance_sim( - api_base=self.api_base, - service=str(service), - _id=_id - ) - ) - - def redirect(self, service: Union[Services, str], number_redirect: str, _id: str) -> Containers.Redirect: - return Containers.Redirect( - Methods.redirect( - api_base=self.api_base, - service=str(service), - _id=_id, - number_redirect=number_redirect - ) - ) - - def get_2fa(self, secret: str) -> Containers.TwoFA: - return Containers.TwoFA( - Methods.get_2fa( - api_base=self.api_base, - secret=str(secret) - ) - ) - - def get_clearsms(self, service: Union[Services, str], _id: str) -> Containers.ClearSMS: - return Containers.ClearSMS( - Methods.get_clearsms( - api_base=self.api_base, - service=str(service), - _id=_id - ) - ) +from typing import Union + +from smspva_wrapper.types import Services, Countries +from smspva_wrapper.errors import Errors + + +class Client: + """High level wrapper for making requests to SMSPVA API + + Parameters: + api_key (str): + The *APIKEY* of your SMSPVA/SIMSMS account as str: E.g: "DSWAFvdedrE4" + backend (str): + Backend to be used: SMSPVA or SIMSMS + """ + + def __init__( + self, + api_key: str, + backend: str = 'simsms' + ): + self.api_key = api_key + self.backend = self._get_backend(backend) + + + + @property + def me(self) -> Containers.UserInfo: + return self.get_userinfo() + + @property + def balance(self) -> float: + return float(self.me.balance) + + @property + def karma(self) -> float: + return float(self.me.karma) + + def get_balance(self) -> Containers.Balance: + return Containers.Balance( + Methods.get_balance( + api_base=self.api_base + ) + ) + + def get_userinfo(self) -> Containers.UserInfo: + return Containers.UserInfo( + Methods.get_userinfo( + api_base=self.api_base + ) + ) + + def get_count_new(self, service: Union[Services, str], country: Union[Countries, str]) -> Containers.CountNew: + return Containers.CountNew( + Methods.get_count_new( + api_base=self.api_base, + service=str(service), + country=str(country) + ) + ) + + def get_service_price(self, service: Union[Services, str], country: Union[Countries, str]) -> Containers.ServicePrice: + return Containers.ServicePrice( + Methods.get_service_price( + api_base=self.api_base, + service=str(service), + country=str(country) + ) + ) + + def get_number(self, service: Union[Services, str], country: Union[Countries, str]) -> Containers.Number: + return Containers.Number( + Methods.get_number( + api_base=self.api_base, + service=str(service), + country=str(country) + ) + ) + + def ban(self, service: Union[Services, str], _id: str) -> Containers.Ban: + return Containers.Ban( + Methods.ban( + api_base=self.api_base, + service=str(service), + _id=_id + ) + ) + + def get_sms(self, service: Union[Services, str], country: Union[Countries, str], _id: str) -> Containers.SMS: + return Containers.SMS( + Methods.get_sms( + api_base=self.api_base, + service=str(service), + country=str(country), + _id=_id + ) + ) + + def denial(self, service: Union[Services, str], country: Union[Countries, str], _id: str) -> Containers.Denial: + return Containers.Denial( + Methods.denial( + api_base=self.api_base, + service=str(service), + country=str(country), + _id=_id + ) + ) + + def get_proveka(self, service: Union[Services, str], number: str) -> Containers.Proverka: + return Containers.Proverka( + Methods.get_proverka( + api_base=self.api_base, + service=str(service), + number=number + ) + ) + + def balance_sim(self, service: Union[Services, str], _id: str) -> Containers.BalanceSIM: + return Containers.BalanceSIM( + Methods.balance_sim( + api_base=self.api_base, + service=str(service), + _id=_id + ) + ) + + def redirect(self, service: Union[Services, str], number_redirect: str, _id: str) -> Containers.Redirect: + return Containers.Redirect( + Methods.redirect( + api_base=self.api_base, + service=str(service), + _id=_id, + number_redirect=number_redirect + ) + ) + + def get_2fa(self, secret: str) -> Containers.TwoFA: + return Containers.TwoFA( + Methods.get_2fa( + api_base=self.api_base, + secret=str(secret) + ) + ) + + def get_clearsms(self, service: Union[Services, str], _id: str) -> Containers.ClearSMS: + return Containers.ClearSMS( + Methods.get_clearsms( + api_base=self.api_base, + service=str(service), + _id=_id + ) + ) diff --git a/smspva_wrapper/sync/client/methods/__init__.py b/smspva_wrapper/sync/client/methods/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smspva_wrapper/sync/client/methods/calls/__init__.py b/smspva_wrapper/sync/client/methods/calls/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smspva_wrapper/sync/client/methods/calls/balance_sim.py b/smspva_wrapper/sync/client/methods/calls/balance_sim.py new file mode 100644 index 0000000..066a882 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/calls/balance_sim.py @@ -0,0 +1,9 @@ +from ..raw_api import RawBalanceSim +from smspva_wrapper.types.containers import BalanceSIMContainer + + +class BalanceSim: + def balance_sim(self): + r = RawBalanceSim.raw_balance_sim( + api_base=None + ) \ No newline at end of file diff --git a/smspva_wrapper/sync/client/methods/raw_api/__init__.py b/smspva_wrapper/sync/client/methods/raw_api/__init__.py new file mode 100644 index 0000000..5e35a95 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/__init__.py @@ -0,0 +1,31 @@ +from .raw_balance_sim import RawBalanceSim +from .raw_ban import RawBan +from .raw_denial import RawDenial +from .raw_get_2fa import RawGet2FA +from .raw_get_balance import RawGetBalance +from .raw_get_clearsms import RawGetClearSMS +from .raw_get_count_new import RawGetCountNew +from .raw_get_number import RawGetNumber +from .raw_get_proverka import RawGetProverka +from .raw_get_service_price import RawGetServicePrice +from .raw_get_sms import RawGetSMS +from .raw_get_userinfo import RawGetUserinfo +from .raw_redirect import RawRedirect + + +class RAWAPI( + RawBalanceSim, + RawBan, + RawDenial, + RawGet2FA, + RawGetBalance, + RawGetClearSMS, + RawGetCountNew, + RawGetNumber, + RawGetProverka, + RawGetServicePrice, + RawGetSMS, + RawGetUserinfo, + RawRedirect +): + pass diff --git a/smspva_wrapper/methods/helpers/__init__.py b/smspva_wrapper/sync/client/methods/raw_api/helpers/__init__.py similarity index 97% rename from smspva_wrapper/methods/helpers/__init__.py rename to smspva_wrapper/sync/client/methods/raw_api/helpers/__init__.py index 0d2c3a6..a218038 100644 --- a/smspva_wrapper/methods/helpers/__init__.py +++ b/smspva_wrapper/sync/client/methods/raw_api/helpers/__init__.py @@ -1,2 +1,2 @@ -from .check_errors import check_errors -from .responce_hack import responce_hack +from .check_errors import check_errors +from .responce_hack import responce_hack diff --git a/smspva_wrapper/methods/helpers/check_errors.py b/smspva_wrapper/sync/client/methods/raw_api/helpers/check_errors.py similarity index 96% rename from smspva_wrapper/methods/helpers/check_errors.py rename to smspva_wrapper/sync/client/methods/raw_api/helpers/check_errors.py index 07c6aa4..3bb7cac 100644 --- a/smspva_wrapper/methods/helpers/check_errors.py +++ b/smspva_wrapper/sync/client/methods/raw_api/helpers/check_errors.py @@ -1,40 +1,40 @@ -from smspva_wrapper.errors import Errors - - -def check_errors(d: dict) -> bool: - """Checks for error codes in dict - - Args: - d(dict): Takes in dictionary from API - - Returns: - bool: True if no errors were found. False otherwise - - Raises: - UnknownAPIError - MaxRequestsPerMinuteError - NegativeKarmaError - MaxConcurrentStreamsError - """ - - response_code = d.get('response', '') - if response_code == '1': - return True - if response_code == '2': - return False - elif response_code == '3': - return False - elif response_code == '4': - raise Errors.UnknownAPIError(d) - elif response_code == '5': - raise Errors.MaxRequestsPerMinuteError(d) - elif response_code == '6': - raise Errors.NegativeKarmaError(d) - elif response_code == '7': - raise Errors.MaxConcurrentStreamsError(d) - elif response_code == 'error': - return False - elif response_code == 'modem_busy': - return False - else: - return False +from smspva_wrapper.errors import Errors + + +def check_errors(d: dict) -> bool: + """Checks for error codes in dict + + Args: + d(dict): Takes in dictionary from API + + Returns: + bool: True if no errors were found. False otherwise + + Raises: + UnknownAPIError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + """ + + response_code = d.get('response', '') + if response_code == '1': + return True + if response_code == '2': + return False + elif response_code == '3': + return False + elif response_code == '4': + raise Errors.UnknownAPIError(d) + elif response_code == '5': + raise Errors.MaxRequestsPerMinuteError(d) + elif response_code == '6': + raise Errors.NegativeKarmaError(d) + elif response_code == '7': + raise Errors.MaxConcurrentStreamsError(d) + elif response_code == 'error': + return False + elif response_code == 'modem_busy': + return False + else: + return False diff --git a/smspva_wrapper/methods/helpers/responce_hack.py b/smspva_wrapper/sync/client/methods/raw_api/helpers/responce_hack.py similarity index 95% rename from smspva_wrapper/methods/helpers/responce_hack.py rename to smspva_wrapper/sync/client/methods/raw_api/helpers/responce_hack.py index 05ce2b0..1f85dd7 100644 --- a/smspva_wrapper/methods/helpers/responce_hack.py +++ b/smspva_wrapper/sync/client/methods/raw_api/helpers/responce_hack.py @@ -1,13 +1,13 @@ -def responce_hack(d: dict) -> dict: - """Shitty hack to fix inconsistencies in API responses - - Args: - d (dict): takes in dictionary from API call - - Returns: - d (dict): returns fixed dictionary - """ - if 'responce' in d: - d['response'] = d.pop('responce') - - return d +def responce_hack(d: dict) -> dict: + """Shitty hack to fix inconsistencies in API responses + + Args: + d (dict): takes in dictionary from API call + + Returns: + d (dict): returns fixed dictionary + """ + if 'responce' in d: + d['response'] = d.pop('responce') + + return d diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_balance_sim.py b/smspva_wrapper/sync/client/methods/raw_api/raw_balance_sim.py new file mode 100644 index 0000000..ee2a5b2 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_balance_sim.py @@ -0,0 +1,41 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawBalanceSim(Caller): + def raw_balance_sim(self, api_base: str, service: str, _id: str) -> dict: + """Low level function to receive SIM card balance for avito+forwarding service. + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt59" + _id (str): "25623" + + Returns: + dict: provides an API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + BalanceSIMError + """ + + q = f"{api_base}&metod=balance_sim&service={service}&id={_id}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == '2': + raise Errors.BalanceSIMError(c['amount'], c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_ban.py b/smspva_wrapper/sync/client/methods/raw_api/raw_ban.py new file mode 100644 index 0000000..0abc196 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_ban.py @@ -0,0 +1,42 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawBan(Caller): + def raw_ban(self, api_base: str, service: str, _id: str) -> dict: + """Low level function to report to the server that the number is already used + In this method id parameter is indicated from the response to request for phone number get_number + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + _id (str): "25623" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + BanFailedError + """ + + q = f"{api_base}&metod=ban&service={service}&id={_id}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == '2': + raise Errors.BanError(c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_denial.py b/smspva_wrapper/sync/client/methods/raw_api/raw_denial.py new file mode 100644 index 0000000..1a34503 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_denial.py @@ -0,0 +1,43 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawDenial(Caller): + def raw_denial(self, api_base: str, service: str, country: str, _id: str) -> dict: + """Low level function to cancel the order to number you got + In this method id parameter is indicated from the response to request for phone number get_number + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + country (str): "ru" + _id (str): "25623" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + DenialFailedError + """ + + q = f"{api_base}&metod=denial&service={service}&country={country}&id={_id}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == '2': + raise Errors.DenialFailedError(c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_2fa.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_2fa.py new file mode 100644 index 0000000..7ee8d88 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_2fa.py @@ -0,0 +1,37 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGet2FA(Caller): + def raw_get_2fa(self, api_base: str, secret: str) -> dict: + """Low level function for obtaining 2FA authorization code from Google, Microsoft, etc. by secret key + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + secret (str): "1234567890" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + """ + + q = f"{api_base}&metod=get_2fa&secret={secret}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_balance.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_balance.py new file mode 100644 index 0000000..2a80052 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_balance.py @@ -0,0 +1,39 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetBalance(Caller): + def raw_get_balance(self, api_base: str) -> dict: + """Low level function that returns balance of the account + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + UserInfoError + """ + + q = f"{api_base}&metod=get_balance" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == 'error': + raise Errors.UserInfoError(c['error_msg'], c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_clearsms.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_clearsms.py new file mode 100644 index 0000000..b874377 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_clearsms.py @@ -0,0 +1,42 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetClearSMS(Caller): + def raw_get_clearsms(self, api_base: str, service: str, _id: str) -> dict: + """SIMSMS ONLY! Low level function to check the number to receive several SMS consecutively within one order + In this method, the parameter id indicates the order number within which you need to receive another text. + + Args: + api_base (str): "http://simsms.org/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + _id (str): "25623" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + ClearSMSError + """ + + q = f"{api_base}&metod=get_clearsms&service={service}&id={_id}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == '2': + raise Errors.ClearSMSError(c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_count_new.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_count_new.py new file mode 100644 index 0000000..e924ff2 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_count_new.py @@ -0,0 +1,38 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetCountNew(Caller): + def raw_get_count_new(self, api_base: str, service: str, country: str) -> dict: + """Low level function to request for the amount of free activations for a certain service + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + country (str): "ru" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + """ + + q = f"{api_base}&metod=get_count_new&service={service}&country={country}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_number.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_number.py new file mode 100644 index 0000000..388ad35 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_number.py @@ -0,0 +1,41 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetNumber(Caller): + def raw_get_number(self, api_base: str, service: str, country: str) -> dict: + """Low level function to receive a phone number for a certain service. + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + country (str): "ru" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + NumberAlreadyTakenError + """ + + q = f"{api_base}&metod=get_number&service={service}&country={country}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == '2': + raise Errors.NumberAlreadyTakenError(c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_proverka.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_proverka.py new file mode 100644 index 0000000..98b1cd4 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_proverka.py @@ -0,0 +1,58 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetProverka(Caller): + def raw_get_proverka(self, api_base: str, service: str, number: str) -> dict: + """Low level function for checking the numbers for multiple SMS + In this method, number parameter specifies the number that you want to check. + + Note: + Following the successful check of a number, send a request for getting the number - get_number ALSO with number parameter.\ + To check SMS send a request for SMS get_sms according to conditions + + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + number (str): "9685156912" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + ProverkaGSMModuleBusyError + ProverkaNoOrderForNumberForServiceError + ProverkaNoSuchNumberError + """ + + q = f"{api_base}&metod=get_proverka&service={service}&id={number}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + else: + e_msg = c['error_msg'] + if e_msg == 'Number shall consist of 10 digits!': + raise Errors.ProverkaNumberForServiceError(c) + elif e_msg == 'Such a number you did not order for the service': + raise Errors.ProverkaNumberForServiceError(c) + elif e_msg == 'The modem is busy, try to order in 5 minutes': + raise Errors.ProverkaGSMBusyError(c) + elif 'not_number' in c: + if c['not_number'] == 'This number is no longer in the system': + raise Errors.ProverkaNumberError(c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_service_price.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_service_price.py new file mode 100644 index 0000000..fcb9aac --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_service_price.py @@ -0,0 +1,38 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetServicePrice(Caller): + def raw_get_service_price(self, api_base: str, service: str, country: str) -> dict: + """Low level function to request current price sms for country and service + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + country (str): "ru" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + """ + + q = f"{api_base}&metod=get_service_price&service={service}&country={country}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_sms.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_sms.py new file mode 100644 index 0000000..2db1fcb --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_sms.py @@ -0,0 +1,56 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetSMS(Caller): + def raw_get_sms(self, api_base: str, service: str, country: str, _id: str, sms: bool = False) -> dict: + """Low level function for receiving a SMS for a certain service + In this method id parameter is indicated from the response to request for phone number get_number + + Note: + If you get the response that a code from SMS hasn't been found yet, send request get_sms once again 20 seconds later.\ + Note, the server searches for SMS for 10 minutes. You need to send your request within 10 minutes each 20 seconds per one request.\ + That said, you receive a code from SMS or error message. + If you want to get re-SMS without closing the order (Code Refinement), then set sms parameter to True \ + In this case, your order can not be closed and you may receive a re-SMS. Re-chargeable SMS. The cost is the cost of an ordinary SMS for this service. + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt4" + country (str): "ru" + _id (str): "25623" + sms (bool): False + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + GetSMSError + """ + + q = f"{api_base}&metod=get_sms&service={service}&country={country}&id={_id}" + if sms: + q = f"{q}&sms=sms" + + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == '2': + return c + elif c['response'] == '3': + raise Errors.GetSMSError(c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_get_userinfo.py b/smspva_wrapper/sync/client/methods/raw_api/raw_get_userinfo.py new file mode 100644 index 0000000..21dc978 --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_get_userinfo.py @@ -0,0 +1,39 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawGetUserinfo(Caller): + def raw_get_userinfo(self, api_base: str) -> dict: + """Low level function to request user's balance and karma + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + UserInfoError + """ + + q = f"{api_base}&metod=get_userinfo" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == 'error': + raise Errors.UserInfoError(c['error_msg'], c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/client/methods/raw_api/raw_redirect.py b/smspva_wrapper/sync/client/methods/raw_api/raw_redirect.py new file mode 100644 index 0000000..aa1026b --- /dev/null +++ b/smspva_wrapper/sync/client/methods/raw_api/raw_redirect.py @@ -0,0 +1,49 @@ +from smspva_wrapper.sync.caller import Caller +from .helpers import responce_hack, check_errors +from smspva_wrapper.errors import Errors + + +class RawRedirect(Caller): + def raw_redirect(self, api_base: str, service: str, _id: str, number_redirect: str) -> dict: + """Low level function for number forwarding + This method works only for avito+forwarding service. + + Note: + Indicate the number for forwarding in the parameter number_redirect! + + Args: + api_base (str): "http://smspva.com/priemnik.php?apikey=DSWAFvdedrE4" + service (str): "opt59" + _id (str): "25623" + number_redirect (str): "9869788422" + + Returns: + dict: API call dictionary + + Raises: + InvalidAPIKeyError + InsufficientFundsError + TooShortIntervalError + RepeatRequestLaterError + RequestSyntaxError + UnknownAPIError + NetworkingError + MaxRequestsPerMinuteError + NegativeKarmaError + MaxConcurrentStreamsError + RedirectInvalidNumberFormat + RedirectFailError + """ + + q = f"{api_base}&service={service}&id={_id}&number_redirect={number_redirect}" + r = self.call(q) + c = responce_hack(r) + + if check_errors(c) is True: + return c + elif c['response'] == '2': + raise Errors.RedirectInvalidNumberFormat(c['forwarding'], c) + elif c['response'] == '3': + raise Errors.RedirectFailError(c['forwarding'], c) + else: + raise Errors.UnknownAPIError(c) diff --git a/smspva_wrapper/sync/ext/__init__.py b/smspva_wrapper/sync/ext/__init__.py new file mode 100644 index 0000000..d56e0a7 --- /dev/null +++ b/smspva_wrapper/sync/ext/__init__.py @@ -0,0 +1 @@ +from .base import Base diff --git a/smspva_wrapper/sync/ext/base.py b/smspva_wrapper/sync/ext/base.py new file mode 100644 index 0000000..8c9ef36 --- /dev/null +++ b/smspva_wrapper/sync/ext/base.py @@ -0,0 +1,25 @@ +from smspva_wrapper.errors import Errors + + +class Base: + def __init__( + self, + api_key: str, + backend: str = 'smspva', + ): + self.api_key = api_key + self.backend = self._get_backend(backend) + self._api_base = self.api_base + + @property + def api_base(self): + return f'{self.backend}apikey={self.api_key}' + + @staticmethod + def _get_backend(backend) -> str: + if 'smspva' == backend.lower(): + return 'http://smspva.com/priemnik.php?' + elif 'simsms' == backend.lower(): + return 'https://simsms.org/priemnik.php?' + else: + raise Errors.UnrecognizableBackEndError diff --git a/smspva_wrapper/types/__init__.py b/smspva_wrapper/types/__init__.py index fc663c8..f4f2b8f 100644 --- a/smspva_wrapper/types/__init__.py +++ b/smspva_wrapper/types/__init__.py @@ -1,5 +1,3 @@ from .countries import Countries, country_dict from .services import Services, service_dict from .operators import Operators -from .backends import Backends -from .containers import Containers diff --git a/smspva_wrapper/types/backends.py b/smspva_wrapper/types/backends.py deleted file mode 100644 index ed96049..0000000 --- a/smspva_wrapper/types/backends.py +++ /dev/null @@ -1,3 +0,0 @@ -class Backends: - SMSPVA = 'http://smspva.com/priemnik.php?' - SIMSMS = 'https://simsms.org/priemnik.php?' diff --git a/smspva_wrapper/types/containers/__init__.py b/smspva_wrapper/types/containers/__init__.py index 7f23dfb..b9f2aff 100644 --- a/smspva_wrapper/types/containers/__init__.py +++ b/smspva_wrapper/types/containers/__init__.py @@ -1,14 +1,31 @@ -class Containers: - from .balance_object import Balance as Balance - from .balance_sim_object import BalanceSIM as BalanceSIM - from .ban_object import Ban as Ban - from .denial_object import Denial as Denial - from .count_new_object import CountNew as CountNew - from .number_object import Number as Number - from .proverka_object import Proverka as Proverka - from .redirect_object import Redirect as Redirect - from .service_price_object import ServicePrice as ServicePrice - from .sms_object import SMS as SMS - from .two_fa_object import TwoFA as TwoFA - from .userinfo_object import UserInfo as UserInfo - from .clearsms_object import ClearSMS as ClearSMS +from .balance_object import BalanceContainer +from .balance_sim_object import BalanceSIMContainer +from .ban_object import BanContainer +from .denial_object import DenialContainer +from .count_new_object import CountNewContainer +from .number_object import NumberContainer +from .proverka_object import ProverkaContainer +from .redirect_object import RedirectContainer +from .service_price_object import ServicePriceContainer +from .sms_object import SMSContainer +from .two_fa_object import TwoFAContainer +from .userinfo_object import UserInfoContainer +from .clearsms_object import ClearSMSContainer + + +class Containers( + BalanceContainer, + BalanceSIMContainer, + BanContainer, + DenialContainer, + CountNewContainer, + NumberContainer, + ProverkaContainer, + RedirectContainer, + ServicePriceContainer, + SMSContainer, + TwoFAContainer, + UserInfoContainer, + ClearSMSContainer +): + pass diff --git a/smspva_wrapper/types/containers/balance_object.py b/smspva_wrapper/types/containers/balance_object.py index 250cd6d..9bb0b73 100644 --- a/smspva_wrapper/types/containers/balance_object.py +++ b/smspva_wrapper/types/containers/balance_object.py @@ -1,4 +1,4 @@ -class Balance(object): +class BalanceContainer(object): """Immutable high level container for get_balance query""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/balance_sim_object.py b/smspva_wrapper/types/containers/balance_sim_object.py index ea9ed7d..63c41be 100644 --- a/smspva_wrapper/types/containers/balance_sim_object.py +++ b/smspva_wrapper/types/containers/balance_sim_object.py @@ -1,4 +1,4 @@ -class BalanceSIM(object): +class BalanceSIMContainer(object): """Immutable high level container for balance_sim query""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/ban_object.py b/smspva_wrapper/types/containers/ban_object.py index d92f4f4..db24e44 100644 --- a/smspva_wrapper/types/containers/ban_object.py +++ b/smspva_wrapper/types/containers/ban_object.py @@ -1,4 +1,4 @@ -class Ban(object): +class BanContainer(object): """Immutable high level container for ban query""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/clearsms_object.py b/smspva_wrapper/types/containers/clearsms_object.py index 9821719..ba7622e 100644 --- a/smspva_wrapper/types/containers/clearsms_object.py +++ b/smspva_wrapper/types/containers/clearsms_object.py @@ -1,4 +1,4 @@ -class ClearSMS: +class ClearSMSContainer: """Immutable high level container for clearsms query""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/count_new_object.py b/smspva_wrapper/types/containers/count_new_object.py index bc769a5..992deca 100644 --- a/smspva_wrapper/types/containers/count_new_object.py +++ b/smspva_wrapper/types/containers/count_new_object.py @@ -1,8 +1,8 @@ -from ..countries import Countries, country_dict -from ..services import Services, service_dict +from smspva_wrapper.types.countries import Countries, country_dict +from smspva_wrapper.types.services import Services, service_dict -class CountNew: +class CountNewContainer: """Immutable high level container for get_count_new query""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/denial_object.py b/smspva_wrapper/types/containers/denial_object.py index 7eb6b76..b32a126 100644 --- a/smspva_wrapper/types/containers/denial_object.py +++ b/smspva_wrapper/types/containers/denial_object.py @@ -1,4 +1,4 @@ -class Denial: +class DenialContainer: """Immutable high level container for denial query""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/number_object.py b/smspva_wrapper/types/containers/number_object.py index f4124f6..31efef4 100644 --- a/smspva_wrapper/types/containers/number_object.py +++ b/smspva_wrapper/types/containers/number_object.py @@ -1,4 +1,4 @@ -class Number: +class NumberContainer: """Immutable high level container for get_number query""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/proverka_object.py b/smspva_wrapper/types/containers/proverka_object.py index 62a868c..88d59f1 100644 --- a/smspva_wrapper/types/containers/proverka_object.py +++ b/smspva_wrapper/types/containers/proverka_object.py @@ -1,4 +1,4 @@ -class Proverka: +class ProverkaContainer: """Immutable high level container for get_proverka""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/redirect_object.py b/smspva_wrapper/types/containers/redirect_object.py index b361be1..bb4576d 100644 --- a/smspva_wrapper/types/containers/redirect_object.py +++ b/smspva_wrapper/types/containers/redirect_object.py @@ -1,4 +1,4 @@ -class Redirect: +class RedirectContainer: """Immutable high level container for redirect""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/service_price_object.py b/smspva_wrapper/types/containers/service_price_object.py index 655f58d..1c6aea4 100644 --- a/smspva_wrapper/types/containers/service_price_object.py +++ b/smspva_wrapper/types/containers/service_price_object.py @@ -1,8 +1,8 @@ -from ..countries import Countries, country_dict -from ..services import Services, service_dict +from smspva_wrapper.types.countries import Countries, country_dict +from smspva_wrapper.types.services import Services, service_dict -class ServicePrice: +class ServicePriceContainer: """Immutable high level container for get_service_price""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/sms_object.py b/smspva_wrapper/types/containers/sms_object.py index 6d9da05..0af6a8a 100644 --- a/smspva_wrapper/types/containers/sms_object.py +++ b/smspva_wrapper/types/containers/sms_object.py @@ -1,4 +1,4 @@ -class SMS: +class SMSContainer: """Immutable high level container for get_sms""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/two_fa_object.py b/smspva_wrapper/types/containers/two_fa_object.py index 7feb990..fa6c1e7 100644 --- a/smspva_wrapper/types/containers/two_fa_object.py +++ b/smspva_wrapper/types/containers/two_fa_object.py @@ -1,4 +1,4 @@ -class TwoFA: +class TwoFAContainer: """Immutable high level container for get_two_fa""" def __init__(self, data: dict): diff --git a/smspva_wrapper/types/containers/userinfo_object.py b/smspva_wrapper/types/containers/userinfo_object.py index 50c65e5..2270c6f 100644 --- a/smspva_wrapper/types/containers/userinfo_object.py +++ b/smspva_wrapper/types/containers/userinfo_object.py @@ -1,4 +1,4 @@ -class UserInfo: +class UserInfoContainer: """Immutable high level container for get_userinfo""" def __init__(self, data: dict):