def render_file(self): if self.file_location: self.main_file = kf.File(f'{self.file_location}/{self.file_name}') else: self.main_file = kf.File( f'src/{self.project_name.replace("-","_")}/{self.file_name}') self.rendered_file = \ self.env.get_template( f'{self.name}-{self.file_name}.jinja2' ).render(**self.rendering_params) self.main_file.add_content(self.rendered_file) self.main_file.add_content('') # Newline at end of file self.file_renderer.add_file(self.main_file)
def render_ignorefile(self, ignore_file_name: str, **render_params: Any): self.file_renderer.output(f'Adding {ignore_file_name}...') self.ignore_file = kf.File(ignore_file_name) contents = self.env.get_template(f'{ignore_file_name}.jinja2').render( **render_params) self.ignore_file.add_content(contents) self.file_renderer.add_file(self.ignore_file)
def create( project_name: str, author: str, email: str, linter: klint.BaseLinter, type_checker: ktype.BaseTypeChecker, automation: kauto.BaseAutomation, test_framework: ktest.BaseTestFramework, project_framework: kproj.BaseProjectFramework, directories: rndr.DirectoryRenderer, files: rndr.FileRenderer, ): ''' Create a new python project with the specified options ''' readme_file = kf.File('README.md', f'# {project_name}') setup_script = kf.SetupScript(project_name, author, email, project_framework, linter, type_checker, test_framework) setup_config = kf.SetupConfig( project_framework, linter, type_checker, test_framework, ) manifest_file = kf.File('MANIFEST.in', 'graft src') makefile = kf.MakeFile( project_framework, linter, type_checker, test_framework, ) files.add_file(readme_file) files.add_file(setup_script) files.add_file(setup_config) files.add_file(makefile) files.add_file(manifest_file) project_framework.render_file() test_framework.render_file() automation.render_file() directories.create_all() files.write_all()
def __init__( self, project_name: str, project_framework: pf.BaseProjectFramework, file_renderer: rndr.FileRenderer, dir_renderer: rndr.DirectoryRenderer ): super().__init__(project_name, file_renderer, dir_renderer) self.project_framework = project_framework self.name = '' self.rendering_params = {'project_name': project_name} dir_renderer.add_directory(Path('tests')) file_renderer.add_file(kf.File('tests/__init__.py'))
def __init__( self, project_name: str, file_renderer: rndr.FileRenderer, dir_renderer: rndr.DirectoryRenderer ): self.file_name = 'main.py' self.test_file = '' package_dir = Path(f'src/{project_name.replace("-", "_")}') module_init = kf.File( package_dir / '__init__.py' ) dir_renderer.add_directories( Path('src'), package_dir ) file_renderer.add_file(module_init) self.project_type = '' super().__init__(project_name, file_renderer, dir_renderer)
def render_file(self): super().render_file() package_root = f'src/{self.project_name.replace("-","_")}' app_config = kf.File( f'{package_root}/config.py', self._get_template( 'config.py', ) ) self.dir_renderer.add_directories( Path(f'{package_root}/routes'), Path('scripts'), Path('docker'), ) init_route = kf.File( f'{package_root}/routes/__init__.py', self._get_template( 'routes.py', project_name=self.project_name, ) ) root_route = kf.File( f'{package_root}/routes/root.py', self._get_template( 'root.py', project_name=self.project_name, ) ) api_route = kf.File( f'{package_root}/routes/api.py', self._get_template( 'api.py', project_name=self.project_name, ) ) env_contents = self._get_template( '.env.example', ) env_file = kf.File( '.env', env_contents, ) env_example_file = kf.File( '.env.example', env_contents ) run_script = kf.File( 'scripts/run.sh', self._get_template( 'run.sh', project_name=self.project_name, ), executable=True, ) requirements_file = kf.File( 'requirements.txt', *self.packages ) dockerfile = kf.File( 'docker/Dockerfile', self._get_template( 'dockerfile', version=f'{sys.version_info.major}.{sys.version_info.minor}' ) ) compose_file = kf.File( 'docker/docker-compose.yaml', self._get_template( 'docker-compose.yaml', project_name=self.project_name, ) ) readme_file = kf.File( 'README.md', self._get_template( 'readme', project_name=self.project_name ) ) self.file_renderer.add_files( app_config, run_script, init_route, root_route, api_route, env_file, env_example_file, requirements_file, dockerfile, compose_file, readme_file )