Skip to content

Design_document

Martin Kojtal edited this page Dec 13, 2015 · 6 revisions

Pgen design document

** This is under construction **

If you want to contribute or use progen via its classes, this is the place to start.

Classes

Generator

This class is an abstraction on top of projects.

from project_generator.generate import Generator

# projects.yaml is a main record file
generator = Generator('projects.yaml')
# get a project named project_name
project = next(Generator(projects_yaml).generate('project_name'))

Project

The most important class is the project

# create a new project
project_settings = ProjectSettings()
project = Project('name', project_dict, project_settings)

Project_dict can be either yaml files or python dictionaries. If YAML files are passed, then they are parsed and project_dict are formed.

The project dictionaries are defined via ProjectTemplate classes. For a user, there's ProjectTemplate. To get a project template:

from project_generator.project import ProjectTemplate

# create project data
project_data = {'common': {}}
project_data['common'] = ProjectTemplate.get_project_template()

# we can now fill in our project details
project_data['common']['name'] = my_name
project_data['common']['sources'] = source_files

Settings

It contains the progen settings. It's required to be passed for main progen classes, as it defines the user settings.

from project_generator.settings import ProjectSettings

project_settings = ProjectSettings()

Tools

The main tool classes are Tool and Exporter, any tool class should inherit from these, and implement their methods. The Tool defines API for tools (toolchain, tool name). The Exporter defines API for generating projects.

from .tool import Tool, Exporter

class MyNewTool(Tool, Exporter):
    pass