Skip to content

Commit

Permalink
Added flake8, isort and black
Browse files Browse the repository at this point in the history
Signed-off-by: Piyush Ajmani <piyush@cuenca.com>
  • Loading branch information
Piyush Ajmani committed Jun 24, 2020
1 parent b1037e0 commit 2a15a5e
Show file tree
Hide file tree
Showing 32 changed files with 406 additions and 276 deletions.
13 changes: 11 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
SHELL := bash
DOCKER=docker-compose run --rm arcusd
PYTHON=python3.6

PROJECT=arcusd
isort = isort -rc -ac $(PROJECT) tests setup.py
black = black -S -l 79 --target-version py37 $(PROJECT) tests setup.py

install:
pip install -q -r requirements.txt
Expand All @@ -14,8 +16,15 @@ venv:
source venv/bin/activate
pip install --quiet --upgrade pip

format:
$(isort)
$(black)

lint:
pycodestyle arcusd/ tests/
$(isort) --check-only
$(black) --check
flake8 $(PROJECT) tests setup.py


test: clean-pyc lint
python scripts/create_mappings_for_test.py
Expand Down
3 changes: 2 additions & 1 deletion arcusd/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from .types import OperationType, OperationStatus
__all__ = ['OperationType', 'OperationStatus']
from .types import OperationStatus, OperationType
62 changes: 39 additions & 23 deletions arcusd/arcusactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,21 @@
import re
from typing import Optional

from arcus.client import Client
from arcus.client import Transaction as ArcusTransaction
from arcus.client import Client, Transaction as ArcusTransaction
from arcus.exc import InvalidAmount

from arcusd.contracts import Bill, Cancellation, Payment, Transaction
from arcusd.data_access.providers_mapping import get_service_provider_code

ARCUS_API_KEY = os.environ['ARCUS_API_KEY']
ARCUS_SECRET_KEY = os.environ['ARCUS_SECRET_KEY']
TOPUP_BILLERS = [int(biller_id) for biller_id in
os.environ['TOPUP_BILLERS'].split(',')]
TOPUP_BILLERS = [
int(biller_id) for biller_id in os.environ['TOPUP_BILLERS'].split(',')
]

use_arcus_sandbox = os.environ.get('ARCUS_USE_SANDBOX') == 'true'

client = Client(ARCUS_API_KEY, ARCUS_SECRET_KEY,
sandbox=use_arcus_sandbox)
client = Client(ARCUS_API_KEY, ARCUS_SECRET_KEY, sandbox=use_arcus_sandbox)


def cents_to_unit(cents: int) -> float:
Expand Down Expand Up @@ -45,7 +44,7 @@ def query_bill(biller_id: int, account_number: str) -> Bill:
service_provider_code=get_service_provider_code(biller_id),
account_number=bill.account_number,
balance=unit_to_cents(bill.balance),
currency=bill.balance_currency
currency=bill.balance_currency,
)
return bill_contract

Expand All @@ -59,13 +58,14 @@ def pay_bill_id(bill_id: int) -> Transaction:
currency=transaction.amount_currency,
transaction_fee=unit_to_cents(transaction.transaction_fee),
hours_to_fulfill=transaction.hours_to_fulfill,
status=transaction.status
status=transaction.status,
)
return transaction_contract


def pay_bill(biller_id: int, account_number: str,
amount: Optional[int] = None) -> Transaction:
def pay_bill(
biller_id: int, account_number: str, amount: Optional[int] = None
) -> Transaction:
bill = client.bills.create(biller_id, clean(account_number))
if amount is None:
transaction = bill.pay()
Expand All @@ -78,16 +78,25 @@ def pay_bill(biller_id: int, account_number: str,
currency=transaction.amount_currency,
transaction_fee=unit_to_cents(transaction.transaction_fee),
hours_to_fulfill=transaction.hours_to_fulfill,
status=transaction.status
status=transaction.status,
)
return transaction_contract


def cancel_transaction(transaction_id: int) -> Cancellation:
transaction = ArcusTransaction(
id=transaction_id, amount=0, amount_currency='',
transaction_fee=0, hours_to_fulfill=0, created_at='',
status='', type='', fx_rate=0, amount_usd=0, total_usd=0)
id=transaction_id,
amount=0,
amount_currency='',
transaction_fee=0,
hours_to_fulfill=0,
created_at='',
status='',
type='',
fx_rate=0,
amount_usd=0,
total_usd=0,
)
arcus_cancellation = transaction.cancel()
cancellation = Cancellation(
transaction_id=transaction_id,
Expand All @@ -97,16 +106,23 @@ def cancel_transaction(transaction_id: int) -> Cancellation:
return cancellation


def bill_payments(biller_id: int, account_number: str, amount: int,
currency: str, name_on_account: str) -> Payment:
def bill_payments(
biller_id: int,
account_number: str,
amount: int,
currency: str,
name_on_account: str,
) -> Payment:
unit = amount_to_unit(amount)
use_topup_creds = biller_id in TOPUP_BILLERS
payment = client.bill_payments.create(biller_id,
clean(account_number),
unit,
currency,
name_on_account,
topup=use_topup_creds)
payment = client.bill_payments.create(
biller_id,
clean(account_number),
unit,
currency,
name_on_account,
topup=use_topup_creds,
)
payment_contract = Payment(
id=payment.id,
service_provider_code=get_service_provider_code(biller_id),
Expand All @@ -120,6 +136,6 @@ def bill_payments(biller_id: int, account_number: str, amount: int,
starting_balance=unit_to_cents(payment.starting_balance),
ending_balance=unit_to_cents(payment.ending_balance),
hours_to_fulfill=payment.hours_to_fulfill,
ticket_text=payment.ticket_text
ticket_text=payment.ticket_text,
)
return payment_contract
17 changes: 10 additions & 7 deletions arcusd/callbacks.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import base64
import json
import requests
import os

import requests

from .contracts import ContractEncoder, OpInfo

ARCUSD_CALLBACK_URL = os.environ['ARCUSD_CALLBACK_URL']
Expand All @@ -11,21 +12,23 @@


def auth_header(username: str, password: str) -> str:
creds = base64.b64encode(
f'{username}:{password}'.encode('ascii')).decode('utf-8')
creds = base64.b64encode(f'{username}:{password}'.encode('ascii')).decode(
'utf-8'
)
return f'Basic {creds}'


class CallbackHelper:

@classmethod
def send_op_result(cls, op_info: OpInfo):
resp = requests.post(
ARCUSD_CALLBACK_URL,
data=json.dumps(op_info, cls=ContractEncoder),
headers={
'Content-Type': 'application/json',
'Authorization': auth_header(ARCUSD_CALLBACK_API_KEY,
ARCUSD_CALLBACK_SECRET)
})
'Authorization': auth_header(
ARCUSD_CALLBACK_API_KEY, ARCUSD_CALLBACK_SECRET
),
},
)
return resp.json()
53 changes: 31 additions & 22 deletions arcusd/commands/arcusd_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
from arcusd import OperationType
from arcusd.callbacks import CallbackHelper
from arcusd.contracts import OpInfo
from arcusd.data_access.tasks import (get_task_info, update_task_info,
update_insert_task_info)
from arcusd.data_access.tasks import (
get_task_info,
update_insert_task_info,
update_task_info,
)


@click.group()
Expand All @@ -30,28 +33,34 @@ def change_status(transaction_id: str, status: str) -> None:
else:
if status == 'success':
id_value = click.prompt('please enter arcus id: ', type=str)
amount = click.prompt('please enter amount paid in cents: ',
type=int)
update_task_info(dict(request_id=transaction_id), dict(
op_info=dict(
request_id=transaction_id,
tran_type='payment',
status=status,
operation=dict(
id=id_value,
amount=amount,
currency='MXN'
amount = click.prompt(
'please enter amount paid in cents: ', type=int
)
update_task_info(
dict(request_id=transaction_id),
dict(
op_info=dict(
request_id=transaction_id,
tran_type='payment',
status=status,
operation=dict(
id=id_value, amount=amount, currency='MXN'
),
)
)
))
),
)
else:
update_insert_task_info({'request_id': transaction_id},
{'op_info.request_id': transaction_id,
'op_info.tran_type': 'payment',
'op_info.status': status})
update_insert_task_info(
{'request_id': transaction_id},
{
'op_info.request_id': transaction_id,
'op_info.tran_type': 'payment',
'op_info.status': status,
},
)
try:
CallbackHelper.send_op_result(OpInfo(transaction_id,
OperationType.payment,
status))
CallbackHelper.send_op_result(
OpInfo(transaction_id, OperationType.payment, status)
)
except ConnectionError:
click.echo('connection error try again')
9 changes: 9 additions & 0 deletions arcusd/contracts/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
__all__ = [
'Bill',
'Cancellation',
'Contract',
'ContractEncoder',
'OpInfo',
'Payment',
'Transaction',
]
from .bill import Bill
from .cancellation import Cancellation
from .contract import Contract
Expand Down
15 changes: 8 additions & 7 deletions arcusd/contracts/bill.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@


class Bill(Contract):

def __init__(self,
id: int,
service_provider_code: int,
account_number: str,
balance: int,
currency: str):
def __init__(
self,
id: int,
service_provider_code: int,
account_number: str,
balance: int,
currency: str,
):
self.id = id
self.service_provider_code = service_provider_code
self.account_number = account_number
Expand Down
1 change: 0 additions & 1 deletion arcusd/contracts/cancellation.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@


class Cancellation(Contract):

def __init__(self, transaction_id: int, code: str, message: str):
self.transaction_id = transaction_id
self.code = code
Expand Down
3 changes: 1 addition & 2 deletions arcusd/contracts/contract.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum
import datetime as dt
import json
from enum import Enum


class Contract:

def to_dict(self):
items = {}
for key, value in self.__dict__.items():
Expand Down
1 change: 0 additions & 1 deletion arcusd/contracts/encoders.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@


class ContractEncoder(json.JSONEncoder):

def default(self, obj):
try:
super().default(obj)
Expand Down
17 changes: 9 additions & 8 deletions arcusd/contracts/operationinfo.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
from .contract import Contract
from ..types import OperationStatus, OperationType
from .contract import Contract


class OpInfo(Contract):

def __init__(self,
request_id: str,
tran_type: OperationType,
status: OperationStatus = OperationStatus.none,
operation=None,
error_message=None):
def __init__(
self,
request_id: str,
tran_type: OperationType,
status: OperationStatus = OperationStatus.none,
operation=None,
error_message=None,
):
self.request_id = request_id
self.tran_type = tran_type
self.status = status
Expand Down
31 changes: 16 additions & 15 deletions arcusd/contracts/payment.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@


class Payment(Contract):

def __init__(self,
id: int,
service_provider_code: int,
account_number: str,
amount: int,
currency: str,
payment_transaction_fee: int,
payment_total: int,
chain_earned: int,
chain_paid: int,
starting_balance: int,
ending_balance: int,
hours_to_fulfill: int,
ticket_text: str):
def __init__(
self,
id: int,
service_provider_code: int,
account_number: str,
amount: int,
currency: str,
payment_transaction_fee: int,
payment_total: int,
chain_earned: int,
chain_paid: int,
starting_balance: int,
ending_balance: int,
hours_to_fulfill: int,
ticket_text: str,
):
self.id = id
self.service_provider_code = service_provider_code
self.account_number = account_number
Expand Down
Loading

0 comments on commit 2a15a5e

Please sign in to comment.