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 1 commit
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
33 changes: 21 additions & 12 deletions printing/paper
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ 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():
"""Return dictionary of staff creds, if we can read them."""
return json.load(open('/etc/ocfprinting.json'))
return json.load(open('/etc/ocfprinting-dev.json'))
Copy link
Member

Choose a reason for hiding this comment

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

fix this for prod

Copy link
Author

Choose a reason for hiding this comment

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

good catch



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


def refund(args):
refund = Refund(
def adjust(args, type):
payload = Payload(
user=args.user,
time=datetime.now(),
pages=args.pages,
action=type,
Copy link
Member

Choose a reason for hiding this comment

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

You can just leave refund as a method with 1 argument, but use args.command for the action parameter instead of adding parameter type (This is probably what @dkess says and in this case my comment can serve as a clarification).

staffer=current_user(),
reason=args.reason,
)
prompt = bold('Refund {} pages to {}? [yN] '.format(refund.pages, refund.user))

stringtype = 'Refund' if type == 'refund' else 'Forward'
prompt = bold(stringtype + ' {} pages to {}? [yN] '.format(payload.pages, payload.user))
Copy link
Member

Choose a reason for hiding this comment

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

If we're already using format here, just use it consistently.

Suggested change
prompt = bold(stringtype + ' {} pages to {}? [yN] '.format(payload.pages, payload.user))
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 All @@ -96,7 +102,10 @@ def main(argv=None):
print(bold(red("The user {} doesn't exist.".format(args.user))))
return 1

return commands[args.command](args)
if args.command == 'refund' or args.command == 'forward':
Copy link
Member

Choose a reason for hiding this comment

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

Instead of an if statement here, which makes the subcommand logic harder to understand, you should put the same if statement in the adjust command (which has access to args and therefore args.command).

return commands[args.command](args,args.command)
else:
return commands[args.command](args)


if __name__ == '__main__':
Expand Down