Skip to content

Commit

Permalink
added generator cli option --user-module, fixed auto-register-package…
Browse files Browse the repository at this point in the history
… tests, made generator arguments keyword-only to prevent confusion
  • Loading branch information
moltob committed Sep 10, 2017
1 parent 4ed64f2 commit efc23ce
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 31 deletions.
10 changes: 8 additions & 2 deletions pyecoregen/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import pyecore.resources
from pyecoregen.ecore import EcoreGenerator


URL_PATTERN = re.compile('^http(s)?://.*')


Expand Down Expand Up @@ -36,6 +35,10 @@ def generate_from_cli(args):
help="Generate package auto-registration for the PyEcore 'global_registry'.",
action='store_true'
)
parser.add_argument(
'--user-module',
help="Dotted name of module with user-provided mixins to import from generated classes.",
)
parser.add_argument(
'--verbose',
'-v',
Expand All @@ -47,7 +50,10 @@ def generate_from_cli(args):

configure_logging(parsed_args)
model = load_model(parsed_args.ecore_model)
EcoreGenerator(parsed_args.auto_register_package).generate(model, parsed_args.out_folder)
EcoreGenerator(
auto_register_package=parsed_args.auto_register_package,
user_module=parsed_args.user_module
).generate(model, parsed_args.out_folder)


def configure_logging(parsed_args):
Expand Down
2 changes: 1 addition & 1 deletion pyecoregen/ecore.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class EcoreGenerator(multigen.jinja.JinjaGenerator):
'templates'
)

def __init__(self, auto_register_package=False, **kwargs):
def __init__(self, *, auto_register_package=False, **kwargs):
self.auto_register_package = auto_register_package
super().__init__(**kwargs)

Expand Down
42 changes: 15 additions & 27 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,37 +23,25 @@ def test__generate_from_cli(generator_mock, cwd_module_dir):


@mock.patch('pyecoregen.cli.EcoreGenerator')
def test__generate_from_cli_autoregistration(generator_mock, cwd_module_dir):
mock_generator = generator_mock()
mock_generator.generate = mock.MagicMock()

def test__generate_from_cli__auto_register_package(generator_mock, cwd_module_dir):
generate_from_cli(['-e', 'input/library.ecore', '-o', 'some/folder', '--auto-register-package'])

# look at arguments of generate call:
mock_generate = generator_mock().generate
model = mock_generator.generate.call_args[0][0]
path = mock_generator.generate.call_args[0][1]
auto_registration = mock_generator.auto_registration
assert isinstance(model, pyecore.ecore.EPackage)
assert model.name == 'library'
assert path == 'some/folder'
assert auto_registration
# look at arguments of generator instantiation:
auto_register_package = generator_mock.call_args[1]['auto_register_package']
assert auto_register_package is True # make sure we don't interpret mock attribute as `True`

@mock.patch('pyecoregen.cli.EcoreGenerator')
def test__generate_from_cli(generator_mock, cwd_module_dir):
mock_generator = generator_mock()
mock_generator.generate = mock.MagicMock()

generate_from_cli(['-e', 'input/library.ecore', '-o', 'some/folder'])

# look at arguments of generate call:
mock_generate = generator_mock().generate
model = mock_generator.generate.call_args[0][0]
path = mock_generator.generate.call_args[0][1]

assert isinstance(model, pyecore.ecore.EPackage)
assert model.name == 'library'
assert path == 'some/folder'
@mock.patch('pyecoregen.cli.EcoreGenerator')
def test__generate_from_cli__user_module(generator_mock, cwd_module_dir):
generate_from_cli([
'-e', 'input/library.ecore',
'-o', 'some/folder',
'--user-module', 'some.pkg.module'
])

# look at arguments of generator instantiation:
user_module = generator_mock.call_args[1]['user_module']
assert user_module == 'some.pkg.module'


testdata = [
Expand Down
2 changes: 1 addition & 1 deletion tests/test_templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@


def generate_meta_model(model, output_dir, auto_register_package=None):
generator = EcoreGenerator(auto_register_package)
generator = EcoreGenerator(auto_register_package=auto_register_package)
generator.generate(model, output_dir)
return importlib.import_module(model.name)

Expand Down

0 comments on commit efc23ce

Please sign in to comment.