diff --git a/manage_content_service/settings/base.py b/manage_content_service/settings/base.py index d3eeb7b7..401e260e 100644 --- a/manage_content_service/settings/base.py +++ b/manage_content_service/settings/base.py @@ -273,3 +273,6 @@ def get_environment_var(var_name, default, prefixed=True): ASSESS_ANSWER_SERVICE_URL = get_environment_var( 'ASSESS_ANSWER_SERVICE_URL', 'https://aas.sepid.org/') + +SHAD_LOGIN_USERNAME = get_environment_var('SHAD_LOGIN_USERNAME', None) +SHAD_LOGIN_PASSWORD = get_environment_var('SHAD_LOGIN_PASSWORD', None) diff --git a/proxies/Shad.py b/proxies/Shad.py new file mode 100644 index 00000000..6447052f --- /dev/null +++ b/proxies/Shad.py @@ -0,0 +1,33 @@ +from django.conf import settings + +from proxies.http_request_utils import post + +SHAD_LOGIN_USERNAME = settings.SHAD_LOGIN_USERNAME +SHAD_LOGIN_PASSWORD = settings.SHAD_LOGIN_PASSWORD + + +SHAD_API_URL = 'https://shadapi.noyanet.com/api/v1' + + +def login_to_Shad(landing_id=284): + + url = f'{SHAD_API_URL}/account/login/' + + payload = { + "landingId": landing_id, + "username": SHAD_LOGIN_USERNAME, + "password": SHAD_LOGIN_PASSWORD, + } + + return post(url, payload) + + +def get_user_data(token, user_uuid): + url = f'{SHAD_API_URL}/ShadEvent?UserHashId={user_uuid}' + + headers = { + "Authorization": f"Bearer {token}" + } + + payload = {} + return post(url, payload, headers=headers) diff --git a/proxies/bank_service/bank.py b/proxies/bank_service/bank.py index b9cf5ad6..f959ca25 100644 --- a/proxies/bank_service/bank.py +++ b/proxies/bank_service/bank.py @@ -1,72 +1,8 @@ from django.conf import settings -import requests -from requests.adapters import HTTPAdapter -from urllib3.util.retry import Retry -from rest_framework import status -from rest_framework.response import Response -BANK_URL = settings.BANK_URL - - -# Configure retry strategy -def get_retry_session(retries=5, backoff_factor=0.3, - status_forcelist=(500, 502, 503, 504)): - """ - Create a requests session with retry capabilities. +from proxies.http_request_utils import get, post - Args: - retries (int): Number of total retries to allow. - backoff_factor (float): A backoff factor to apply between attempts. - status_forcelist (tuple): HTTP status codes to retry on. - - Returns: - requests.Session: A configured session with retry capabilities - """ - retry_strategy = Retry( - total=retries, - status_forcelist=status_forcelist, - allowed_methods=["GET", "POST"], # Only retry these methods - backoff_factor=backoff_factor - ) - adapter = HTTPAdapter(max_retries=retry_strategy) - session = requests.Session() - session.mount("http://", adapter) - session.mount("https://", adapter) - return session - - -def _get(url, params): - try: - session = get_retry_session() - response = session.get( - url, - params=params, - timeout=10 - ) - response.raise_for_status() - return response.json() - except requests.RequestException as e: - return Response( - {"error": f"Failed to process GET request after retries: {str(e)}"}, - status=status.HTTP_500_INTERNAL_SERVER_ERROR - ) - - -def _post(url, payload): - try: - session = get_retry_session() - response = session.post( - url, - json=payload, - timeout=10 - ) - response.raise_for_status() - return response.json() - except requests.RequestException as e: - return Response( - {"error": f"Failed to process POST request after retries: {str(e)}"}, - status=status.HTTP_500_INTERNAL_SERVER_ERROR - ) +BANK_URL = settings.BANK_URL def request_transfer(sender_id: str, receiver_id: str, funds: dict): @@ -89,7 +25,7 @@ def request_transfer(sender_id: str, receiver_id: str, funds: dict): "funds": funds } - return _post(url, payload) + return post(url, payload) def get_user_balances(user_uuid): @@ -100,4 +36,4 @@ def get_user_balances(user_uuid): "user_uuid": user_uuid, } - return _get(url, payload) + return get(url, payload) diff --git a/proxies/http_request_utils.py b/proxies/http_request_utils.py new file mode 100644 index 00000000..c7e53318 --- /dev/null +++ b/proxies/http_request_utils.py @@ -0,0 +1,67 @@ +import requests +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry +from rest_framework import status +from rest_framework.response import Response + + +# Configure retry strategy +def get_retry_session(retries=5, backoff_factor=0.3, + status_forcelist=(500, 502, 503, 504)): + """ + Create a requests session with retry capabilities. + + Args: + retries (int): Number of total retries to allow. + backoff_factor (float): A backoff factor to apply between attempts. + status_forcelist (tuple): HTTP status codes to retry on. + + Returns: + requests.Session: A configured session with retry capabilities + """ + retry_strategy = Retry( + total=retries, + status_forcelist=status_forcelist, + allowed_methods=["GET", "POST"], # Only retry these methods + backoff_factor=backoff_factor + ) + adapter = HTTPAdapter(max_retries=retry_strategy) + session = requests.Session() + session.mount("http://", adapter) + session.mount("https://", adapter) + return session + + +def get(url, params): + try: + session = get_retry_session() + response = session.get( + url, + params=params, + timeout=10 + ) + response.raise_for_status() + return response.json() + except requests.RequestException as e: + return Response( + {"error": f"Failed to process GET request after retries: {str(e)}"}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) + + +def post(url, payload, headers=None): + try: + session = get_retry_session() + response = session.post( + url, + json=payload, + headers=headers, + timeout=10 + ) + response.raise_for_status() + return response.json() + except requests.RequestException as e: + return Response( + {"error": f"Failed to process POST request after retries: {str(e)}"}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR + )