_cli.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import argparse
  2. import os
  3. import pathlib
  4. import sys
  5. import yaml
  6. import tooncher
  7. if sys.platform == "darwin":
  8. _TOONTOWN_ENGINE_DEFAULT_PATH = os.path.join(
  9. os.path.expanduser("~"),
  10. "Library",
  11. "Application Support",
  12. "Toontown Rewritten",
  13. "Toontown Rewritten",
  14. )
  15. else:
  16. _TOONTOWN_ENGINE_DEFAULT_PATH = None
  17. def run(
  18. username,
  19. config_path,
  20. engine_path=None,
  21. validate_ssl_certs=True,
  22. cpu_limit_percent=None,
  23. ):
  24. if os.path.exists(config_path):
  25. with open(config_path) as config_file:
  26. config = yaml.safe_load(config_file.read())
  27. else:
  28. config = {}
  29. if engine_path is None:
  30. if "engine_path" in config:
  31. engine_path = config["engine_path"]
  32. else:
  33. raise Exception("missing path to toontown engine")
  34. accounts = config["accounts"] if "accounts" in config else []
  35. for account in accounts:
  36. if account["username"] == username:
  37. tooncher.launch(
  38. engine_path=pathlib.Path(engine_path),
  39. username=account["username"],
  40. password=account["password"],
  41. validate_ssl_certs=validate_ssl_certs,
  42. cpu_limit_percent=cpu_limit_percent,
  43. )
  44. def _init_argparser():
  45. argparser = argparse.ArgumentParser(description=None)
  46. argparser.add_argument("username")
  47. argparser.add_argument(
  48. "--config",
  49. "-c",
  50. metavar="path",
  51. dest="config_path",
  52. help="path to config file (default: %(default)s)",
  53. default=os.path.join(os.path.expanduser("~"), ".tooncher"),
  54. )
  55. argparser.add_argument(
  56. "--engine-path",
  57. "-e",
  58. metavar="path",
  59. dest="engine_path",
  60. default=_TOONTOWN_ENGINE_DEFAULT_PATH,
  61. help="\n".join(
  62. [
  63. "path to toontown engine.",
  64. "this overrides the one specified in config file",
  65. "(default: %(default)s)",
  66. ]
  67. ),
  68. )
  69. argparser.add_argument(
  70. "--no-ssl-cert-validation",
  71. "-k",
  72. dest="validate_ssl_certs",
  73. help="do not validate ssl certificates",
  74. action="store_false",
  75. )
  76. argparser.add_argument(
  77. "--cpu-limit",
  78. dest="cpu_limit_percent",
  79. type=int,
  80. default=None,
  81. help="maximally allowed cpu usage in percent"
  82. + " (requires cpulimit command, default: %(default)s)",
  83. )
  84. return argparser
  85. def main() -> None:
  86. argparser = _init_argparser()
  87. args = argparser.parse_args()
  88. run(**vars(args))