margru / pybuilder-smart-copy-resources

PyBuilder plugin for copying additional resources
MIT License
0 stars 2 forks source link

Doesn't support ${name} and ${version} placeholder #8

Closed AlexeySanko closed 6 years ago

AlexeySanko commented 6 years ago
[INFO]  Copying resource ...
Traceback (most recent call last):
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/cli.py", line 413, in main
    environments=options.environments, tasks=arguments)
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/reactor.py", line 128, in build
    return self.build_execution_plan(tasks, execution_plan)
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/reactor.py", line 166, in build_execution_plan
    reactor=self)
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/execution.py", line 351, in execute_execution_plan
    summaries.append(self.execute_task(task, **keyword_arguments))
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/execution.py", line 298, in execute_task
    task.execute(self.logger, keyword_arguments)
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/execution.py", line 169, in execute
    executable.execute(argument_dict)
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/execution.py", line 100, in execute
    self.callable(*arguments)
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder_smart_copy_resources/__init__.py", line 72, in package
    destination = project.expand(destination)
  File "/home/alexeysanko/venv_ds_py_lib/lib/python2.7/site-packages/pybuilder/core.py", line 564, in expand
    raise MissingPropertyException(e)
MissingPropertyException: No such property: 'name'
AlexeySanko commented 6 years ago

Plugin uses method project.expand for placeholders. But this method works only with project.properties, which doesn't inlcude name and version (it's attributes). filter_resource uses next wrapper which could be used

class ProjectDictWrapper(object):

    def __init__(self, project, logger):
        self.project = project
        self.logger = logger

    def __getitem__(self, key):
        fallback_when_no_substitution_possible = "${%s}" % key
        if hasattr(self.project, key):
            return getattr(self.project, key)
        if self.project.has_property(key):
            return self.project.get_property(key)
        self.logger.warn(
            "Skipping impossible substitution for '{0}' - there is no matching project attribute or property.".format(key))
        return fallback_when_no_substitution_possible
margru commented 6 years ago

Merged in #9.