Refactor cli.py #4

Merged
crudo merged 1 commits from :master into master 2017-03-23 19:14:48 +01:00

64
cli.py Normal file → Executable file
View File

@ -1,3 +1,4 @@
#!/usr/bin/env python3
import click import click
from tabulate import tabulate from tabulate import tabulate
from datetime import datetime from datetime import datetime
@ -15,6 +16,15 @@ log = get_logger('cli')
db = Database(**conf_db) db = Database(**conf_db)
def get_total(transaction):
return sum(o.product.price * o.quantity
for o in transaction.orders)
def get_income(event):
return sum(get_total(t) for t in event.transactions)
@click.group() @click.group()
def cli(): def cli():
pass pass
@ -44,13 +54,13 @@ def user_add(username, password):
@user.command('list') @user.command('list')
def user_list(): def user_list():
users = None
with db.get_session() as session: with db.get_session() as session:
users = session.query(User).all() users = session.query(User).all()
if len(users) == 0:
print("No users found.") if users:
return
print(tabulate_users(users)) print(tabulate_users(users))
else:
print("No users found.")
@cli.group('event') @cli.group('event')
@ -60,12 +70,11 @@ def event():
def tabulate_events(events): def tabulate_events(events):
tab = [["UID", "Name", "Starts at", "Ends at", "Income", "Created at"]] tab = [["UID", "Name", "Starts at", "Ends at", "Income", "Created at"]]
for e in events: for e in events:
sum = 0 tab.append([e.uid, e.name, e.starts_at,
for t in e.transactions: e.ends_at, get_income(e), e.created_at])
for o in t.orders:
sum += o.product.price * o.quantity
tab.append([e.uid, e.name, e.starts_at, e.ends_at, sum, e.created_at])
return tabulate(tab, headers='firstrow') return tabulate(tab, headers='firstrow')
@ -77,6 +86,7 @@ def event_add(name, start, end):
start = datetime.strptime(start, "%Y-%m-%d %H:%M") start = datetime.strptime(start, "%Y-%m-%d %H:%M")
end = datetime.strptime(end, "%Y-%m-%d %H:%M") end = datetime.strptime(end, "%Y-%m-%d %H:%M")
event = Event(name=name, starts_at=start, ends_at=end) event = Event(name=name, starts_at=start, ends_at=end)
with db.get_session() as session: with db.get_session() as session:
session.add(event) session.add(event)
print("Event succesfully added.") print("Event succesfully added.")
@ -84,13 +94,13 @@ def event_add(name, start, end):
@event.command('list') @event.command('list')
def event_list(): def event_list():
events = None
with db.get_session() as session: with db.get_session() as session:
events = session.query(Event).all() events = session.query(Event).all()
if len(events) == 0:
print("No events found.") if events:
return
print(tabulate_events(events)) print(tabulate_events(events))
else:
print("No events found.")
@cli.group('product') @cli.group('product')
@ -117,13 +127,13 @@ def product_add(name, price):
@product.command('list') @product.command('list')
def product_list(): def product_list():
products = None
with db.get_session() as session: with db.get_session() as session:
products = session.query(Product).all() products = session.query(Product).all()
if len(products) == 0:
print("No products found.") if products:
return
print(tabulate_products(products)) print(tabulate_products(products))
else:
print("No products found.")
@cli.group('transaction') @cli.group('transaction')
@ -134,26 +144,17 @@ def transaction():
def tabulate_orders(orders): def tabulate_orders(orders):
tab = [["Product", "Price", "Quantity", "Total"]] tab = [["Product", "Price", "Quantity", "Total"]]
for o in orders: for o in orders:
if o.quantity != 0: if o.quantity > 0:
tab.append([o.product.name, o.product.price, o.quantity, tab.append([o.product.name, o.product.price, o.quantity,
o.product.price * o.quantity]) o.product.price * o.quantity])
return tabulate(tab, headers='firstrow') return tabulate(tab, headers='firstrow')
def print_transactions(transactions): def print_transactions(transactions):
sum = 0
for t in transactions: for t in transactions:
print("Listing transaction #{} ({}):".format(t.uid, t.created_at)) print("Listing transaction #{} ({}):".format(t.uid, t.created_at))
print(tabulate_orders(t.orders)) print(tabulate_orders(t.orders))
print("Total:", get_total(t))
tot = 0
for o in t.orders:
tot += o.product.price * o.quantity
sum += tot
print("Total: {}".format(tot))
print()
print("Total income: {}".format(sum))
print() print()
@ -162,11 +163,10 @@ def transaction_list():
with db.get_session() as session: with db.get_session() as session:
transactions = session.query(Transaction).all() transactions = session.query(Transaction).all()
if len(transactions) == 0: if transactions:
print_transactions(transactions)
else:
print("No transactions found.") print("No transactions found.")
return
return print_transactions(transactions)
if __name__ == '__main__': if __name__ == '__main__':