cli.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. """Console script for banana."""
  2. import argparse
  3. import logging
  4. import random
  5. import sys
  6. import banana
  7. def get_codec(args):
  8. if args.banana:
  9. return banana.BananaCodec()
  10. if args.ananas:
  11. return banana.AnanasCodec()
  12. if args.ribes:
  13. return banana.RibesCodec()
  14. if args.avocado:
  15. return banana.AvocadoCodec()
  16. kwargs = {}
  17. if args.dictionary:
  18. kwargs["dictionary"] = args.dictionary
  19. if args.dictstart:
  20. kwargs["dictstart"] = args.dictstart
  21. if args.shiftend:
  22. kwargs["shiftend"] = args.shiftend
  23. return banana.Codec(**kwargs)
  24. def main_encode(args):
  25. print(get_codec(args).encode(args.num))
  26. def main_decode(args):
  27. print(get_codec(args).decode(args.word))
  28. def main_check(args):
  29. if get_codec(args).is_valid(args.word):
  30. if not args.quiet:
  31. print("yes")
  32. sys.exit(0)
  33. else:
  34. if not args.quiet:
  35. print("no")
  36. sys.exit(1)
  37. def main_random(args):
  38. codec = get_codec(args)
  39. kwargs = dict(minlength=args.minlength)
  40. if args.seed:
  41. kwargs["prng"] = random.Random(args.seed)
  42. print(codec.random(**kwargs))
  43. def colon_separated_list(s):
  44. return s.split(":")
  45. def main():
  46. parser = argparse.ArgumentParser(description="Convert dec number to banana")
  47. parser.add_argument(
  48. "--log-level", choices=["DEBUG", "INFO", "WARN", "ERROR"], default="WARN"
  49. )
  50. parser.add_argument("--ananas", action="store_true")
  51. parser.add_argument("--avocado", action="store_true")
  52. parser.add_argument("--banana", action="store_true")
  53. parser.add_argument("--ribes", action="store_true")
  54. parser.add_argument(
  55. "--dictionary",
  56. help="Set dictionary in colon-separated list",
  57. type=colon_separated_list,
  58. )
  59. parser.add_argument(
  60. "--dictstart", help="Set starting dictionary", type=int, default=0
  61. )
  62. parser.add_argument(
  63. "--shiftend", help="Set shift for ending dictionary", type=int, default=0
  64. )
  65. sub = parser.add_subparsers()
  66. encode = sub.add_parser("encode", help="Convert numbers to words")
  67. encode.add_argument("num", type=int)
  68. encode.set_defaults(func=main_encode)
  69. decode = sub.add_parser("decode", help="Convert words to numbers")
  70. decode.add_argument("word")
  71. decode.set_defaults(func=main_decode)
  72. check = sub.add_parser("check", help="Convert words to numbers")
  73. check.add_argument("word")
  74. check.add_argument("--quiet", "-q", action="store_true")
  75. check.set_defaults(func=main_check)
  76. rand = sub.add_parser("random", help="Generate random banana")
  77. rand.add_argument("--minlength", help="Set minimum length", type=int, default=6)
  78. rand.add_argument("--seed", type=int, default=None)
  79. rand.set_defaults(func=main_random)
  80. args = parser.parse_args()
  81. if not hasattr(args, "func"):
  82. print("You need to select one subcommand. \nUse --help", file=sys.stderr)
  83. # parser.print_help()
  84. sys.exit(1)
  85. logging.basicConfig(level=args.log_level)
  86. args.func(args)
  87. if __name__ == "__main__":
  88. # pragma: no cover
  89. main()