Source code for skelpy.makers.package

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""This module defines :class:`PackageMaker` class"""

from __future__ import absolute_import, print_function

import os
import string

from . import settings
from .base import BaseMaker


[docs]class PackageMaker(BaseMaker): """*Maker* class to create the package directory and main driver file for the package The name of the package directory is the same as the project name. However, the structure of package directory differs depending on the ``--format`` option. *skelpy* provides two kinds of package format: "basic" and "src". The directory trees below show the differences of the two formats :: basic format(default) src format my_project/ my_project/ └── my_project/ └── src/    ├── __init__.py    └── my_project/    └── main.py    ├── __init__.py └── main.py Args: projectDir (str): absolute path of project's root directory projectName (str): project name format (str): type of package directory, i.e., basic or src merge (bool): whether to overlap package directory if the directory already exits force (bool): whether to overwrite if the file with the same name already exists kwargs : extra keyword arguments """ def __init__(self, projectDir, projectName, format, merge, force, **kwargs): self.projectDir = projectDir self.projectName = projectName self.format = format self.merge = merge self.force = force if format == 'basic': self.packageDir = os.path.join(projectDir, projectName) else: self.packageDir = os.path.join(projectDir, 'src', projectName) self._update_settings() def _update_settings(self): """update :attr:`maker.settings` dictionary""" info = { 'packageDir': self.packageDir, } settings.update(info) def _create_package_dir(self): """create package directory structure""" recursive = True if self.format == 'src' else False return self.create_dir(self.packageDir, recursive=recursive) def _write_init(self): """create __init__.py in the package directory""" content = ('# -*- coding: utf-8 -*-' '\n' '\n' "__version__ = '${version}'" '\n') intFile = os.path.join(self.packageDir, '__init__.py') return self.write_file(string.Template(content), intFile)
[docs] def generate(self): """Worker method of :class:`PackageMaker`""" if not self._create_package_dir(): return False self._write_init() self.write_file('main', os.path.join(self.packageDir, 'main.py')) return True