def zms_version(self, custom=False): file = open(_fileutil.getOSPath(package_home(globals())+'/version.txt'),'r') rtn = file.read() file.close() zms_custom_version = os.environ.get('ZMS_CUSTOM_VERSION', '') if custom and zms_custom_version != '': rtn += ' ({})'.format(zms_custom_version) if custom and os.path.exists(_fileutil.getOSPath(package_home(globals())+'/../../.git/FETCH_HEAD')): file = open(_fileutil.getOSPath(package_home(globals())+'/../../.git/FETCH_HEAD'),'r') FETCH_HEAD = file.read() file.close() FETCH_HEAD = FETCH_HEAD[0:7] rtn += ' git#%s'%(FETCH_HEAD) return rtn
def setUpImg(self): """ Setup an image """ img_file = join(package_home(globals()), 'data', 'test.png') img = open(img_file, 'rb').read() globs = {} globs['img'] = img globs['imgfile'] = img_file img_file = join(package_home(globals()), 'data', 'test.tif') img = open(img_file, 'rb').read() globs['tiff'] = img globs['tiff_file'] = img_file self.globs.update(globs)
def setUp(self): test_home = package_home(globals()) image_path = os.path.join(test_home, 'test.jpg') image_file = open(image_path, 'rb') self.image_contents = image_file.read() image_file.close() u_attrs = { 'cn': [ug('cn')], 'sn': [ug('sn')], 'mail': [ug('mail')], 'givenName': [ug('givenName')], 'jpegPhoto': [self.image_contents], 'objectClasses': ug('objectClasses') } self.u_ob = LDAPUser(ug('cn'), ug('mail'), ug('user_pw'), ug('user_roles'), [], 'cn=%s,%s' % (ug('cn'), dg('users_base')), u_attrs, list(ug('mapped_attrs').items()), ug('multivalued_attrs'), ug('binary_attrs'), ldap_groups=ug('ldap_groups'))
def registerHelp(self, directory='help', clear=1, title_re=re.compile(r'<title>(.+?)</title>', re.I)): """ Registers Help Topics for all objects in a directory. Nothing will be done if the files in the directory haven't changed since the last registerHelp call. 'clear' indicates whether or not to delete all existing Topics from the Product. HelpTopics are created for these kind of files .dtml -- DTMLHelpTopic .html .htm -- TextHelpTopic .stx .txt -- STXHelpTopic .jpg .png .gif -- ImageHelpTopic .py -- APIHelpTopic """ if not self.__app: return help = self.getProductHelp() path = os.path.join(package_home(self.__pack.__dict__), directory) # If help directory does not exist, log a warning and return. try: dir_mod_time = DateTime(os.stat(path)[stat.ST_MTIME]) except OSError, (errno, text): LOG.warn('%s: %s' % (text, path)) return
def __init__(self, filename, _prefix=None, encoding=DEFAULT_ENCODING, **kw): name = kw.pop('__name__', None) self.encoding = encoding basepath, ext = os.path.splitext(filename) if name: self.id = self.__name__ = name self._need__name__ = 0 else: self.id = self.__name__ = os.path.basename(basepath) if _prefix: if isinstance(_prefix, str): filename = os.path.join(_prefix, filename) else: filename = os.path.join(package_home(_prefix), filename) if not ext: filename = filename + '.zpt' self.filename = filename
def testXMLImport(self): self.loginAsPortalOwner() xmlpath = os.path.join(package_home(config.GLOBALS), 'tests', 'relations_sample.xml') f = open(xmlpath) xml = f.read() f.close() tool = self.portal.relations_library tool.importXML(xml) ruleset = tool.getRuleset('document_files') #export it xml = tool.exportXML() #now reimport the junk again tool.manage_delObjects(tool.objectIds()) tool.importXML(xml) # Make sure the imported ruleset contains the same set of components self.assertEqual( tool.getRuleset('document_files').objectIds(), ruleset.objectIds()) # check if the inverse Implicator is imported properly. # this made problems. rset = tool.getRuleset('document_files') from Products.Relations.components.contentreference import _findInstanceOf from Products.Relations.components import inverse ii = _findInstanceOf(rset.objectValues(), inverse.InverseImplicator)
def test___getitem___filesystem_filtered( self ): import os from App.Common import package_home zuite = self._makeOne() zuite._updateProperty( 'filesystem_path' , os.path.join( package_home( globals() ) , 'filters' ) ) zuite._updateProperty( 'filename_glob' , 'test_*.html' ) try: excluded = zuite[ 'exclude_me.html' ] except KeyError: pass else: self.fail( "Didn't exclude 'exclude_me.html'." ) for name in ( 'test_one.html' , 'test_another.html' ): object = zuite[ name ] self.assertEqual( object.meta_type, 'File' )
def registerDirectory(self, name, _prefix, subdirs=1, ignore=ignore): # This what is actually called to register a # file system directory to become a FSDV. if not isinstance(_prefix, str): _prefix = package_home(_prefix) filepath = path.join(_prefix, name) self.registerDirectoryByPath(filepath, subdirs, ignore=ignore)
def importTheme(folder, theme): filename = _fileutil.extractFilename(theme) id = filename[:filename.rfind('.')] if filename.endswith('.zexp'): ### Store copy of ZEXP in INSTANCE_HOME/import-folder. filepath = standard.getINSTANCE_HOME() + '/import/' + filename if theme.startswith('http://'): initutil = standard.initutil() initutil.setConfProperty('HTTP.proxy',REQUEST.get('http_proxy','')) zexp = standard.http_import( initutil, theme) _fileutil.exportObj( zexp, filepath) else: packagepath = package_home(globals()) + '/import/' + filename try: os.stat(_fileutil.getOSPath(filepath)) except OSError: shutil.copy( packagepath, filepath) ### Import theme from ZEXP. _fileutil.importZexp( folder, filename) else: id = filename[:filename.find('-')] _confmanager.initConf(folder.content, id, remote=False) return id
def setUpReadme(self): """ Setup readme """ img_file = join(package_home(globals()), 'data', 'test.png') globs = {} globs['mp3_icon_file_name'] = img_file self.globs.update(globs)
def initTheme(self, theme, new_id, REQUEST): filename = _fileutil.extractFilename(theme) id = filename[:filename.rfind('.')] ### Store copy of ZEXP in INSTANCE_HOME/import-folder. filepath = INSTANCE_HOME + '/import/' + filename if theme.startswith('http://'): initutil = _globals.initutil() initutil.setConfProperty('HTTP.proxy', REQUEST.get('http_proxy', '')) zexp = _globals.http_import(initutil, theme) _fileutil.exportObj(zexp, filepath) else: packagepath = package_home(globals()) + '/import/' + filename try: os.stat(_fileutil.getOSPath(filepath)) except OSError: shutil.copy(packagepath, filepath) ### Import theme from ZEXP. _fileutil.importZexp(self, filename) ### Assign folder-id. if id != new_id: self.manage_renameObject(id=id, new_id=new_id) ### Return new ZMS home instance. return getattr(self, new_id)
def importTheme(self, theme): filename = _fileutil.extractFilename(theme) id = filename[:filename.rfind('-')] filepath = package_home(globals()) + '/import/' path = filepath + filename self.importConf(path) return id
def addMissingWorkflows(context): """Add new Plone 3.0 workflows """ portal = getToolByName(context, 'portal_url').getPortalObject() wft = getToolByName(portal, 'portal_workflow', None) if wft is None: return new_workflow_ids = [ 'intranet_workflow', 'intranet_folder_workflow', 'one_state_workflow', 'simple_publication_workflow'] encoding = 'utf-8' path_prefix = os.path.join(package_home(cmfplone_globals), 'profiles', 'default', 'workflows') for wf_id in new_workflow_ids: if wf_id in wft.objectIds(): logger.info("Workflow %s already installed; doing nothing" % wf_id) continue path = os.path.join(path_prefix, wf_id, 'definition.xml') body = open(path,'r').read() wft._setObject(wf_id, DCWorkflowDefinition(wf_id)) wf = wft[wf_id] wfdc = WorkflowDefinitionConfigurator(wf) ( workflow_id , title , state_variable , initial_state , states , transitions , variables , worklists , permissions , scripts , description , manager_bypass , creation_guard ) = wfdc.parseWorkflowXML(body, encoding) _initDCWorkflow( wf , title , description , manager_bypass , creation_guard , state_variable , initial_state , states , transitions , variables , worklists , permissions , scripts , portal # not sure what to pass here # the site or the wft? # (does it matter at all?) ) logger.info("Added workflow %s" % wf_id)
def getPluginIds(self, path=[]): ids = [] filepath = os.sep.join([package_home(globals()), 'plugins']+path) for filename in os.listdir(filepath): path = os.sep.join([filepath, filename]) if os.path.isdir(path) and len(os.listdir(path)) > 0: ids.append(filename) return ids
def getRichtextFormatIds(self): ids = [] filepath = package_home(globals()) + '/plugins/rte/' for filename in os.listdir(filepath): path = filepath + os.sep + filename if os.path.isdir(path): ids.append(filename) return ids
def ptFile(id, *filename): if type(filename[0]) is types.DictType: filename = list(filename) filename[0] = package_home(filename[0]) filename = os.path.join(*filename) if not os.path.splitext(filename)[1]: filename = filename + '.pt' return PageTemplateFile(filename, '', __name__=id)
def loadFile(name, size=0): """Load file from testing directory """ path = os.path.join(package_home(globals()), 'tests/input', name) fd = open(path, 'rb') data = fd.read() fd.close() return data
def zms_version(self): file = open(_fileutil.getOSPath(package_home(globals())+'/version.txt'),'r') rtn = file.read() file.close() zms_custom_version = os.environ.get('ZMS_CUSTOM_VERSION', '') if zms_custom_version != '': rtn += ' ({})'.format(zms_custom_version) return rtn
def translate_path(s): """ translate path """ ZMS_HOME = package_home(globals()) if s.startswith('/++resource++zms_/'): l = ['plugins', 'www'] + s.split('/')[2:] return os.sep.join([ZMS_HOME] + l)
def getPackageLocation(module): """ Return the filesystem location of a module. This is a simple wrapper around the global package_home method which tricks it into working with just a module name. """ package = getContainingPackage(module) return package_home({'__name__': package})
def zms_version(self): """ Try to obtain the version from package info if installed by pip otherwise read from version.txt and from svnversion 1. installed by pip from PyPI (revision 'XXXX' in version.txt - package info of official releases does not contain revision) 2. installed by pip from ZMSLabs w/ info by svn (revision 'svn-rXXXX' in package info due to setup.cfg) 3. installed by pip from TAR-Ball w/o info by svn (revision 'XXXX' in version.txt due to nightly build - 'svn0' in package info due to setup.cfg) 4. deployed to instance/Products (revision 'XXXX' in version.txt, maybe installed but unused package) 5. checked out to instance/Products as working copy from svn (revision 'REV' in version.txt, maybe installed but unused package) """ from pkg_resources import WorkingSet, Requirement zms = WorkingSet().find(Requirement.parse('ZMS3')) pth = _fileutil.getOSPath(package_home(globals())) file = open(_fileutil.getOSPath(pth+'/version.txt'), 'r') version_txt = file.read() version = version_txt.strip().split('.') file.close() # return plain version info if it is a deployment specific format like # ZMS3-3.Y.Z.XXXX.prj-ABCD if len(version)!=4: return version_txt # obtain revision and return formatted version info # ZMS3-3.Y.Z.XXXX else: revision = version.pop() # get revision from pip if running as package if (zms is not None) and ('site-packages' in pth): version_pip = str(zms.version) if ('.svn-r' in version_pip): # leave -r in revision to recognize as snapshot below revision = version_pip.strip().split('.svn', 1)[1] # get revision from svnversion elif (revision == 'REV'): import subprocess version_svn = subprocess.Popen("svnversion", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, cwd=pth, universal_newlines=True) revision = version_svn.communicate()[0].strip() # format revision info if (revision.startswith('export')): revision = ' (unknown build/snapshot)' # at moment there are 4-digits for builds elif len(revision)==4: revision = ' (build #%s)'%revision # otherwise it is a development snapshot else: revision = ' (snapshot #%s)'%revision.replace('-r', '') return '.'.join(version)+revision
def import_relationship_config(portal): # configuration for Relations relations_tool = getToolByName(portal, 'relations_library') if 'HAIPoliciesAndProcedures' not in relations_tool.objectIds(): xmlpath = os.path.join(package_home(PRODUCT_GLOBALS), 'relations.xml') f = open(xmlpath) xml = f.read() f.close() relations_tool.importXML(xml)
def __init__(self): """ Constructor. """ self.id = 'content' file = open( _fileutil.getOSPath(package_home(globals()) + '/www/spacer.gif'), 'rb') self.zmi_logo = Image(id='logo', title='', file=file.read()) file.close()
def installRelationsRules(context): if context.readDataFile('installRelationsRules.txt') is None: return portal = context.getSite() relations_tool = getToolByName(portal, 'relations_library') xmlpath = os.path.join(package_home(GLOBALS), 'relations.xml') f = open(xmlpath) xml = f.read() f.close() relations_tool.importXML(xml)
def setUpMultimedia(self): """ Setup multimedia """ setUpImg(self) globs = {} globs['samplefilename'] = 'barsandtone.flv' globs['samplefile'] = join(package_home(globals()), 'data', 'barsandtone.flv') globs['sampledata'] = open(globs['samplefile'], 'rb').read() globs['mimetype'] = 'video/x-flv' self.globs.update(globs)
def setUp(self): self.portal = self.layer['portal'] self.catalog = api.portal.get_tool(name='portal_catalog') wf_tool = api.portal.get_tool(name='portal_workflow') wf_tool.setDefaultChain('plone_workflow') setRoles(self.portal, TEST_USER_ID, ['Manager']) registry = getUtility(IRegistry) settings = registry.forInterface(ISCExternalContentSettings) settings.rss_sources = [ u'test1,{0},test'.format( os.path.join(package_home(globals()), 'test_feed.rss')) ]
def test___getitem___filesystem(self): import os from App.Common import package_home zuite = self._makeOne() zuite._updateProperty('filesystem_path', os.path.join(package_home(globals()), 'flat')) for name in ('test_simple.html', ): object = zuite[name] self.assertEqual(object.meta_type, 'File')
def test_listTestCases_filesystem(self): import os from App.Common import package_home zuite = self._makeOne() zuite._updateProperty('filesystem_path', os.path.join(package_home(globals()), 'flat')) cases = zuite.listTestCases() self.assertEqual(len(cases), 1) self.assertEqual(cases[0]['id'], 'test_simple.html')
def getValues(self, id, path=None): if path is None: path = package_home(globals()) + '/import/' filename = path + 'enum.%s.xml' % id xml = open(filename) builder = _xmllib.XmlAttrBuilder() v = builder.parse(xml) xml.close() if isinstance(v, dict): l = sorted([(v[x], x) for x in v]) v = [] for i in l: v.append([i[1], i[0]]) return v
def testManageAddUserBinaryHandling(self): # Make sure binary attributes are never converted test_home = package_home(globals()) image_path = os.path.join(test_home, 'test.jpg') image_file = open(image_path, 'rb') image_contents = image_file.read() image_file.close() acl = self.folder.acl_users acl.manage_addLDAPSchemaItem('jpegPhoto', binary=True) kw_args = copy.deepcopy(manager_user) kw_args['jpegPhoto'] = image_contents acl.manage_addUser(REQUEST=None, kwargs=kw_args) mgr_ob = acl.getUser(manager_user.get(acl.getProperty('_login_attr'))) self.assertEqual(mgr_ob.getProperty('jpegPhoto'), image_contents)