File:  [Repository] / OSA_system2 / OSAS_server.py
Revision 1.21: download - view: text, annotated - select for diffs - revision graph
Wed Jan 31 14:30:29 2007 UTC (17 years, 3 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
zlog ersetzt durch logging

import os
import os.path
import stat
import OSAS_helpers
import xmlrpclib
import bz2
import base64
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Globals import InitializeClass,package_home
from OFS.SimpleItem import SimpleItem
import logging
import sys

#ersetzt logging
def logger(txt,method,txt2):
    """logging"""
    logging.info(txt+ txt2)



def encodeRPC(string):
    return base64.encodestring(bz2.compress(string))
def decodeRPC(string):
    return bz2.decompress(base64.decodestring(string))


class OSAS_storeOnlineServer(SimpleItem):
    """Server for store Online system"""
    
    
    meta_type="OSAS_server"

    def __init__(self,id):
        """initalize osas_server"""
        self.id = id
        
    def getImages(self,path):
        """hack"""
        imageEnding=['.gif','.jpg','.jpeg','.png','.tiff','.tif']

        dirs=os.listdir(path)
        ret=[]

        for dir in dirs:

            if os.path.isdir(os.path.join(path,dir)):
                
                for subdir in os.listdir(os.path.join(path,dir)):
                    if os.path.splitext(subdir)[1].lower() in imageEnding:
                        ret.append(os.path.join(dir,subdir))
            else:
                if os.path.splitext(dir)[1] in imageEnding:
                        ret.append(os.path.join(dir))
        return ret
    

    def getMovies(self,path):
        """hack"""
        movieEnding=['.dv','.mov','.mp4']
        dirs=os.listdir(path)
        ret=[]
        for dir in dirs:
            if os.path.isdir(os.path.join(path,dir)):
                for subdir in os.listdir(os.path.join(path,dir)):
                    if os.path.splitext(subdir)[1].lower() in movieEnding:
                        ret.append(os.path.join(dir,subdir))
            else:
                if os.path.splitext(dir)[1] in movieEnding:
                        ret.append(os.path.join(dir))
        return ret
    
       
    def findIndexMeta(self,realPath=""):
        """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
        @keyword path: default ist "", Pfad auf das Object
        @return: None falls kein index.meta existiert sonst Pfad auf das index.meta
        """
        
        #suche index.meta
        while (not os.path.exists(os.path.join(realPath,'index.meta'))) and (not ((realPath=="") or (realPath=="/"))):
            realPath=os.path.split(realPath)[0]
            
        if realPath=='' or realPath=='/':
            if os.path.exists(os.path.join(realPath,'index.meta')):
                return (os.path.join(realPath,'index.meta'))
            else:
                return None
        else:
            return os.path.join(realPath,'index.meta')

    def findIndexMetaWithStats(self,path=""):
        """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
        @keyword path: default ist "", Pfad auf das Object
        @return: None falls kein index.meta existiert sonst Tupel (Pfad auf das index.meta,stats(indexMeta)
        """

        indexMeta=self.findIndexMeta(path)
        if indexMeta:
            return (indexMeta,self.getStat(indexMeta))
        else:
            return (None,[])


    def getStat(self,path=""):
        """Gibt stat von path aus
        @keyword path: default ist "", Pfad
        @return: stat[path]"""

        if not os.path.exists(path):
            #return None,"(ERROR) path %s does not exist."%path
            return None
        else:
            return [x for x in os.stat(path)]
            
            
            

    def listdir(self,path=""):
        """list dir"""
        return os.listdir(path)

    def isdir(self,path=""):
        """list dir"""
        return os.path.isdir(path)

    def isfile(self,path=""):
        """list dir"""
        return os.path.isfile(path)



    def getFile(self,path):
        """getFile"""

        if not os.path.exists(path):
            return None

        f=file(path,'r')
        
        ret=f.read()

        f.close()
        
        return ret

    def getAllIndexMetasOfSubDirs(self,path):
        """get all index Metas"""
        ret={}
        if os.path.exists(path+"/index.meta"):
            compressed=encodeRPC(file(path+"/index.meta","r").read())
            ret["."]=('OSAS_dir',compressed)
        for dir in os.listdir(path):
	    zLOG.LOG("SERVER",zLOG.INFO,"get all index meta in %s"%dir)	
            fileType=OSAS_helpers.checkOSASFileType(os.path.join(path,dir))
            if os.path.exists(os.path.join(path,dir,"index.meta")):
                compressed=encodeRPC(file(os.path.join(path,dir,"index.meta"),"r").read())
                ret[dir]=('OSAS_dir',compressed)
            else:
                ret[dir]=(fileType,None)
        return ret

    def writeMetaDataFile(self,path,metadata,compressed=None):
        """writefiletoserver"""
        if compressed:
            metadata=decodeRPC(metadata)
            
        try:
            fh=file(path,"w")
            fh.write(metadata)
            fh.close
            return True
        except:
            zLOG.LOG("SERVER (writeMetadataFile)",zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2])                        
            return False

    def generateMovieThumb(self,input,output):
        """generate Movie"""
        logger("SERVER",logging.INFO,"/usr/local/bin/thumbbite.pl %s %s"%(input,output)) 
        ret=os.popen("/usr/local/bin/thumbbite.pl %s %s"%(input,output))
        logger("SERVER",logging.INFO,ret)                        
        return "ok"

def manage_addOSAS_storeOnlineServerForm(self):
    """interface for adding the OSAS_storeOnline"""
    pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addStoreOnlineServer.zpt')).__of__(self)
    return pt()

def manage_addOSAS_storeOnlineServer(self,id,RESPONSE=None):
    """add the OSAS_storeOnline
    @param id: id
    """
    newObj=OSAS_storeOnlineServer(id)
    self._setObject(id,newObj)
    if RESPONSE is not None:
        RESPONSE.redirect('manage_main')


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>