Skip to content
This repository was archived by the owner on Jun 9, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion solutions/metaprogramming/json_save/json_save/saveables.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ def to_python(val):
obj_type = item["__obj_type"]
obj = Saveable.ALL_SAVEABLES[obj_type].from_json_dict(item)
new_list.append(obj)
except TypeError:
except (TypeError, KeyError):
new_list.append(item)
return new_list

Expand Down
4 changes: 4 additions & 0 deletions students/johnn/mailroom/mailroom/audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"""

import datetime
import logging


def audit_log(called_function):
Expand Down Expand Up @@ -32,6 +33,9 @@ def audit_log_inner(self, *args, **kwargs):
"action": called_function.__name__,
"args": args,
"kwargs": kwargs})
logging.debug("called {}, with {}, {}".format(
user, called_function.__name__, args, kwargs),
extra={ "user": security.user })
result = called_function(self, *args, **kwargs)
return result
return audit_log_inner
26 changes: 23 additions & 3 deletions students/johnn/mailroom/mailroom/donors.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
import uuid
import pickle
import os
from mailroom import security
from mailroom.audit import audit_log
import json_save.json_save_meta as js


class Donors:
class Donors(js.JsonSaveable):

"""
Class that stores donor records
Expand All @@ -25,6 +27,9 @@ class Donors:
donor did.
"""

_donors = js.Dict()
audit = js.List()

def __init__(self, donor=None):

self.__name__ = "Donors"
Expand Down Expand Up @@ -93,7 +98,7 @@ def match_donor(self, query_full_name):
return matches


class Donor:
class Donor(js.JsonSaveable):

"""
Class to store a donor record
Expand Down Expand Up @@ -171,6 +176,15 @@ class Donor:

"""

created = js.String()
audit = js.List()
_did = js.String()
_first_name = js.String()
_last_name = js.String()
_middle_name = js.String()
_suffix = js.String()
_donations = js.List()

def __init__(self,
did="",
created="",
Expand All @@ -189,7 +203,7 @@ def __init__(self,
if did == "":
did = str(uuid.uuid1())
# create a uuid for each record
self._did = did
self.did = did

# normally, no timestamp is passed in, so we create one
if created == "":
Expand Down Expand Up @@ -239,6 +253,12 @@ def did(self):
""" return the donor did """
return self._did

@did.setter
@audit_log
def did(self, value):
""" set the did """
self._did = value

@property
def donations(self):
""" print all donations """
Expand Down
14 changes: 13 additions & 1 deletion students/johnn/mailroom/mailroom/ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,14 @@
import sys
from mailroom import security
from mailroom.donors import Donors, Donor, save_donor_file, load_donor_file
import logging

# 2018-02-11T00:04:31.921864-06:00
log_level = logging.DEBUG
logging.basicConfig(filename='donor.log',
filemode='a',
format='%(asctime)s %(levelname)s %(module)s %(user)s %(message)s',
level=log_level)

def safe_input(prompt=">"):
""" Generic input routine. """
Expand All @@ -29,11 +36,13 @@ def print_lines(lines=2, dest=sys.stdout):

def user_login():
""" stub for user login """
security.user = input("Enter your username: ")
security.user = safe_input("Enter your username: ")
logging.debug("user logged in", extra={ 'user': security.user})


def user_logout():
""" stub for user logout """
logging.debug("user logged out", extra={ 'user': security.user})
security.user = None


Expand All @@ -58,6 +67,7 @@ def list_donors(donors, dest=sys.stdout):
donor.total_donations,
donor.number_donations,
donor.average_donations), file=dest)
logging.debug("listed donors", extra={ 'user': security.user})


def get_donation_amount(donor):
Expand Down Expand Up @@ -109,6 +119,8 @@ def create_thank_you(donor, hint="wonderful"):
letter += "Tux Humboldt\n"
letter += "Shark Loss Prevention Institue\n"

logging.debug("created thank you letter for {}".format(donor.full_name),
extra={ 'user': security.user})
return letter.format(donor.full_name, donor.last_name, hint)


Expand Down