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('.', '_')
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']
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']
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']
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']
def setUp(self): self.var = var('name', 'description') self.svar = var('name', 'description', structures={ 'False': 'foo', 'True': 'bar' })
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('.', '-')
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'), ]
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'])
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(' ', '')
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'
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(' ', '')
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)
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( " ", "")
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(' ', '')
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
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
def setUp(self): self.var = var('name', 'description') self.svar = var('name', 'description', structures={'False': 'foo', 'True': 'bar'})
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
class CSSResource(SubTemplate): _template_dir = 'templates/genericsetup/cssresource' summary = 'Adds a CSS resource into Plone registry' vars = [var('css_filename', 'CSS filename')]
class JSResource(SubTemplate): _template_dir = 'templates/genericsetup/jsresource' summary = 'Adds a JS resource into Plone registry' vars = [var('js_filename', 'JS filename')]