Beispiel #1
0
 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)
Beispiel #3
0
    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
Beispiel #5
0
    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)
Beispiel #7
0
    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)
Beispiel #9
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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
Beispiel #13
0
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)
Beispiel #14
0
 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
Beispiel #16
0
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
Beispiel #18
0
 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
Beispiel #19
0
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)
Beispiel #20
0
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})
Beispiel #21
0
 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
Beispiel #22
0
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)
Beispiel #23
0
 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()
Beispiel #24
0
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'))
     ]
Beispiel #27
0
    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')
Beispiel #28
0
    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')
Beispiel #29
0
 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)