diff --git a/pythonrewrite/bin2/CryptoBox.py b/pythonrewrite/bin2/CryptoBox.py index 10b0228..05468b0 100644 --- a/pythonrewrite/bin2/CryptoBox.py +++ b/pythonrewrite/bin2/CryptoBox.py @@ -21,28 +21,56 @@ except: import types import unittest - CONF_LOCATIONS = [ "./cryptobox.conf", "~/.cryptobox.conf", "/etc/cryptobox/cryptobox.conf"] +class CryptoBox: + '''this class rules them all! -class CryptoBoxProps: + put things like logging, conf and oter stuff in here, + that might be used by more classes, it will be passed on to them''' + def __init__(self): + self.initLogging() + pass + + def initLogging(self): + '''initialises the logging system + + use it with: 'self.log.[debug|info|warning|error|critical](logmessage)' + from all classes the inherited from CryptoBox + + TODO: read the logfile from the config - this is a hen-egg problem + i would prefer start logging to stdout, read the config and redirect + logging to the logfile found in the config [a] ''' + ## basicConfig(...) needs python >= 2.4 + logging.basicConfig(level=logging.DEBUG, + format='%(asctime)s %(module)s %(levelname)s %(message)s', + filename='./cryptobox.log', + filemode='w') + self.log = logging.getLogger("CryptoBoxProps") + self.log.info("loggingsystem is up'n running") + + def cbx_inheritance_test(self): + print "you lucky widow" + + +class CryptoBoxProps(CryptoBox): '''Get and set the properties of a CryptoBox This class contains all available devices that may be accessed. All properties of the cryptobox can be accessed by this class. ''' - def __init__(self, conf_file=None): '''read config and fill class variables''' "enable it again - or remove the priv-dropping" #if os.geteuid() != 0: # sys.stderr.write("You need to be root to run this program!\n") # sys.exit(1) - self.initLogging() + + #self.cbx_inheritance_test() if conf_file == None: for f in CONF_LOCATIONS: if os.path.exists(os.path.expanduser(f)): @@ -82,21 +110,6 @@ class CryptoBoxProps: if self.isDeviceAllowed(device): self.containers.append(CryptoBoxContainer.CryptoBoxContainer(device, self)) - - def initLogging(self): - '''initialises the logging system - - use it with: - 'self.log.[debug|info|warning|error|critical](logmessage)''' - ## basicConfig(...) needs python >= 2.4 - logging.basicConfig(level=logging.DEBUG, - format='%(asctime)s %(module)s %(levelname)s %(message)s', - #TODO: read the logfile from the config - filename='./cryptobox.log', - filemode='w') - self.log = logging.getLogger("CryptoBoxProps") - self.log.info("loggingsystem is up'n running") - def isDeviceAllowed(self, devicename): "check if a device is white-listed for being used as cryptobox containers" "TODO: broken!" diff --git a/pythonrewrite/bin2/CryptoBoxWebserver.py b/pythonrewrite/bin2/CryptoBoxWebserver.py index e06c7c5..7881bbc 100644 --- a/pythonrewrite/bin2/CryptoBoxWebserver.py +++ b/pythonrewrite/bin2/CryptoBoxWebserver.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import os,sys import CryptoBox + try: import cherrypy except: @@ -11,38 +12,28 @@ try: except: print "could not import clearsilver modules! Try apt-get install python-clearsilver." -class clearsilver: - def __init__(self): - pass - - - def render(self,cs_path,settings = {},hdf_path = ""): - """ - render a clearsilver template and return the result. - gets: - - path to clearsilver template - - dictionary with settings (optional) - - path to hdf dataset (optional) - """ - - hdf=neo_util.HDF() - if hdf_path != "": - hdf.readFile(hdf_path) - for key in settings.keys(): - hdf.setValue(key,str(settings[key])) - cs= neo_cs.CS(hdf) - cs.parseFile(cs_path) - return cs.render() +class CryptoBoxSite: + '''this is the motherclass of all cbx sites -class CryptoBoxSite(CryptoBox.CryptoBoxProps): + put the stuff in her, that every site will need access to''' + def print_foo(self): + '''a stupid demo method''' + self.cbx_inheritance_test() + print "fooooooooooooobaaaaaaaaaaaaaaaaaaaar" + + +class CryptoBoxSites(CryptoBox.CryptoBoxProps, CryptoBoxSite): + ''' + ''' def index(self,action="show_status",page="",weblang="",device="", type=""): #PROPOSAL: #cherrypy could create nice paths like http://crypto.box/doc/, #but that would require an update of the links in the templates. - #is the style worth it? + #is the style worth it? - yes :) + self.print_foo() # this method was inherited by CryptoBoxSite, be careful not to overwrite methods unwanted.. #sanitize input page = self.sanitize_input(page) @@ -150,7 +141,7 @@ class CryptoBoxSite(CryptoBox.CryptoBoxProps): #go render stuff - cs = clearsilver() + cs = CryptoBoxRenderSite() content = cs.render(TemplateDir+"/main.cs",settings,LangDir+"/"+Language+".hdf") return content @@ -160,19 +151,40 @@ class CryptoBoxSite(CryptoBox.CryptoBoxProps): return data index.exposed = True + +class CryptoBoxRenderSite: + def render(self,cs_path,settings = {},hdf_path = ""): + """ + render a clearsilver template and return the result. + gets: + - path to clearsilver template + - dictionary with settings (optional) + - path to hdf dataset (optional) + """ + + hdf=neo_util.HDF() + if hdf_path != "": + hdf.readFile(hdf_path) + for key in settings.keys(): + hdf.setValue(key,str(settings[key])) + cs= neo_cs.CS(hdf) + cs.parseFile(cs_path) + return cs.render() + ############################################################## -cherrypy.root = CryptoBoxSite() -#expose static content: -#I currently have no idea how to cleanly extract the stylesheet path from -#the config object without an extra CryptoBox.CryptoBoxProps instance. -#perhaps put config handling into a seperate class in CryptoBox.py? -cherrypy.config.configMap.update( - { - "/cryptobox.css": { - "staticFilter.on" : True, - "staticFilter.file": os.path.abspath("../www-data/cryptobox.css" ) +if __name__ == "__main__": + cherrypy.root = CryptoBoxSites() + #expose static content: + #I currently have no idea how to cleanly extract the stylesheet path from + #the config object without an extra CryptoBox.CryptoBoxProps instance. + #perhaps put config handling into a seperate class in CryptoBox.py? + cherrypy.config.configMap.update( + { + "/cryptobox.css": { + "staticFilter.on" : True, + "staticFilter.file": os.path.abspath("../www-data/cryptobox.css" ) } }) -cherrypy.server.start() + cherrypy.server.start()