__init__.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import logging
  2. import argparse
  3. import tomllib
  4. import signal
  5. import threading
  6. from concurrent import futures
  7. from time import sleep
  8. from sqlalchemy import create_engine
  9. from . import yuanhengsi, zhuangchunjiang
  10. logger = logging.getLogger(__name__)
  11. def main():
  12. parser = argparse.ArgumentParser(description="A rbac service(gRPC).")
  13. parser.add_argument('-c', '--config', default='config.toml')
  14. parser.add_argument('-y', '--yuanhengsi', help="元亨寺's data folder")
  15. parser.add_argument('-z', '--zhuangchunjiang', help="庄春江工作站's data folder")
  16. parser.add_argument('-d', '--debug',
  17. action='store_true', help='run on debug mode')
  18. parser.add_argument('-v', '--verbose',
  19. action='version', version='2026.5.8')
  20. args = parser.parse_args()
  21. logging.basicConfig(
  22. format='%(asctime)s %(levelname).1s %(message)s', level=logging.DEBUG if args.debug else logging.INFO)
  23. logger.debug("running on debug mode")
  24. logger.debug("load configuration from %s", args.config)
  25. with open(args.config, "rb") as file:
  26. config = tomllib.load(file)
  27. db = open_db(config['postgresql'], args.debug)
  28. if args.zhuangchunjiang is not None:
  29. zhuangchunjiang.launch(db, args.zhuangchunjiang)
  30. if args.yuanhengsi is not None:
  31. yuanhengsi.launch(db, args.yuanhengsi)
  32. logging.info('done.')
  33. # https://docs.sqlalchemy.org/en/20/dialects/postgresql.html#dialect-postgresql-psycopg-connect
  34. # https://docs.sqlalchemy.org/en/20/dialects/mysql.html#module-sqlalchemy.dialects.mysql.mariadbconnector
  35. # https://docs.sqlalchemy.org/en/20/dialects/sqlite.html#module-sqlalchemy.dialects.sqlite.pysqlite
  36. def open_db(config, debug):
  37. logger.debug("open postgresql://%s@%s:%d/%s",
  38. config['user'], config['host'], config['port'], config['db-name'])
  39. return create_engine(
  40. f"postgresql+psycopg://{config['user']}:{config['password']}@{config['host']}:{config['port']}/{config['db-name']}?sslmode=disable", echo=debug)