def create_feature(feature_name, container_name=None, location=None):
    '''
    Create a feature <feature_name>.

    If <location> and <container_name> is specified, an error is raised.
    If <location> is given the feature is created at that location(relative from current working directory)
    If <container_name> is given the feature is created in the "features" directory of the given container.
    If neither <location> nor <container_name> is given, the feature is created in the current container - if
    no container is active an error is raised.
    '''

    if location and container_name:
        print 'ERROR: combining container_name and location options is not supported.'
        sys.exit(1)

    if not location and not container_name:
        container_name = os.environ['CONTAINER_NAME']

    if container_name:
        location = os.path.join(tasks.get_container_dir(container_name), 'features')
    else:
        location = os.path.abspath(os.path.normpath(location))

    from cookiecutter.generate import generate_files
    from django_productline.context import PRODUCT_CONTEXT
    template_dir = tasks.get_cookiecutter_template_dir('djpl_feature')

    feature_dir = os.path.join(location, feature_name)
    if os.path.isdir(feature_dir):
        print 'ERROR: %s already exists.' % feature_dir
        return

    generate_files(
        template_dir,
        context=dict(
            cookiecutter={
                'feature_name': feature_name,
            }
        ),
        output_dir=location
    )
    print '*** Created feature %s in %s' % (feature_name, location)
def create_feature(feature_name, container_name=None, location=None):
    '''
    Create a feature <feature_name>.

    If <location> and <container_name> is specified, an error is raised.
    If <location> is given the feature is created at that location(relative from current working directory)
    If <container_name> is given the feature is created in the "features" directory of the given container.
    If neither <location> nor <container_name> is given, the feature is created in the current container - if
    no container is active an error is raised.
    '''

    if location and container_name:
        print 'ERROR: combining container_name and location options is not supported.'
        sys.exit(1)

    if not location and not container_name:
        container_name = os.environ['CONTAINER_NAME']

    if container_name:
        location = os.path.join(tasks.get_container_dir(container_name), 'features')
    else:
        location = os.path.abspath(os.path.normpath(location))

    from cookiecutter.generate import generate_files
    from django_productline.context import PRODUCT_CONTEXT
    template_dir = tasks.get_cookiecutter_template_dir('djpl_feature')

    feature_dir = os.path.join(location, feature_name)
    if os.path.isdir(feature_dir):
        print 'ERROR: %s already exists.' % feature_dir
        return

    generate_files(
        template_dir,
        context=dict(
            cookiecutter={
                'feature_name': feature_name,
            }
        ),
        output_dir=location
    )
    print '*** Created feature %s in %s' % (feature_name, location)
def create_product(poi):
    '''
    Create a product <product_name> in <container_name>. The argument <poi> is in the form
    container_name:product_name
    '''
    container_name, product_name = get_location(poi)
    from cookiecutter.generate import generate_files
    import uuid
    template_dir = tasks.get_cookiecutter_template_dir('djpl_product')
    webapps = os.environ['APE_ROOT_DIR']
    container_dir = '%s/%s' % (webapps, container_name)

    if not os.path.isdir(container_dir):
        print 'ERROR: %s is not a valid container as it does not exist.' % container_dir
        return

    products_dir = container_dir + '/products'
    if not os.path.isdir(products_dir):
        print 'ERROR: %s must contain a "products" directory.' % container_dir
        return

    product_dir = products_dir + '/' + product_name
    if os.path.isdir(product_dir):
        print 'ERROR: the product "%s:%s" already exists. Choose another product name or delete this product and try again.' % (container_name, product_name)
        return

    generate_files(
        template_dir,
        context=dict(
            cookiecutter={
                'product_name': product_name,
                'product_dir': product_dir,
                'secret_key': str(uuid.uuid1())
            }
        ),
        output_dir=products_dir
    )
    print '*** Created product %s:%s' % (container_name, product_name)
def create_product(poi):
    '''
    Create a product <product_name> in <container_name>. The argument <poi> is in the form
    container_name:product_name
    '''
    container_name, product_name = get_location(poi)
    from cookiecutter.generate import generate_files
    import uuid
    template_dir = tasks.get_cookiecutter_template_dir('djpl_product')
    webapps = os.environ['APE_ROOT_DIR']
    container_dir = '%s/%s' % (webapps, container_name)

    if not os.path.isdir(container_dir):
        print 'ERROR: %s is not a valid container as it does not exist.' % container_dir
        return

    products_dir = container_dir + '/products'
    if not os.path.isdir(products_dir):
        print 'ERROR: %s must contain a "products" directory.' % container_dir
        return

    product_dir = products_dir + '/' + product_name
    if os.path.isdir(product_dir):
        print 'ERROR: the product "%s:%s" already exists. Choose another product name or delete this product and try again.' % (container_name, product_name)
        return

    generate_files(
        template_dir,
        context=dict(
            cookiecutter={
                'product_name': product_name,
                'product_dir': product_dir,
                'secret_key': str(uuid.uuid1())
            }
        ),
        output_dir=products_dir
    )
    print '*** Created product %s:%s' % (container_name, product_name)
def create_container(container_name):
    '''
    Create a container <container_name>.
    '''
    from cookiecutter.generate import generate_files
    template_dir = tasks.get_cookiecutter_template_dir('djpl_container')
    webapps = os.environ['APE_ROOT_DIR']
    container_dir = '%s/%s' % (webapps, container_name)

    if os.path.isdir(container_dir):
        print 'ERROR: %s already exists.' % container_dir
        return

    generate_files(
        template_dir,
        context=dict(
            cookiecutter={
                'container_name': container_name,
            }
        ),
        output_dir=webapps
    )
    print '*** Created container %s' % (container_name)
def create_container(container_name):
    '''
    Create a container <container_name>.
    '''
    from cookiecutter.generate import generate_files
    template_dir = tasks.get_cookiecutter_template_dir('djpl_container')
    webapps = os.environ['APE_ROOT_DIR']
    container_dir = '%s/%s' % (webapps, container_name)

    if os.path.isdir(container_dir):
        print 'ERROR: %s already exists.' % container_dir
        return

    generate_files(
        template_dir,
        context=dict(
            cookiecutter={
                'container_name': container_name,
            }
        ),
        output_dir=webapps
    )
    print '*** Created container %s' % (container_name)