gooderp18绿色标准版
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

85 rindas
3.2KB

  1. # Part of Odoo. See LICENSE file for full copyright and licensing details.
  2. import argparse
  3. import glob
  4. import itertools
  5. import os
  6. import sys
  7. from pathlib import Path
  8. import odoo
  9. from . import Command
  10. from .server import main
  11. from odoo.modules.module import get_module_root, MANIFEST_NAMES
  12. from odoo.service.db import _create_empty_database, DatabaseExists
  13. class Start(Command):
  14. """ Quickly start the odoo server with default options """
  15. def get_module_list(self, path):
  16. mods = itertools.chain.from_iterable(
  17. glob.glob(os.path.join(path, '*/%s' % mname))
  18. for mname in MANIFEST_NAMES
  19. )
  20. return [mod.split(os.path.sep)[-2] for mod in mods]
  21. def run(self, cmdargs):
  22. odoo.tools.config.parser.prog = f'{Path(sys.argv[0]).name} {self.name}'
  23. parser = argparse.ArgumentParser(
  24. prog=f'{Path(sys.argv[0]).name} {self.name}',
  25. description=self.__doc__.strip(),
  26. )
  27. parser.add_argument('--path', default=".",
  28. help="Directory where your project's modules are stored (will autodetect from current dir)")
  29. parser.add_argument("-d", "--database", dest="db_name", default=None,
  30. help="Specify the database name (default to project's directory name")
  31. args, unknown = parser.parse_known_args(args=cmdargs)
  32. # When in a virtualenv, by default use it's path rather than the cwd
  33. if args.path == '.' and os.environ.get('VIRTUAL_ENV'):
  34. args.path = os.environ.get('VIRTUAL_ENV')
  35. project_path = os.path.abspath(os.path.expanduser(os.path.expandvars(args.path)))
  36. module_root = get_module_root(project_path)
  37. db_name = None
  38. if module_root:
  39. # started in a module so we choose this module name for database
  40. db_name = project_path.split(os.path.sep)[-1]
  41. # go to the parent's directory of the module root
  42. project_path = os.path.abspath(os.path.join(project_path, os.pardir))
  43. # check if one of the subfolders has at least one module
  44. mods = self.get_module_list(project_path)
  45. if mods and '--addons-path' not in cmdargs:
  46. cmdargs.append('--addons-path=%s' % project_path)
  47. if not args.db_name:
  48. args.db_name = db_name or project_path.split(os.path.sep)[-1]
  49. cmdargs.extend(('-d', args.db_name))
  50. # TODO: forbid some database names ? eg template1, ...
  51. try:
  52. _create_empty_database(args.db_name)
  53. odoo.tools.config['init']['base'] = True
  54. except DatabaseExists as e:
  55. pass
  56. except Exception as e:
  57. die("Could not create database `%s`. (%s)" % (args.db_name, e))
  58. if '--db-filter' not in cmdargs:
  59. cmdargs.append('--db-filter=^%s$' % args.db_name)
  60. # Remove --path /-p options from the command arguments
  61. def to_remove(i, l):
  62. return l[i] == '-p' or l[i].startswith('--path') or \
  63. (i > 0 and l[i-1] in ['-p', '--path'])
  64. cmdargs = [v for i, v in enumerate(cmdargs)
  65. if not to_remove(i, cmdargs)]
  66. main(cmdargs)
  67. def die(message, code=1):
  68. print(message, file=sys.stderr)
  69. sys.exit(code)
上海开阖软件有限公司 沪ICP备12045867号-1