Guest User

Untitled

a guest
Nov 21st, 2018
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import argparse
  3. import getpass
  4. import sys
  5. from contextlib import contextmanager
  6. from distutils.util import strtobool
  7.  
  8.  
  9. def yes_or_no(question, default='no'):
  10. """Ask question and wait for yes/no answer.
  11.  
  12. Args:
  13. question (str) - question to ask
  14. default (str) - default anser; 'yes' or 'no'
  15. Return:
  16. bool - whether user answered yes (true) or no (false)
  17. """
  18. if default is None:
  19. prompt = " [y/n] "
  20. elif default == "yes":
  21. prompt = " [Y/n] "
  22. elif default == "no":
  23. prompt = " [y/N] "
  24. else:
  25. raise ValueError("invalid default answer: '%s'" % default)
  26.  
  27. while True:
  28. sys.stdout.write(question + prompt)
  29. choice = input().lower()
  30. if default is not None and choice == '':
  31. return strtobool(default)
  32. try:
  33. return strtobool(choice)
  34. except ValueError:
  35. sys.stdout.write(
  36. "Please respond with 'yes' or 'no' " "(or 'y' or 'n').\n"
  37. )
  38.  
  39.  
  40. class NjuConnection:
  41. def __init__(self, username, password):
  42. pass
  43.  
  44. def login(self):
  45. pass
  46.  
  47. def logout(self):
  48. pass
  49.  
  50. def account_balance(self):
  51. return 12
  52.  
  53.  
  54. @contextmanager
  55. def nju_connection(username, password):
  56. """NJU connection manager
  57.  
  58. Args:
  59. username (str) - nju account username
  60. password (str) - nju account password
  61.  
  62. Returns:
  63. NjuConnection - logged connection instance
  64. """
  65.  
  66. conn = NjuConnection(username, password)
  67. try:
  68. conn.login()
  69. yield conn
  70. finally:
  71. conn.logout()
  72.  
  73.  
  74. def main():
  75. # define program name and description for --help
  76. prog = sys.argv[0]
  77. description = "NJU CLI manager"
  78.  
  79. # user argparse to create program arguments/options
  80. parser = argparse.ArgumentParser(prog=prog, description=description)
  81. parser.add_argument(
  82. "-c", "--clean", action='store_true',
  83. help="clean configuration",
  84. )
  85.  
  86. # parse command line
  87. options = parser.parse_args()
  88.  
  89. # you can easily check options
  90. if options.clean:
  91. print("Cleaning configuration.")
  92.  
  93. # use standard input for username
  94. username = input('Username: ')
  95.  
  96. # use getpass to hide typed password
  97. password = getpass.getpass('Password: ')
  98.  
  99. if yes_or_no('Save configuration?', default='yes'):
  100. print("... saving configuration")
  101.  
  102. if not yes_or_no('Continue?', default='yes'):
  103. sys.exit("Aborted by user.")
  104.  
  105. # thanks to context manager you don't have to care about login/logout
  106. # manually
  107. with nju_connection(username, password) as conn:
  108. print(f"Account balance: {conn.account_balance()} PLN")
  109.  
  110.  
  111. if __name__ == "__main__":
  112. # all interactive code is wrapped in 'main' functions so you can
  113. # import cli module to reuse code without side effects
  114. main()
Add Comment
Please, Sign In to add comment