Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for adjustments #114

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
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
26 changes: 16 additions & 10 deletions printing/paper
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ from ocflib.misc.shell import green
from ocflib.misc.shell import red
from ocflib.misc.shell import yellow
from ocflib.misc.whoami import current_user
from ocflib.printing.quota import add_refund
from ocflib.printing.quota import add_adjustment
from ocflib.printing.quota import get_connection
from ocflib.printing.quota import get_quota
from ocflib.printing.quota import Refund
from ocflib.printing.quota import Payload


def staff_creds():
Expand Down Expand Up @@ -43,36 +43,37 @@ def view(args):
print(bold(red("Group accounts can't print. Sorry!")))


def refund(args):
refund = Refund(
def adjust(args):
payload = Payload(
user=args.user,
time=datetime.now(),
pages=args.pages,
action=args.command,
staffer=current_user(),
reason=args.reason,
)
prompt = bold('Refund {} pages to {}? [yN] '.format(refund.pages, refund.user))

stringtype = 'Refund' if payload.action == 'refund' else 'Forward'
prompt = bold('{} + {} pages to {}? [yN] '.format(stringtype, payload.pages, payload.user))
if input(prompt) not in {'y', 'yes'}:
print('Cancelled.')
return

try:
credentials = staff_creds()
except FileNotFoundError:
print(red('Could not find the file for staff credentials.'))
print(red('Are you running this on supernova?'))
return 1

with get_connection(**credentials) as c:
add_refund(c, refund)

add_adjustment(c, payload)
print('Added.')


def main(argv=None):
commands = {
'view': view,
'refund': refund,
'refund': adjust,
'forward': adjust,
}

parser = argparse.ArgumentParser(description='View and manipulate page quotas.')
Expand All @@ -87,6 +88,11 @@ def main(argv=None):
parser_refund.add_argument('--reason', '-r', required=True, type=str)
parser_refund.add_argument('user', type=str)

parser_forward = subparsers.add_parser('forward', help="allow a user to print above today's quota")
parser_forward.add_argument('--pages', '-p', required=True, type=int)
parser_forward.add_argument('--reason', '-r', required=True, type=str)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Forward probably in itself is the reason, I don't know if this needs to be a required field. What do you think?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is still fine, and it's a database constraint anyways

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Despite the reason being clear, I think this would be important to include due to the human aspect of it. A person who is issuing the forward request will need to think twice before actually increasing the daily quota for a particular user.

parser_forward.add_argument('user', type=str)

if len(argv or sys.argv[1:]) == 0:
args = parser.parse_args(['view'])
else:
Expand Down