Completed
Push — master ( 6fd567...f65269 )
by Daniel
90:27 queued 15s
created

GwRecipesBuilder   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 59
rs 10
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A activate() 0 10 1
A _recipe_list() 0 4 2
A __init__() 0 3 1
A deactivate() 0 2 1
A _recipe_build() 0 6 2
1
# -*- coding: utf-8 -*-
2
import os
3
from click import Argument
4
5
from groundwork.patterns import GwCommandsPattern, GwRecipesPattern
6
7
8
class GwRecipesBuilder(GwCommandsPattern, GwRecipesPattern):
9
    """
10
    Provides commands for listing and building recipes via command line interface.
11
12
    Provided commands:
13
14
     * recipe_list
15
     * recipe_build
16
17
    Provides also the recipe **gw_package**, which can be used to setup a groundwork related python package.
18
    Content of the package:
19
20
     * setup.py: Preconfigured and ready to use.
21
     * groundwork package structure: Directories for applications, patterns, plugins and recipes.
22
     * Simple, runnable example of a groundwork application and plugins.
23
     * usable test, supported by py.test and tox.
24
     * expandable documentation, supported by sphinx and the groundwork sphinx template.
25
     * .gitignore
26
27
28
    This code is hardly based on Cookiecutter's main.py file:
29
    https://github.com/audreyr/cookiecutter/blob/master/cookiecutter/main.py
30
    """
31
    def __init__(self, *args, **kwargs):
32
        self.name = self.__class__.__name__
33
        super().__init__(*args, **kwargs)
34
35
    def activate(self):
36
        self.commands.register("recipe_list", "Lists all recipes", self._recipe_list)
37
        self.commands.register("recipe_build", "Builds a given recipe", self._recipe_build,
38
                               params=[Argument(("recipe",), required=True)])
39
40
        self.recipes.register("gw_package",
41
                              os.path.abspath(os.path.join(os.path.dirname(__file__), "../recipes/gw_package")),
42
                              description="Groundwork basic package. Includes places for "
43
                                          "apps, plugins, patterns and recipes.",
44
                              final_words="Recipe Installation is done.\n\n"
45
                                          "For installation run: 'python setup.py develop' \n"
46
                                          "For documentation run: 'make html' inside doc folder "
47
                                          "(after installation!)\n\n"
48
                                          "For more information, please take a look into the README file "
49
                                          "to know how to go on.\n"
50
                                          "For help visit: https://groundwork.readthedocs.io\n\n"
51
                                          "Have fun with your groundwork package.")
52
53
    def deactivate(self):
54
        pass
55
56
    def _recipe_list(self):
57
        print("Recipes:")
58
        for key, recipe in self.app.recipes.get().items():
59
            print("  %s by plugin '%s' - %s" % (recipe.name, recipe.plugin.name, recipe.description))
60
61
    def _recipe_build(self, recipe):
62
        recipe_obj = self.app.recipes.get(recipe)
63
        if recipe_obj is None:
64
            print("Recipe %s not found." % recipe)
65
        else:
66
            recipe_obj.build()
67