bitbake-hashserv 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #! /usr/bin/env python3
  2. #
  3. # Copyright (C) 2018 Garmin Ltd.
  4. #
  5. # SPDX-License-Identifier: GPL-2.0-only
  6. #
  7. import os
  8. import sys
  9. import logging
  10. import argparse
  11. import sqlite3
  12. import warnings
  13. warnings.simplefilter("default")
  14. sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib'))
  15. import hashserv
  16. VERSION = "1.0.0"
  17. DEFAULT_BIND = 'unix://./hashserve.sock'
  18. def main():
  19. parser = argparse.ArgumentParser(description='Hash Equivalence Reference Server. Version=%s' % VERSION,
  20. epilog='''The bind address is the path to a unix domain socket if it is
  21. prefixed with "unix://". Otherwise, it is an IP address
  22. and port in form ADDRESS:PORT. To bind to all addresses, leave
  23. the ADDRESS empty, e.g. "--bind :8686". To bind to a specific
  24. IPv6 address, enclose the address in "[]", e.g.
  25. "--bind [::1]:8686"'''
  26. )
  27. parser.add_argument('-b', '--bind', default=DEFAULT_BIND, help='Bind address (default "%(default)s")')
  28. parser.add_argument('-d', '--database', default='./hashserv.db', help='Database file (default "%(default)s")')
  29. parser.add_argument('-l', '--log', default='WARNING', help='Set logging level')
  30. parser.add_argument('-u', '--upstream', help='Upstream hashserv to pull hashes from')
  31. parser.add_argument('-r', '--read-only', action='store_true', help='Disallow write operations from clients')
  32. args = parser.parse_args()
  33. logger = logging.getLogger('hashserv')
  34. level = getattr(logging, args.log.upper(), None)
  35. if not isinstance(level, int):
  36. raise ValueError('Invalid log level: %s' % args.log)
  37. logger.setLevel(level)
  38. console = logging.StreamHandler()
  39. console.setLevel(level)
  40. logger.addHandler(console)
  41. server = hashserv.create_server(args.bind, args.database, upstream=args.upstream, read_only=args.read_only)
  42. server.serve_forever()
  43. return 0
  44. if __name__ == '__main__':
  45. try:
  46. ret = main()
  47. except Exception:
  48. ret = 1
  49. import traceback
  50. traceback.print_exc()
  51. sys.exit(ret)