Ejemplo n.º 1
0
    def test_create_project(self):

        blueberrypy_config = {'author': 'Jimmy Wong',
                              'current_year': 2012,
                              'driver': 'pysqlite',
                              'path': self.tmpdir,
                              'email': '*****@*****.**',
                              'package': 'blueberrytest',
                              'project_name': 'blueberrytest',
                              'sqlalchemy_url': 'sqlite://',
                              'use_controller': True,
                              'use_jinja2': True,
                              'use_redis': True,
                              'use_rest_controller': True,
                              'use_sqlalchemy': True,
                              'use_webassets': True,
                              'version': '0.1'}

        create_project(blueberrypy_config)

        paths = ['',
                 '.cache',
                 'config',
                 'config/dev',
                 'config/dev/app.yml',
                 'config/dev/bundles.yml',
                 'config/dev/logging.yml',
                 'config/prod',
                 'config/prod/app.yml',
                 'config/prod/bundles.yml',
                 'config/prod/logging.yml',
                 'log',
                 'setup.py',
                 'src',
                 'src/blueberrytest',
                 'src/blueberrytest/__init__.py',
                 'src/blueberrytest/api.py',
                 'src/blueberrytest/controller.py',
                 'src/blueberrytest/model.py',
                 'src/blueberrytest/rest_controller.py',
                 'src/blueberrytest/templates',
                 'src/blueberrytest/templates/404.html',
                 'src/blueberrytest/templates/base.html',
                 'src/blueberrytest/templates/index.html',
                 'src/tests',
                 'src/tests/__init__.py',
                 'src/tests/helper.py',
                 'src/tests/test_api.py',
                 'src/tests/test_controller.py',
                 'src/tests/test_model.py',
                 'src/tests/test_rest_controller.py',
                 'static',
                 'static/css',
                 'static/css/screen.css',
                 'static/favicon.ico',
                 'static/img',
                 'static/js']

        for path in paths:
            self.assertTrue(os.path.exists(os.path.join(self.tmpdir, path)), "Path '%s' wasn't created" % path)
Ejemplo n.º 2
0
def create(**kwargs):
    """
    Create a project skeleton.

    usage: blueberrypy create [options]


    options:
      -h, --help            show this help message and exit
      -p PATH, --path PATH  the path to create the project. default is the current
                            directory
      -d, --dry-run         do not write skeleton. prints out the content instead

    """

    path = None
    if kwargs.get("path"):
        path = os.path.abspath(kwargs.get("path"))
        if not os.path.exists(path):
            os.mkdir(path)
            logger.info("Path not found, a directory '%s' has been created." % path)

    config = {}
    config["path"] = path or os.getcwdu()
    config["current_year"] = datetime.now().year

    valid_package_name = re.compile(r"^[a-z_]+$")
    valid_version_re = re.compile(r"^\d+.\d+(.\d+)*(a|b|c|rc\d+(.\d+)?)?(.post\d+)?(.dev\d+)?$")
    valid_email_re = re.compile(r"^.+@.+$")

    questions = (
        ("project_name", dict(prompt="Project name: ")),

        ("package", dict(prompt=lambda config: "Package name {project_name}: ".format(project_name=re.sub(r"\W+", '_', config.get("project_name").lower()) or "(PEP 8)"),
                         default=lambda config: re.sub(r"\W+", '_', config.get("project_name").lower()) or None,
                         required=True, matcher=valid_package_name.match)),

        ("version", dict(prompt="Version (PEP 386): ", required=True,
                         matcher=valid_version_re.match)),

        ("author", dict(prompt="Author name: ")),

        ("email", dict(prompt="Email: ", matcher=valid_email_re.match)),

        ("use_controller", dict(prompt="Use controllers backed by a templating engine? [Y/n] ",
                                type=bool, default=True)),

        ("use_rest_controller", dict(prompt="Use RESTful controllers? [y/N] ", type=bool,
                                     default=False)),

        ("use_jinja2", dict(prompt="Use Jinja2 templating engine? [Y/n] ", type=bool, default=True,
                            required="use_controller")),

        ("use_webassets", dict(prompt="Use webassets asset management framework? [Y/n] ", type=bool,
                               default=True, required="use_controller")),

        ("use_redis", dict(prompt="Use redis session? [y/N] ", type=bool, default=False)),

        ("use_sqlalchemy", dict(prompt="Use SQLAlchemy ORM? [Y/n] ", type=bool, default=True)),

        ("sqlalchemy_url", dict(prompt="SQLAlchemy database connection URL (sqlite://): ",
                                default="sqlite://",
                                required="use_sqlalchemy"))
    )

    for k, v in questions:
        config[k(config) if callable(k) else k] = get_answer(config=config, **v)

    create_project(config, dry_run=kwargs.get("dry_run"))

    footer = textwrap.dedent("""
    ===========================================================================
    Your project skeleton has been created under {path}.


    Subsystems chosen
    -----------------

    Routes (RESTful controllers): {use_rest_controller}
    Jinja2: {use_jinja2}
    webassets: {use_webassets}
    redis: {use_redis}
    SQLAlchemy: {use_sqlalchemy}


    You can now install your package for development with:

      $ pip install -e .

    You can also install all of the optional C-extension speedups with:

      $ pip install blueberrypy[speedups]

    You should also install the appropriate database driver if you have chosen
    to use SQLAlchemy.


    Note
    ----
    Recent version of `pip` disallows the installation of external and
    unverified packages by default. You can install `cdecimal` with:

      $ pip install --allow-external cdecimal


    For more information, the BlueberryPy documentation is available at
    http://blueberrypy.readthedocs.org.

    Happy coding!
    ===========================================================================
    """.format(**config))

    logger.info(footer)
Ejemplo n.º 3
0
def create(**kwargs):
    """
    Create a project skeleton.

    usage: blueberrypy create [options]


    options:
      -h, --help            show this help message and exit
      -p PATH, --path PATH  the path to create the project. default is the current
                            directory
      -d, --dry-run         do not write skeleton. prints out the content instead

    """

    path = None
    if kwargs.get("path"):
        path = os.path.abspath(kwargs.get("path"))
        if not os.path.exists(path):
            os.mkdir(path)
            logger.info("Path not found, a directory '%s' has been created." % path)

    config = {}
    config["path"] = path or os.getcwdu()
    config["current_year"] = datetime.now().year

    valid_package_name = re.compile(r"^[a-z_]+$")
    valid_version_re = re.compile(r"^\d+.\d+(.\d+)*(a|b|c|rc\d+(.\d+)?)?(.post\d+)?(.dev\d+)?$")
    valid_email_re = re.compile(r"^.+@.+$")

    questions = (
        ("project_name", dict(prompt="Project name: ")),

        ("package", dict(prompt=lambda config: "Package name {project_name}: ".format(project_name=re.sub(r"\W+", '_', config.get("project_name").lower()) or "(PEP 8)"),
                         default=lambda config: re.sub(r"\W+", '_', config.get("project_name").lower()) or None,
                         required=True, matcher=valid_package_name.match)),

        ("version", dict(prompt="Version (PEP 386): ", required=True,
                         matcher=valid_version_re.match)),

        ("author", dict(prompt="Author name: ")),

        ("email", dict(prompt="Email: ", matcher=valid_email_re.match)),

        ("use_controller", dict(prompt="Use controllers backed by a templating engine? [Y/n] ",
                                type=bool, default=True)),

        ("use_rest_controller", dict(prompt="Use RESTful controllers? [y/N] ", type=bool,
                                     default=False)),

        ("use_jinja2", dict(prompt="Use Jinja2 templating engine? [Y/n] ", type=bool, default=True,
                            required="use_controller")),

        ("use_webassets", dict(prompt="Use webassets asset management framework? [Y/n] ", type=bool,
                               default=True, required="use_controller")),

        ("use_redis", dict(prompt="Use redis session? [y/N] ", type=bool, default=False)),

        ("use_sqlalchemy", dict(prompt="Use SQLAlchemy ORM? [Y/n] ", type=bool, default=True)),

        ("sqlalchemy_url", dict(prompt="SQLAlchemy database connection URL (sqlite://): ",
                                default="sqlite://",
                                required="use_sqlalchemy"))
    )

    for k, v in questions:
        config[k(config) if callable(k) else k] = get_answer(config=config, **v)

    create_project(config, dry_run=kwargs.get("dry_run"))

    footer = textwrap.dedent("""
    ===========================================================================
    Your project skeleton has been created under {path}.


    Subsystems chosen
    -----------------

    Routes (RESTful controllers): {use_rest_controller}
    Jinja2: {use_jinja2}
    webassets: {use_webassets}
    redis: {use_redis}
    SQLAlchemy: {use_sqlalchemy}


    You can install your package for development with:

      $ pip install -e .

    In unrestricted environments, you may also install 'MarkupSafe' and
    'cdecimal' (only needed for py27) to speed up Jinja2 and SQLAlchemy's
    queries on Decimal fields respectively. You may also install 'hiredis' if
    you have opted for the Redis session storage. The following commands will
    install all of the supported C-extension speedups.

      $ pip install blueberrypy[speedups]

    You should also install the appropriate database driver if you have chosen
    to use SQLAlchemy.

    For more information, the BlueberryPy documentation is available at
    http://blueberrypy.readthedocs.org.

    Happy coding!
    ===========================================================================
    """.format(**config))

    logger.info(footer)