예제 #1
0
class UpgradeStep(PloneSubTemplate):
    """
    An upgrade step skeleton

    TODO: make this local command available just if exists a generic profile.
    Don't know if it is necessary

    Some validators for source and destination are needed?
    
    """
    _template_dir = 'templates/plone/upgradestep'
    summary = "An upgrade steps skeleton"

    vars = [
        var('source', 'Source', default="*"),
        var('destination', 'Destination', default=""),
    ]

    def pre(self, command, output_dir, vars):
        """
        you can use package_namespace, package_namespace2, package
        and package_dotted_name of the parent package here. you get them
        for free in the vars argument
        """
        vars['normalized_destination'] = vars['destination'].replace('.', '_')
예제 #2
0
class DexterityBehavior(DexteritySubTemplate):
    """
    A Content Type skeleton
    """

    _template_dir = 'templates/dexterity/behavior'
    summary = "A behavior skeleton"

    vars = [
        var('behavior_name', 'Behavior name ', default='Example Behavior'),
        var('behavior_description',
            'Behavior description ',
            default='Description of the Example behavior'),
    ]

    def pre(self, command, output_dir, vars):

        vars['behavior_classname'] = vars['behavior_name'].replace(" ", "")
        vars['behavior_interfacename'] = 'I' + vars['behavior_classname']
        vars['behavior_filename'] = vars['behavior_classname'].lower()

        vars['behavior_short_dottedadapter'] = '.' + vars[
            'behavior_filename'] + '.' + vars['behavior_classname']
        vars['behavior_short_dottedinterface'] = '.' + vars[
            'behavior_filename'] + '.' + vars['behavior_interfacename']
예제 #3
0
class ContentType(ArchetypeSubTemplate):
    """
    A Content Type skeleton
    """

    _template_dir = 'templates/archetype/contenttype'
    summary = "A content type skeleton"

    vars = [
        var('contenttype_name', 'Content type name ', default='Example Type'),
        var('contenttype_description',
            'Content type description ',
            default='Description of the Example Type'),
        var('folderish',
            'True/False: Content type is Folderish ',
            default=False),
        var('global_allow', 'True/False: Globally addable ', default=True),
        var('allow_discussion', 'True/False: Allow discussion ',
            default=False),
    ]

    def pre(self, command, output_dir, vars):
        vars['contenttype_classname'] =\
            vars['contenttype_name'].replace(" ", "")
        vars['schema_name'] =\
            vars['contenttype_classname'] + "Schema"
        vars['content_class_filename'] =\
            vars['contenttype_classname'].lower()
        vars['types_xml_filename'] =\
            vars['contenttype_name'].replace(" ", "_")
        vars['interface_name'] =\
            "I" + vars['contenttype_name'].replace(" ", "")
        vars['add_permission_name'] =\
            vars['package_dotted_name'] + ': Add ' + vars['contenttype_name']
예제 #4
0
class DexterityContent(SubTemplate):
    """
    Skeleton to add content type
    """

    _template_dir = 'templates/dexterity/content'
    summary = 'A content type skeleton'

    vars = [
        var('contenttype_name', 'Content type name ', default='Example Type'),
        var('contenttype_description', 'Content type description ',
            default=''),
        var('folderish',
            'True/False: Content type is Folderish ',
            default=False),
        var('global_allow', 'True/False: Globally addable ', default=True),
        var('allow_discussion', 'True/False: Allow discussion ',
            default=False),
    ]

    def pre(self, command, output_dir, vars):
        vars['contenttype_classname'] = vars['contenttype_name'].replace(
            " ", "")
        vars['contenttype_dottedname'] = vars[
            'package_dotted_name'] + '.' + vars['contenttype_classname'].lower(
            )
        vars['schema_name'] = vars['contenttype_classname'] + "Schema"
        vars['content_class_filename'] = vars['contenttype_name'].replace(
            " ", "_").lower()
        vars['types_xml_filename'] = vars['contenttype_dottedname']
        vars['interface_name'] = "I" + vars['contenttype_classname']
        vars['add_permission_name'] = vars[
            'package_dotted_name'] + ': Add ' + vars['contenttype_name']
예제 #5
0
class Portlet(PloneSubTemplate):
    """
    A Plone portlet skeleton
    """
    _template_dir = 'templates/plone/portlet'
    summary = "A Plone Portlet"

    vars = [
        var('portlet_name',
            'Portlet name (human readable)',
            default="Example portlet"),
        var('portlet_type_name',
            'Portlet type name (should not contain spaces)',
            default="ExamplePortlet"),
        var('description', 'Portlet description', default=""),
    ]

    def pre(self, command, output_dir, vars):
        """
        you can use package_namespace, package_namespace2, package
        and package_dotted_name of the parent package here. you get them
        for free in the vars argument
        """
        vars['portlet_filename'] = vars['portlet_type_name'].lower()

        vars['dotted_name'] = "%s.portlets" % vars['package_dotted_name']
예제 #6
0
 def setUp(self):
     self.var = var('name', 'description')
     self.svar = var('name',
                     'description',
                     structures={
                         'False': 'foo',
                         'True': 'bar'
                     })
예제 #7
0
class Viewlet(SubTemplate):
    _template_dir = 'templates/browser/viewlet'
    summary = 'Adds an a Viewlet skeleton'

    vars = [
        var('viewlet_name', 'Viewlet name'),
        var('viewlet_manager', 'Viewlet manager', default='IBelowContentTitle'),
    ]

    def pre(self, command, output_dir, vars):
        vars['viewlet_filename'] = vars['viewlet_name'].replace(" ", "_").lower()
        vars['viewlet_classname'] = vars['viewlet_name'].replace(' ', '')
        vars['package_dashed_name'] = vars['package_dotted_name'].replace('.', '-')
예제 #8
0
class UpgradeProfile(SubTemplate):
    """
    Adds an upgrade profile and handler 
    """

    _template_dir = 'templates/genericsetup/upgrade_profile'
    summary = 'Adds an upgrade profile and handler skeleton'

    vars = [
        var('upgrade_from_version',
            'Profile version to upgrade from',
            default='*'),
        var('upgrade_to_version', 'Profile version to upgrade to'),
    ]
예제 #9
0
class PortletSubTemplate(SubTemplate):

    vars = [
        var('portlet_name', 'Portlet name', default='Example Portlet'),
        var('portlet_description', 'Portlet description')
    ]

    def pre(self, command, output_dir, vars):
        super(PortletSubTemplate, self).pre(command, output_dir, vars)
        vars['portlet_classname'] = vars['portlet_name'].replace(" ", "")
        vars['portlet_interfacename'] = 'I' + vars['portlet_classname']
        vars['portlet_filename'] = vars['portlet_classname'].lower()
        vars['portlet_id'] = '%s.portlet.%s' % (vars['package_dotted_name'],
                                                vars['portlet_classname'])
예제 #10
0
class View(SubTemplate):
    _template_dir = 'templates/browser/view'
    summary = 'Adds a simple browserview'

    vars = [var('view_name', 'View name')]

    def pre(self, command, output_dir, vars):
        vars['view_filename'] = vars['view_name'].replace(" ", "").lower()
        vars['view_classname'] = vars['view_name'].replace(' ', '')
예제 #11
0
class BrowserLayer(PloneSubTemplate):
    """
    A browserlayer skeleton
    """
    _template_dir = 'templates/plone/browserlayer'
    summary = "A Plone browserlayer"

    vars = [
        var('interface_name',
            'Interface name for the browserlayer',
            default="IMyPackageBrowserLayer"),
        var('layer_name', "Browser layer name", default='MyPackage'),
    ]

    def check_vars(self, vars, cmd):
        """
        Overloading check_vars to print welcome message and provide sensitive default values
        """

        print "A BrowserLayer is generally used in packages to be installed in a Plone Site."
        print "If you didn't choose Register Profile option when creating this package"
        print "you will need to add a <genericsetup:registerProfile /> directive in"
        print "the main configure.zcml.\n"
        package_dotted_name = [vars['namespace_package']]
        if 'namespace_package2' in vars:
            package_dotted_name.append(vars['namespace_package2'])
        package_dotted_name.append(vars['package'])

        layer_name = ''.join([x.capitalize() for x in package_dotted_name])
        self.vars[1].default = layer_name
        self.vars[0].default = 'I%sLayer' % (layer_name)

        return super(BrowserLayer, self).check_vars(vars, cmd)

    def pre(self, command, output_dir, vars):
        """
        you can use package_namespace, package_namespace2, package
        and package_dotted_name of the parent package here. you get them
        for free in the vars argument
        """
        vars['interface_filename'] = vars['layer_name'].lower() + 'layer'
예제 #12
0
class Vocabulary(SubTemplate):
    _template_dir = 'templates/components/vocabulary'
    summary = 'Adds a VocabularyFactory skeleton'

    vars = [
        var('vocabulary_name', 'Vocabulary name'),
    ]

    def pre(self, command, output_dir, vars):
        vars['vocabulary_filename'] = vars['vocabulary_name'].replace(
            " ", "_").lower()
        vars['vocabulary_classname'] = vars['vocabulary_name'].replace(' ', '')
예제 #13
0
class NonConfigurablePortlet(PortletSubTemplate):
    _template_dir = 'templates/portlet/nonconfigurable'
    summary = 'Adds a nonconfigurable portlet skeleton'

    vars = copy.deepcopy(PortletSubTemplate.vars)
    vars.append(
        var(
            'portlet_contenttypes',
            'Content types to automatically assign to (comma separated list)',
        ))
    vars.append(
        var('portlet_assignmentcolumn',
            'Column of contenttype to automatically assign this portlet to',
            default='plone.rightcolumn'))

    def pre(self, command, output_dir, vars):
        super(NonConfigurablePortlet, self).pre(command, output_dir, vars)
        vars['portlet_contenttype_list'] = []
        for i in vars['portlet_contenttypes'].strip().split(','):
            if i:
                vars['portlet_contenttype_list'].append(i)
예제 #14
0
class SchemaExtender(SubTemplate):

    _template_dir = 'templates/archetypes/schemaextender'
    summary = 'Adds an archetype schemaextender skeleton'

    vars = [
        var('schemaextender_name',
            'SchemaExtender name',
            default='Example Extender'),
    ]

    def pre(self, command, output_dir, vars):
        vars['schemaextender_class_filename'] = vars[
            'schemaextender_name'].replace(" ", "_").lower()
        vars['schemaextender_classname'] = vars['schemaextender_name'].replace(
            " ", "")
예제 #15
0
class View(PloneSubTemplate):
    """
    A browser view skeleton
    """
    _template_dir = 'templates/plone/view'
    summary = "A browser view skeleton"

    vars = [
        var('view_name', 'Browser view name', default="Example"),
    ]

    def pre(self, command, output_dir, vars):
        """
        you can use package_namespace, package_namespace2, package
        and package_dotted_name of the parent package here. you get them
        for free in the vars argument
        """
        vars['view_filename'] = vars['view_name'].lower().replace(' ', '')
        vars['view_classname'] = vars['view_name'].replace(' ', '')
예제 #16
0
 def setUp(self):
     """ set up some basics for the coming tests
     """
     self.vars = [
         var('basic_var', 'This is a basic variable',
             title="Basic Title", default="foo",
             modes=(EXPERT, EASY)),
         BooleanVar('bool_var', 'This is a boolean variable',
                    title="Boolean Title", default=False, page='Main',
                    modes=(EASY)),
         StringVar('str_var', 'This is a string variable',
                   title="String Title", default="string", page='Carl',
                   modes=(EXPERT)),
         TextVar('txt_var', 'This is a text variable', page='Martin',
                 title="Text Title", default="text",
                 modes=()),
         DottedVar('dot_var', 'This is a dotted variable',
                   title="Dotted Title", default="dotted.variable")]
     self.template = BaseTemplate('my_name')
     command = CreateDistroCommand()
     command.parse_args(['-t', 'nested_namespace'])
     self.command = command
예제 #17
0
 def setUp(self):
     """ set up some basics for the coming tests
     """
     self.vars = [
         var('basic_var', 'This is a basic variable',
             title="Basic Title", default="foo",
             modes=(EXPERT, EASY)),
         BooleanVar('bool_var', 'This is a boolean variable',
                    title="Boolean Title", default=False, page='Main',
                    modes=(EASY)),
         StringVar('str_var', 'This is a string variable',
                   title="String Title", default="string", page='Carl',
                   modes=(EXPERT)),
         TextVar('txt_var', 'This is a text variable', page='Martin',
                 title="Text Title", default="text",
                 modes=()),
         DottedVar('dot_var', 'This is a dotted variable',
                   title="Dotted Title", default="dotted.variable")]
     self.template = BaseTemplate('my_name')
     create = get_commands()['create'].load()
     command = create('create')
     command.parse_args(['-t', 'nested_namespace'])
     self.command = command
예제 #18
0
파일: test_vars.py 프로젝트: Vinsurya/Plone
 def setUp(self):
     self.var = var('name', 'description')
     self.svar = var('name', 'description',
                     structures={'False': 'foo', 'True': 'bar'})
예제 #19
0
class ATSchemaField(ArchetypeSubTemplate):
    """
    A handy AT schema builder
    """

    _template_dir = 'templates/archetype/atschema'
    summary = "A handy AT schema builder"
    marker_name = "Your Archetypes field definitions here ..."

    # fieldtypes-map to (widget, validator)
    fieldtypes = {
        'boolean': ('boolean', None),
        'computed': ('computed', None),
        'cmfobject': ('file', None),
        'datetime': ('calendar', 'isValidDate'),
        'file': ('file', 'isNonEmptyFile'),
        'fixedpoint': ('decimal', 'isDecimal'),
        'float': ('decimal', 'isDecimal'),
        'image': ('image', 'isNonEmptyFile'),
        'integer': ('integer', 'isInt'),
        'lines': ('lines', None),
        'reference': ('reference', None),
        'string': ('string', None),
        'text': ('textarea', None),
    }

    vars = [
        var('content_class_filename',
            'What is the module (file)name of your content class?',
            default='exampletype'),
        var('field_name',
            'What would you like to name this field?',
            default='newfield'),
        var('field_type',
            'What kind of field should I make for you?\nSome examples: [' +
            ','.join(fieldtypes.keys()) + ']\n',
            default='string'),
        var('widget_type',
            'What kind of widget do you want to use (example: Password)?',
            default='default'),
        var('field_label',
            'What should be the label of this field (title)?',
            default='New Field'),
        var('field_desc',
            'What should be the description of this field (help text)?',
            default='Field description'),
        var('required', 'Is this field required?', default='False'),
        var('default',
            "If you'd like a default type it here, otherwise leave it blank",
            default=''),
        var('validator',
            "Enter a validator (isEmail), or None, or get a default validator for your specified field type.",
            default='use default validator'),
    ]

    def check_vars(self, *args, **kwargs):
        """
        Overloading check_vars to print welcome message
        """

        print "Welcome to the ATSchema Builder. Field names/widgets can be specified in lowercase or upper case."
        print "NOTE: No need to add 'widget' or 'field' to the names. atschema does the work for you!"
        print "See "
        print "    http://plone.org/documentation/manual/developer-manual/archetypes/fields/fields-reference/"
        print "and "
        print "    http://plone.org/documentation/manual/developer-manual/archetypes/fields/widgets-reference/"
        print "for field and widget details"

        return super(ATSchemaField, self).check_vars(*args, **kwargs)

    def run(self, command, output_dir, vars):
        """
        By-passing the base run so I can do multiple inserts
        with different marker names
        """

        (vars['namespace_package'], vars['namespace_package2'],
         vars['package']) = command.get_parent_namespace_packages()

        if vars['namespace_package2']:
            vars['package_dotted_name'] = "%s.%s.%s" % \
                (vars['namespace_package'],
                vars['namespace_package2'],
                vars['package'])
        else:
            vars['package_dotted_name'] = "%s.%s" % \
                (vars['namespace_package'],
                 vars['package'])

        vars['a_validator'] = ''
        if vars['validator'] == 'use default validator':
            ## take default Validator...
            val = ATSchemaField.fieldtypes[vars['field_type'].lower()][1]
            if val is not None:
                vars['a_validator'] = """'%s'""" % val
        elif vars['validator'] != 'None':  ## user providing 'aValidator'
            vars['a_validator'] = """'%s'""" % vars['validator']

        self.pre(command, output_dir, vars)

        atschema_insert_template = open(
            os.path.join(self.template_dir(),
                         'content/+content_class_filename+.py_insert')).read()
        content_messagefactory_insert_template = open(
            os.path.join(self.template_dir(),
                         'content/messagefactory_insert.txt_insert')).read()

        # insert_into_file really wants the inserted text to end with a newline
        atschema_insert = str(cheetah_template(atschema_insert_template,
                                               vars)) + "\n"
        content_messagefactory_insert = str(
            cheetah_template(content_messagefactory_insert_template,
                             vars)) + "\n"

        # self.write_files(command, output_dir, vars)
        command.insert_into_file(
            os.path.join(command.dest_dir(), 'content',
                         '%s.py' % (vars['content_class_filename'])),
            self.marker_name, atschema_insert)
        command.insert_into_file(
            os.path.join(command.dest_dir(), 'content',
                         '%s.py' % (vars['content_class_filename'])),
            'Message Factory Imported Here', content_messagefactory_insert)

        self.post(command, output_dir, vars)

    def pre(self, command, output_dir, vars):

        file = vars['content_class_filename']
        if file.endswith('.py'):
            file = os.path.splitext(file)[0]

        vars['field_type'] = vars['field_type'].capitalize()

        if vars['widget_type'].lower() == 'default':
            vars['widget_type'] = self.fieldtypes[
                vars['field_type'].lower()][0]

        vars['widget_type'] = vars['widget_type'].capitalize()

        # camelcase multiword names
        if vars['field_type'].lower() == 'fixedpoint':
            vars['field_type'] = 'FixedPoint'

        if vars['field_type'].lower() == 'datetime':
            vars['field_type'] = 'DateTime'

        if vars['field_type'].lower() == 'date':
            vars['field_type'] = 'DateTime'

        if vars['widget_type'].lower() == 'inandout':
            vars['widget_type'] = 'InAndOut'

        if vars['widget_type'].lower() == 'multiselection':
            vars['widget_type'] = 'MultiSelection'

        if vars['widget_type'].lower() == 'picklist':
            vars['widget_type'] = 'PickList'

        if vars['widget_type'].lower() == 'referencebrowser':
            vars['widget_type'] = 'ReferenceBrowser'

        if vars['widget_type'].lower() == 'textarea':
            vars['widget_type'] = 'TextArea'

        vars['content_class_filename'] = file
예제 #20
0
class CSSResource(SubTemplate):

    _template_dir = 'templates/genericsetup/cssresource'
    summary = 'Adds a CSS resource into Plone registry'

    vars = [var('css_filename', 'CSS filename')]
예제 #21
0
class JSResource(SubTemplate):

    _template_dir = 'templates/genericsetup/jsresource'
    summary = 'Adds a JS resource into Plone registry'

    vars = [var('js_filename', 'JS filename')]