Source code for project_composer.processors.purge
import shutil
from pathlib import Path
from ..importer import import_module
from .base import ComposerProcessor
from ..exceptions import ComposerPurgeError
[docs]class PurgeProcessor(ComposerProcessor):
"""
Processor to purge application repository from not enabled application.
This processor requires the repository to be set and valid.
"""
[docs] def export(self):
"""
Export module directory paths that should be purged from repository.
Returns:
list: A list of Path objects.
"""
try:
repository = import_module(self.composer.manifest.repository)
except ModuleNotFoundError:
msg = "{klass} is unable to find application repository module from: {path}"
raise ComposerPurgeError(msg.format(
klass=self.__class__.__name__,
path=self.composer.manifest.repository,
))
repository_path = Path(repository.__file__).parent
# List module directories from repository and filter out the ones with a name
# starting with "_"
appdirs = [
child
for child in repository_path.iterdir()
if (child.is_dir() and not child.name.startswith("_"))
]
# Filter out the application module directories that are enabled from manifest
return [
item
for item in appdirs
if item.name not in [a.name for a in self.composer.apps]
]
[docs] def commit(self):
"""
Commit repository purge.
"""
to_remove = self.export()
for path in to_remove:
msg = "{klass} is removing application: {path}".format(
klass=self.__class__.__name__,
path=path,
)
self.composer.log.info(msg)
shutil.rmtree(path)
return to_remove