python-terminusgps 1.7.1__tar.gz → 1.8.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.
Potentially problematic release.
This version of python-terminusgps might be problematic. Click here for more details.
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/PKG-INFO +1 -1
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/pyproject.toml +1 -1
- python_terminusgps-1.8.0/terminusgps/authorizenet/auth.py +35 -0
- python_terminusgps-1.8.0/terminusgps/authorizenet/profiles/addresses.py +60 -0
- python_terminusgps-1.8.0/terminusgps/authorizenet/profiles/base.py +62 -0
- python_terminusgps-1.8.0/terminusgps/authorizenet/profiles/customers.py +72 -0
- python_terminusgps-1.8.0/terminusgps/authorizenet/profiles/payments.py +90 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/settings.py +3 -1
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/uv.lock +13 -13
- python_terminusgps-1.7.1/terminusgps/authorizenet/auth.py +0 -21
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/.gitignore +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/COPYING +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/README.md +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/requirements.txt +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/__init__.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/authorizenet/__init__.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/aws/__init__.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/aws/secrets.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/test.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/__init__.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/constants.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/errors.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/flags.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/__init__.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/base.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/resource.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/retranslator.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/route.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/unit.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/unit_group.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/user.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/session.py +0 -0
- {python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-terminusgps
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0
|
|
4
4
|
Summary: Provides abstractions/utilities for working with Wialon API, Authorize.NET API, AWS API, and more.
|
|
5
5
|
Project-URL: Documentation, https://app.terminusgps.com/docs/apps/python-terminusgps/index.html
|
|
6
6
|
Project-URL: Repository, https://github.com/terminusgps/python-terminusgps
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "python-terminusgps"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.8.0"
|
|
4
4
|
description = "Provides abstractions/utilities for working with Wialon API, Authorize.NET API, AWS API, and more."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [ {name = "Blake Nall", email = "blake@terminusgps.com" } ]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from authorizenet.apicontractsv1 import merchantAuthenticationType
|
|
2
|
+
from authorizenet.constants import constants
|
|
3
|
+
|
|
4
|
+
from django.conf import ImproperlyConfigured, settings
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def settings_required(settings_list: list[str]):
|
|
8
|
+
def decorator(func):
|
|
9
|
+
def wrapped(*args, **kwargs):
|
|
10
|
+
for setting_name in settings_list:
|
|
11
|
+
if not hasattr(settings, setting_name):
|
|
12
|
+
raise ImproperlyConfigured(f"'{setting_name}' setting is required.")
|
|
13
|
+
return func(*args, **kwargs)
|
|
14
|
+
|
|
15
|
+
return wrapped
|
|
16
|
+
|
|
17
|
+
return decorator
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@settings_required(["MERCHANT_AUTH_LOGIN_ID", "MERCHANT_AUTH_TRANSACTION_KEY"])
|
|
21
|
+
def get_merchant_auth() -> merchantAuthenticationType:
|
|
22
|
+
return merchantAuthenticationType(
|
|
23
|
+
name=str(settings.MERCHANT_AUTH_LOGIN_ID),
|
|
24
|
+
transactionKey=str(settings.MERCHANT_AUTH_TRANSACTION_KEY),
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@settings_required(["DEBUG"])
|
|
29
|
+
def get_environment() -> str:
|
|
30
|
+
return constants.SANDBOX if settings.DEBUG else constants.PRODUCTION
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@settings_required(["DEBUG"])
|
|
34
|
+
def get_validation_mode() -> str:
|
|
35
|
+
return "testMode" if settings.DEBUG else "liveMode"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from authorizenet.apicontractsv1 import (
|
|
2
|
+
createCustomerShippingAddressRequest,
|
|
3
|
+
customerAddressType,
|
|
4
|
+
deleteCustomerShippingAddressRequest,
|
|
5
|
+
updateCustomerShippingAddressRequest,
|
|
6
|
+
getCustomerShippingAddressRequest,
|
|
7
|
+
getCustomerShippingAddressResponse,
|
|
8
|
+
)
|
|
9
|
+
from authorizenet.apicontrollers import (
|
|
10
|
+
createCustomerShippingAddressController,
|
|
11
|
+
deleteCustomerShippingAddressController,
|
|
12
|
+
getCustomerShippingAddressController,
|
|
13
|
+
updateCustomerShippingAddressController,
|
|
14
|
+
)
|
|
15
|
+
from terminusgps.authorizenet.profiles.base import AuthorizenetCustomerProfileBase
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AddressProfile(AuthorizenetCustomerProfileBase):
|
|
19
|
+
def create(self, **kwargs) -> int:
|
|
20
|
+
if not kwargs.get("address"):
|
|
21
|
+
raise ValueError("'address' is required on creation.")
|
|
22
|
+
|
|
23
|
+
request = createCustomerShippingAddressRequest(
|
|
24
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
25
|
+
customerProfileId=self.customerProfileId,
|
|
26
|
+
address=kwargs["address"],
|
|
27
|
+
defaultShippingAddress=self.default,
|
|
28
|
+
)
|
|
29
|
+
controller = createCustomerShippingAddressController(request)
|
|
30
|
+
response = self.execute_controller(controller)
|
|
31
|
+
return int(response.get("customerAddressId"))
|
|
32
|
+
|
|
33
|
+
def delete(self) -> None:
|
|
34
|
+
request = deleteCustomerShippingAddressRequest(
|
|
35
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
36
|
+
customerProfileId=self.customerProfileId,
|
|
37
|
+
customerAddressId=self.id,
|
|
38
|
+
)
|
|
39
|
+
controller = deleteCustomerShippingAddressController(request)
|
|
40
|
+
self.execute_controller(controller)
|
|
41
|
+
|
|
42
|
+
def update(self, address: customerAddressType, default: bool = False) -> None:
|
|
43
|
+
request = updateCustomerShippingAddressRequest(
|
|
44
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
45
|
+
customerProfileId=self.customerProfileId,
|
|
46
|
+
address=address,
|
|
47
|
+
defaultShippingAddress=default,
|
|
48
|
+
)
|
|
49
|
+
controller = updateCustomerShippingAddressController(request)
|
|
50
|
+
self.execute_controller(controller)
|
|
51
|
+
self._default = default
|
|
52
|
+
|
|
53
|
+
def get_details(self) -> getCustomerShippingAddressResponse:
|
|
54
|
+
request = getCustomerShippingAddressRequest(
|
|
55
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
56
|
+
customerProfileId=self.customerProfileId,
|
|
57
|
+
customerAddressId=self.id,
|
|
58
|
+
)
|
|
59
|
+
controller = getCustomerShippingAddressController(request)
|
|
60
|
+
return self.execute_controller(controller)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from authorizenet.apicontractsv1 import merchantAuthenticationType
|
|
2
|
+
from ..auth import get_environment, get_merchant_auth, get_validation_mode
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AuthorizenetProfileBase:
|
|
6
|
+
def __init__(
|
|
7
|
+
self, merchant_id: int | str, id: int | str | None = None, **kwargs
|
|
8
|
+
) -> None:
|
|
9
|
+
self.merchant_id = merchant_id
|
|
10
|
+
self.id = id if id else str(self.create(**kwargs))
|
|
11
|
+
|
|
12
|
+
def __str__(self) -> str:
|
|
13
|
+
return f"#{self.id}"
|
|
14
|
+
|
|
15
|
+
@property
|
|
16
|
+
def environment(self) -> str:
|
|
17
|
+
return get_environment()
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def merchantAuthentication(self) -> merchantAuthenticationType:
|
|
21
|
+
return get_merchant_auth()
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def validationMode(self) -> str:
|
|
25
|
+
return get_validation_mode()
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def merchantCustomerId(self) -> str:
|
|
29
|
+
return str(self.merchant_id)
|
|
30
|
+
|
|
31
|
+
def create(self, **kwargs) -> int:
|
|
32
|
+
raise NotImplementedError("Subclasses must implement this method.")
|
|
33
|
+
|
|
34
|
+
def execute_controller(self, controller):
|
|
35
|
+
controller.setenvironment(self.environment)
|
|
36
|
+
controller.execute()
|
|
37
|
+
response = controller.getresponse()
|
|
38
|
+
if response.messages.resultCode != "Ok":
|
|
39
|
+
raise ValueError(response.messages.message[0]["text"].text)
|
|
40
|
+
return response
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AuthorizenetCustomerProfileBase(AuthorizenetProfileBase):
|
|
44
|
+
def __init__(
|
|
45
|
+
self, customer_profile_id: int | str, default: bool = False, **kwargs
|
|
46
|
+
) -> None:
|
|
47
|
+
if isinstance(customer_profile_id, str) and not customer_profile_id.isdigit():
|
|
48
|
+
raise ValueError(
|
|
49
|
+
f"'customer_profile_id' must be a digit, got '{customer_profile_id}'."
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
self._default = default
|
|
53
|
+
self.customer_profile_id = customer_profile_id
|
|
54
|
+
return super().__init__(**kwargs)
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def customerProfileId(self) -> str:
|
|
58
|
+
return str(self.customer_profile_id)
|
|
59
|
+
|
|
60
|
+
@property
|
|
61
|
+
def default(self) -> str:
|
|
62
|
+
return "true" if self._default else "false"
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from authorizenet.apicontrollers import (
|
|
2
|
+
createCustomerProfileController,
|
|
3
|
+
deleteCustomerProfileController,
|
|
4
|
+
getCustomerProfileController,
|
|
5
|
+
updateCustomerProfileController,
|
|
6
|
+
)
|
|
7
|
+
from authorizenet.apicontractsv1 import (
|
|
8
|
+
customerProfileType,
|
|
9
|
+
createCustomerProfileRequest,
|
|
10
|
+
deleteCustomerProfileRequest,
|
|
11
|
+
getCustomerProfileRequest,
|
|
12
|
+
updateCustomerProfileRequest,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
from terminusgps.authorizenet.profiles.base import AuthorizenetProfileBase
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CustomerProfile(AuthorizenetProfileBase):
|
|
19
|
+
def create(self, **kwargs) -> int:
|
|
20
|
+
if not kwargs.get("email"):
|
|
21
|
+
raise ValueError("'email' is required for creation.")
|
|
22
|
+
|
|
23
|
+
request = createCustomerProfileRequest(
|
|
24
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
25
|
+
profile=customerProfileType(
|
|
26
|
+
merchantCustomerId=self.merchantCustomerId,
|
|
27
|
+
email=kwargs["email"],
|
|
28
|
+
description=kwargs.get("desc", ""),
|
|
29
|
+
),
|
|
30
|
+
)
|
|
31
|
+
controller = createCustomerProfileController(request)
|
|
32
|
+
response = self.execute_controller(controller)
|
|
33
|
+
return int(response.customerProfileId)
|
|
34
|
+
|
|
35
|
+
def update(self, merchant_id: str, email: str, desc: str = "") -> None:
|
|
36
|
+
request = updateCustomerProfileRequest(
|
|
37
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
38
|
+
profile=CustomerProfile(
|
|
39
|
+
self.id, merchantCustomerId=merchant_id, email=email, description=desc
|
|
40
|
+
),
|
|
41
|
+
)
|
|
42
|
+
controller = updateCustomerProfileController(request)
|
|
43
|
+
self.execute_controller(controller)
|
|
44
|
+
|
|
45
|
+
def delete(self) -> None:
|
|
46
|
+
request = deleteCustomerProfileRequest(
|
|
47
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
48
|
+
customerProfileId=str(self.id),
|
|
49
|
+
)
|
|
50
|
+
controller = deleteCustomerProfileController(request)
|
|
51
|
+
self.execute_controller(controller)
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def payment_profiles(self) -> list[dict]:
|
|
55
|
+
request = getCustomerProfileRequest(
|
|
56
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
57
|
+
customerProfileId=self.id,
|
|
58
|
+
includeIssuerInfo="true",
|
|
59
|
+
)
|
|
60
|
+
controller = getCustomerProfileController(request)
|
|
61
|
+
response = self.execute_controller(controller)
|
|
62
|
+
return response
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def main() -> None:
|
|
66
|
+
profile = CustomerProfile(merchant_id=55, id=522226003)
|
|
67
|
+
profile.delete()
|
|
68
|
+
return
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
if __name__ == "__main__":
|
|
72
|
+
main()
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
from authorizenet.apicontractsv1 import (
|
|
2
|
+
createCustomerPaymentProfileRequest,
|
|
3
|
+
getCustomerPaymentProfileRequest,
|
|
4
|
+
deleteCustomerPaymentProfileRequest,
|
|
5
|
+
paymentProfile,
|
|
6
|
+
validateCustomerPaymentProfileRequest,
|
|
7
|
+
)
|
|
8
|
+
from authorizenet.apicontrollers import (
|
|
9
|
+
createCustomerPaymentProfileController,
|
|
10
|
+
deleteCustomerPaymentProfileController,
|
|
11
|
+
getCustomerPaymentProfileController,
|
|
12
|
+
validateCustomerPaymentProfileController,
|
|
13
|
+
)
|
|
14
|
+
from terminusgps.authorizenet.profiles.base import AuthorizenetCustomerProfileBase
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PaymentProfile(AuthorizenetCustomerProfileBase):
|
|
18
|
+
def create(self, **kwargs) -> int:
|
|
19
|
+
"""
|
|
20
|
+
Creates an Authorize.NET payment profile.
|
|
21
|
+
|
|
22
|
+
:param billing_address: A billing address for the payment profile.
|
|
23
|
+
:type billing_address: :py:obj:`~authorizenet.apicontractsv1.customerAddressType`
|
|
24
|
+
:param payment: An Authorize.NET API payment object. Usually a credit card, but could be a bank account.
|
|
25
|
+
:type payment: :py:obj:`~authorizenet.apicontractsv1.paymentType`
|
|
26
|
+
:param default: Whether or not the payment method should be marked as default. Default is :py:obj:`False`.
|
|
27
|
+
:type default: :py:obj:`bool`
|
|
28
|
+
:returns: The new payment profile id.
|
|
29
|
+
:rtype: :py:obj:`int`
|
|
30
|
+
|
|
31
|
+
"""
|
|
32
|
+
if not kwargs.get("billing_address"):
|
|
33
|
+
raise ValueError("'billing_address' is required on creation.")
|
|
34
|
+
if not kwargs.get("payment"):
|
|
35
|
+
raise ValueError("'payment' is required on creation.")
|
|
36
|
+
|
|
37
|
+
request = createCustomerPaymentProfileRequest(
|
|
38
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
39
|
+
customerProfileId=self.customerProfileId,
|
|
40
|
+
paymentProfile=paymentProfile(
|
|
41
|
+
billTo=kwargs["billing_address"],
|
|
42
|
+
payment=kwargs["payment"],
|
|
43
|
+
defaultPaymentProfile=self.default,
|
|
44
|
+
),
|
|
45
|
+
validationMode=self.validationMode,
|
|
46
|
+
)
|
|
47
|
+
controller = createCustomerPaymentProfileController(request)
|
|
48
|
+
response = self.execute_controller(controller)
|
|
49
|
+
return int(response.get("customerPaymentProfileId"))
|
|
50
|
+
|
|
51
|
+
def delete(self) -> None:
|
|
52
|
+
"""Deletes the Authorize.NET payment profile."""
|
|
53
|
+
request = deleteCustomerPaymentProfileRequest(
|
|
54
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
55
|
+
customerProfileId=self.customerProfileId,
|
|
56
|
+
customerPaymentProfileId=self.id,
|
|
57
|
+
)
|
|
58
|
+
controller = deleteCustomerPaymentProfileController(request)
|
|
59
|
+
self.execute_controller(controller)
|
|
60
|
+
|
|
61
|
+
def validate(self) -> None:
|
|
62
|
+
"""Validates the Authorize.NET payment profile."""
|
|
63
|
+
request = validateCustomerPaymentProfileRequest(
|
|
64
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
65
|
+
customerProfileId=self.customerProfileId,
|
|
66
|
+
customerPaymentProfileId=self.id,
|
|
67
|
+
validationMode=self.validationMode,
|
|
68
|
+
)
|
|
69
|
+
controller = validateCustomerPaymentProfileController(request)
|
|
70
|
+
self.execute_controller(controller)
|
|
71
|
+
|
|
72
|
+
def get_details(self, issuer_info: bool = False) -> dict:
|
|
73
|
+
"""
|
|
74
|
+
Calls the Authorize.NET API and retrieves the payment profile.
|
|
75
|
+
|
|
76
|
+
:param issuer_info: Whether or not Authorize.NET should return issuer info for the payment profile.
|
|
77
|
+
:type issuer_info: :py:obj:`bool`
|
|
78
|
+
:returns: The Authorize.NET API payment profile.
|
|
79
|
+
:rtype: :py:obj:`~authorizenet.apicontractsv1.paymentProfile`
|
|
80
|
+
|
|
81
|
+
"""
|
|
82
|
+
request = getCustomerPaymentProfileRequest(
|
|
83
|
+
merchantAuthentication=self.merchantAuthentication,
|
|
84
|
+
customerProfileId=self.customerProfileId,
|
|
85
|
+
customerPaymentProfileId=self.id,
|
|
86
|
+
includeIssuerInfo="true" if issuer_info else "false",
|
|
87
|
+
)
|
|
88
|
+
controller = getCustomerPaymentProfileController(request)
|
|
89
|
+
response = self.execute_controller(controller)
|
|
90
|
+
return response
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from os import getenv
|
|
2
2
|
|
|
3
|
-
DEBUG =
|
|
3
|
+
DEBUG = True
|
|
4
4
|
SECRET_KEY = "xem*6no%8d9%^qzt2f3x3ar-uq4_+7h9myc$t0!+4%bj5us6f)"
|
|
5
5
|
WIALON_ADMIN_ID = getenv("WIALON_ADMIN_ID")
|
|
6
6
|
WIALON_TOKEN = getenv("WIALON_TOKEN")
|
|
7
|
+
MERCHANT_AUTH_LOGIN_ID = getenv("MERCHANT_AUTH_LOGIN_ID")
|
|
8
|
+
MERCHANT_AUTH_TRANSACTION_KEY = getenv("MERCHANT_AUTH_TRANSACTION_KEY")
|
|
@@ -41,48 +41,48 @@ sdist = { url = "https://files.pythonhosted.org/packages/2d/9a/61c151f508a9b3201
|
|
|
41
41
|
|
|
42
42
|
[[package]]
|
|
43
43
|
name = "babel"
|
|
44
|
-
version = "2.
|
|
44
|
+
version = "2.17.0"
|
|
45
45
|
source = { registry = "https://pypi.org/simple" }
|
|
46
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
46
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 }
|
|
47
47
|
wheels = [
|
|
48
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
48
|
+
{ url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 },
|
|
49
49
|
]
|
|
50
50
|
|
|
51
51
|
[[package]]
|
|
52
52
|
name = "boto3"
|
|
53
|
-
version = "1.36.
|
|
53
|
+
version = "1.36.11"
|
|
54
54
|
source = { registry = "https://pypi.org/simple" }
|
|
55
55
|
dependencies = [
|
|
56
56
|
{ name = "botocore" },
|
|
57
57
|
{ name = "jmespath" },
|
|
58
58
|
{ name = "s3transfer" },
|
|
59
59
|
]
|
|
60
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
60
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ee/ac/2b4346474bd3ae501a2fc0e2b5b4f12f412dc89c05bf321a8108d3a95b5c/boto3-1.36.11.tar.gz", hash = "sha256:b40fbf2c0f22e55b67df95475a68bb72be5169097180a875726b6b884339ac8b", size = 111010 }
|
|
61
61
|
wheels = [
|
|
62
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
62
|
+
{ url = "https://files.pythonhosted.org/packages/4e/a5/e6f90b0a768560a0c44cb9076a313ee6d669ec98fd2747a8451832403ffe/boto3-1.36.11-py3-none-any.whl", hash = "sha256:641dd772eac111d9443258f0f5491c57c2af47bddae94a8d32de19edb5bf7b1c", size = 139177 },
|
|
63
63
|
]
|
|
64
64
|
|
|
65
65
|
[[package]]
|
|
66
66
|
name = "botocore"
|
|
67
|
-
version = "1.36.
|
|
67
|
+
version = "1.36.11"
|
|
68
68
|
source = { registry = "https://pypi.org/simple" }
|
|
69
69
|
dependencies = [
|
|
70
70
|
{ name = "jmespath" },
|
|
71
71
|
{ name = "python-dateutil" },
|
|
72
72
|
{ name = "urllib3" },
|
|
73
73
|
]
|
|
74
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
74
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a5/0f/6b92050154ad0e286b82ca36de5f87a466723e1cdc525df53270bcc36f60/botocore-1.36.11.tar.gz", hash = "sha256:c919be883f95b9e0c3021429a365d40cd7944b8345a07af30dc8d891ceefe07a", size = 13497505 }
|
|
75
75
|
wheels = [
|
|
76
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
76
|
+
{ url = "https://files.pythonhosted.org/packages/2c/ce/e97be00389d51a010c0680ea688a073737ca3b2de6f924800fc61bf68e41/botocore-1.36.11-py3-none-any.whl", hash = "sha256:82c5660027f696608d0e55feb08c146c11c7ebeba7615961c7765dcf6009a00d", size = 13327743 },
|
|
77
77
|
]
|
|
78
78
|
|
|
79
79
|
[[package]]
|
|
80
80
|
name = "certifi"
|
|
81
|
-
version = "
|
|
81
|
+
version = "2025.1.31"
|
|
82
82
|
source = { registry = "https://pypi.org/simple" }
|
|
83
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
83
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
|
|
84
84
|
wheels = [
|
|
85
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
85
|
+
{ url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
|
|
86
86
|
]
|
|
87
87
|
|
|
88
88
|
[[package]]
|
|
@@ -285,7 +285,7 @@ wheels = [
|
|
|
285
285
|
|
|
286
286
|
[[package]]
|
|
287
287
|
name = "python-terminusgps"
|
|
288
|
-
version = "1.
|
|
288
|
+
version = "1.8.0"
|
|
289
289
|
source = { editable = "." }
|
|
290
290
|
dependencies = [
|
|
291
291
|
{ name = "argparse" },
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
from authorizenet.apicontractsv1 import merchantAuthenticationType
|
|
2
|
-
from authorizenet.constants import constants
|
|
3
|
-
|
|
4
|
-
from django.conf import ImproperlyConfigured, settings
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def get_merchant_auth() -> merchantAuthenticationType:
|
|
8
|
-
if not hasattr(settings, "MERCHANT_AUTH_LOGIN_ID"):
|
|
9
|
-
raise ImproperlyConfigured("'MERCHANT_AUTH_LOGIN_ID' is required.")
|
|
10
|
-
if not hasattr(settings, "MERCHANT_AUTH_TRANSACTION_KEY"):
|
|
11
|
-
raise ImproperlyConfigured("'MERCHANT_AUTH_TRANSACTION_KEY' is required.")
|
|
12
|
-
return merchantAuthenticationType(
|
|
13
|
-
name=str(settings.MERCHANT_AUTH_LOGIN_ID),
|
|
14
|
-
transactionKey=str(settings.MERCHANT_AUTH_TRANSACTION_KEY),
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def get_environment() -> str:
|
|
19
|
-
if not hasattr(settings, "DEBUG"):
|
|
20
|
-
raise ImproperlyConfigured("'DEBUG' is required.")
|
|
21
|
-
return constants.SANDBOX if settings.DEBUG else constants.PRODUCTION
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/retranslator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_terminusgps-1.7.1 → python_terminusgps-1.8.0}/terminusgps/wialon/items/unit_group.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|