Beispiel #1
0
def addExternalMethod(container, id, title, data):
  """
  Add External Method to container.
  """
  m = id
  filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
  # Acquired external methods.
  if m.find('.') > 0 and os.path.exists(filepath):
    id = m[m.find('.')+1:]
    f = id
  # Other.
  else:
    m = getExternalMethodModuleName(container, id)
    f = id
    # If data is given then save to file in Extensions-folder.
    if data:
      filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
      _fileutil.exportObj( data, filepath)
    elif m != f:
      context = container
      while context is not None:
        m = getExternalMethodModuleName(context, id)
        filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
        if os.path.exists(filepath):
          break
        context = context.getParentNode()
  ExternalMethod.manage_addExternalMethod( container, id, title, m, f)
Beispiel #2
0
def readData(ob, default=None):
  """
  Read data of Zope-object.
  """
  data = default
  if ob is None and default is not None:
    return default
  if ob.meta_type in [ 'DTML Document', 'DTML Method', 'Filesystem DTML Document', 'Filesystem DTML Method']:
    data = ob.raw
  elif ob.meta_type in [ 'File', 'Filesystem File', 'Filesystem Image', 'Image']:
    data = ob.data
    if not standard.is_bytes(data):
      b = b''
      while data is not None:
        b += data.data
        data = data.next
      data = b
  elif ob.meta_type in [ 'Filesystem Page Template', 'Filesystem Script (Python)', 'Page Template', 'Script (Python)']:
    data = ob.read()
  elif ob.meta_type in [ 'External Method']:
    if isinstance(ob,MissingArtefactProxy):
      return ob.getData()
    else:
      context = ob
      id = ob.getId()
      while context is not None:
        m = getExternalMethodModuleName(context, id)
        filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
        if os.path.exists(filepath):
          break
        try:
          context = context.getParentNode()
        except:
          context = None
      if context is None:
        m = id
      filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
      if os.path.exists(filepath):
        f = open(filepath, 'rb')
        data = standard.pystr(f.read(),encoding='utf-8')
        f.close()
  elif ob.meta_type == 'Z SQL Method':
    lines = []
    lines.append('<connection>%s</connection>'%ob.connection_id)
    lines.append('<params>%s</params>'%ob.arguments_src)
    lines.append('<max_rows>%i</max_rows>'%ob.max_rows_)
    lines.append('<max_cache>%i</max_cache>'%ob.max_cache_)
    lines.append('<cache_time>%i</cache_time>'%ob.cache_time_)
    lines.append(ob.src)
    data = '\n'.join(lines)
  return data
Beispiel #3
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
Beispiel #4
0
 def initExportFilter(self, id, REQUEST):
   # Set environment variables.
   instance_home = standard.getINSTANCE_HOME()
   package_home = standard.getPACKAGE_HOME()
   package_home = os.path.normpath(package_home)
   REQUEST.set( 'ZMS_FILTER', True)
   REQUEST.set( 'ZMS_FILTER_INSTANCE_HOME', instance_home)
   REQUEST.set( 'ZMS_FILTER_PACKAGE_HOME', package_home)
   # Set local variables.
   ob_filter = self.getFilterManager().getFilter(id)
   ob_filter_format = ob_filter.get('format', '')
   # Create temporary folder.
   tempfolder = tempfile.mktemp()
   ressources = self.exportRessources( tempfolder, REQUEST, from_zms=ob_filter_format=='XHTML', from_home=ob_filter_format=='XHTML')
   # Export data to file.
   if ob_filter_format == 'export':
     outfilename = _fileutil.getOSPath('%s/INDEX0'%tempfolder)
   elif ob_filter_format in ['XML', 'XML_incl_embedded']:
     # Set XML.
     data = self.toXml( REQUEST)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'XHTML':
     # Set XHTML.
     data = self.toXhtml( REQUEST)
     outfilename = _fileutil.getOSPath('%s/export.html'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'myXML':
     # Set myXML.
     data = self.getXmlHeader() + getattr( self, 'getObjToXml_DocElmnt')(context=self)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   else:
     raise zExceptions.InternalError("Unknown format '%s'"%ob_filter.get('format', ''))
   return tempfolder, outfilename
Beispiel #5
0
 def getLOG(self, REQUEST, RESPONSE=None):
   """ ZMSLog.getLOG """
   filename = os.path.join(standard.getINSTANCE_HOME(),'var','log','event.log')
   RESPONSE.setHeader( 'Content-Type','text/plain')
   RESPONSE.setHeader( 'Content-Disposition','inline;filename="%s"'%_fileutil.extractFilename( filename))
   file = open( filename, 'r')
   rtn = file.read() 
   file.close()
   return rtn
Beispiel #6
0
 def get_conf_basepath(self, id=''):
     basepath = self.get_conf_property('ZMS.conf.path')
     basepath = basepath.replace('$INSTANCE_HOME',
                                 standard.getINSTANCE_HOME())
     basepath = basepath.replace(
         '$HOME_ID', "/".join([
             x.getHome().id for x in self.breadcrumbs_obj_path()
             if x.meta_id == 'ZMS'
         ]))
     basepath = basepath.replace("/", os.path.sep)
     basepath = os.path.join(basepath, id)
     return basepath
Beispiel #7
0
def processCommand(self, filename, command):
  standard.writeBlock( self, '[processCommand]: infilename=%s'%filename)
  infilename = _fileutil.getOSPath( filename)
  outfilename = _fileutil.getOSPath( filename)
  mCurDir = '{cur_dir}'
  mIn = '{in}'
  mOut = '{out}'
  i = command.find(mOut[:-1])
  if i >= 0:
      j = command.find('}', i)
      mExt = command[i+len(mOut[:-1]):j]
      mOut = command[i:j+1]
      if len(mExt) > 0:
          outfilename = outfilename[:outfilename.rfind('.')] + mExt
      else:
          outfilename += '.tmp'
  tmpoutfilename = outfilename + '~'
  instance_home = standard.getINSTANCE_HOME()
  package_home = standard.getPACKAGE_HOME()
  package_home = os.path.normpath(package_home)
  command = command.replace( '{package_home}', package_home)
  command = command.replace( '{instance_home}', instance_home)
  command = command.replace( mCurDir, _fileutil.getFilePath(infilename))
  command = command.replace( mIn, infilename)
  command = command.replace( mOut, tmpoutfilename)
  # Change directory (deprecated!).
  if self.getConfProperty('ZMS.filtermanager.processCommand.chdir', 0):
      path = _fileutil.getFilePath(filename)
      standard.writeBlock( self, '[processCommand]: path=%s'%path)
      os.chdir(path)
  # Execute command.
  standard.writeBlock( self, '[processCommand]: command=%s'%command)
  os.system(command)
  # Check if output file exists.
  try: 
      os.stat( _fileutil.getOSPath( tmpoutfilename)) 
      standard.writeBlock( self, '[processCommand]: rename %s to %s'%( tmpoutfilename, outfilename))
      try:
          os.remove( outfilename)
      except OSError:
          pass
      os.rename( tmpoutfilename, outfilename)
  except OSError:
      outfilename = infilename
  # Remove input file if it is the result of a transformation of output file.
  if outfilename != infilename:
      os.remove( infilename)
  # Return filename.
  standard.writeBlock( self, '[processCommand]: outfilename=%s'%( outfilename))
  return outfilename
Beispiel #8
0
def removeObject(container, id, removeFile=True):
  """
  Remove Zope-object from container.
  """
  #try: container.writeBlock("[zopeutil.removeObject]: %s@%s -%s"%(container.meta_type,container.absolute_url(),id))
  #except: pass
  if id in container.objectIds():
    ob = getattr(container, id)
    if ob.meta_type == 'External Method' and removeFile:
      m = getExternalMethodModuleName(container, id)
      filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
      if os.path.exists(filepath):
        os.remove(filepath)
    container.manage_delObjects(ids=[id])
Beispiel #9
0
 def getINSTANCE_HOME(self):
     warn(self, 'getINSTANCE_HOME',
          'Products.zms.standard.getINSTANCE_HOME')
     return standard.getINSTANCE_HOME()
Beispiel #10
0
 def tail_event_log(self, linesback=100, returnlist=True):
   filename = os.path.join(standard.getINSTANCE_HOME(),'var','log','event.log')
   return _fileutil.tail_lines(filename,linesback,returnlist)
Beispiel #11
0
    def manage_export(self, export_format, lang, REQUEST, RESPONSE):
        """ Exportable.manage_export """

        title = self.getHome().id + '_' + self.id_quote(
            self.getTitlealt(REQUEST))

        # Get export format.
        try:
            export_format = int(export_format)
        except:
            pass

        get_data = REQUEST.get('download', 1) == 1

        # ZEXP.
        if export_format == 0:
            filename = '%s.zexp' % self.id
            export = self.aq_parent.manage_exportObject(id=self.id, download=1)
            content_type = 'application/data'

        # HTML.
        elif export_format == 1:
            filename = '%s_html.zip' % title
            export = self.toZippedHtml(REQUEST, get_data)
            content_type = 'application/zip'

        # XML.
        elif export_format == 2:
            filename = '%s_xml.zip' % title
            export = self.toZippedXml(REQUEST, get_data)
            content_type = 'application/zip'

        # myXML.
        elif export_format == 3:
            instance_home = standard.getINSTANCE_HOME()
            package_home = standard.getPACKAGE_HOME()
            package_home = os.path.normpath(package_home)
            REQUEST.set('ZMS_FILTER_INSTANCE_HOME', instance_home)
            REQUEST.set('ZMS_FILTER_PACKAGE_HOME', package_home)
            filename = '%s.xml' % title
            export = self.getXmlHeader() + getattr(
                self, 'getObjToXml_DocElmnt')(context=self)
            content_type = 'text/xml'

        # Export Filter.
        elif export_format in self.getFilterManager().getFilterIds():
            if REQUEST.get('debug'):
                url = self.url_append_params('manage_importexportDebugFilter',
                                             {
                                                 'lang': lang,
                                                 'filterId': export_format,
                                                 'debug': 1
                                             })
                return RESPONSE.redirect(url)
            else:
                filename, export, content_type = _filtermanager.exportFilter(
                    self, export_format, REQUEST)

        # return export for download to browser
        if get_data:
            RESPONSE.setHeader('Content-Type', content_type)
            RESPONSE.setHeader('Content-Disposition',
                               'inline;filename="%s"' % filename)
            return export
        else:
            message = 'Exported to %s (%s)' % (export, content_type)
            url = '%s/manage_importexport' % self.absolute_url()
            url = self.url_append_params(url, {
                'lang': lang,
                'manage_tabs_message': message
            })
            RESPONSE.redirect(url)
Beispiel #12
0
 def getLocation(self):
     return self.location.replace('$INSTANCE_HOME',
                                  standard.getINSTANCE_HOME())