prefs is inheretable

This commit is contained in:
age 2006-08-20 18:23:35 +00:00
parent c14d5cfbd7
commit 975b2bb14a
2 changed files with 66 additions and 56 deletions

View file

@ -7,24 +7,15 @@ progress. So things might be confusing here. Hopefully not for long.
:)
'''
import logging
import CryptoBoxLogger
import CryptoBoxContainer
import types
import re
import os
import sys
try:
import configobj ## needed for reading and writing the config file
except:
print("Could't import 'configobj'! Try apt-get install python-configobj.")
sys.exit()
import types
import unittest
CONF_LOCATIONS = [
"./cryptobox.conf",
"~/.cryptobox.conf",
"/etc/cryptobox/cryptobox.conf"]
CONF_LOCATIONS = [ "./cryptobox.conf", "~/.cryptobox.conf", "/etc/cryptobox/cryptobox.conf"]
class CryptoBox:
'''this class rules them all!
@ -32,10 +23,11 @@ class CryptoBox:
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
self.__initLogging()
self.__initPreferences()
def initLogging(self):
def __initLogging(self):
import logging
'''initialises the logging system
use it with: 'self.log.[debug|info|warning|error|critical](logmessage)'
@ -45,12 +37,46 @@ class CryptoBox:
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")
try:
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")
## from now on everything can be logged via self.log...
except:
sys.stderr.write("Something with the loggingsystem went wrong. I give up.")
sys.exit(1)
def __initPreferences(self):
try:
import configobj ## needed for reading and writing the config file
except:
self.log.error("Could't import 'configobj'! Try apt-get install python-configobj.")
sys.exit(1)
for f in CONF_LOCATIONS:
if os.path.exists(os.path.expanduser(f)):
conf_file = os.path.expanduser(f)
break
try:
self.cbxPrefs = configobj.ConfigObj(conf_file)
self.log.debug("found config: %s" % self.cbxPrefs.items())
except:
self.log.error("Could not read configuration file. I give up.\n")
sys.exit(1)
try:
nameDB_file = os.path.join(
self.cbxPrefs["Main"]["DataDir"],
self.cbxPrefs["Main"]["NameDatabase"])
if os.path.exists(nameDB_file):
self.nameDB = configobj.ConfigObj(nameDB_file)
else:
self.nameDB = configobj.ConfigObj(nameDB_file, create_empty=True)
except SyntaxError:
self.log.error("Error during parsing of name database file (%s).\n" % (nameDB_file, ))
sys.exit(1)
def cbx_inheritance_test(self):
print "you lucky widow"
@ -63,40 +89,18 @@ class CryptoBoxProps(CryptoBox):
All properties of the cryptobox can be accessed by this class.
'''
def __init__(self, conf_file=None):
def __init__(self):
'''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)
CryptoBox.__init__(self)
#self.cbx_inheritance_test()
if conf_file == None:
for f in CONF_LOCATIONS:
if os.path.exists(os.path.expanduser(f)):
conf_file = os.path.expanduser(f)
break
else:
#sys.stderr.write("Could not find a configuration file. I give up.\n")
self.log.error("Could not find a configuration file. I give up.\n")
sys.exit(1)
try:
self.cbxPrefs = configobj.ConfigObj(conf_file)
except SyntaxError:
#sys.stderr.write("Error during parsing of configuration file (%s).\n" % (conf_file, ))
self.log.error("Could not find a configuration file. I give up.\n")
try:
nameDB_file = os.path.join(
self.cbxPrefs["Main"]["DataDir"],
self.cbxPrefs["Main"]["NameDatabase"])
if os.path.exists(nameDB_file):
self.nameDB = configobj.ConfigObj(nameDB_file)
else:
self.nameDB = configobj.ConfigObj(nameDB_file, create_empty=True)
except SyntaxError:
#sys.stderr.write("Error during parsing of name database file (%s).\n" % (nameDB_file, ))
self.log.error("Error during parsing of name database file (%s).\n" % (nameDB_file, ))
sys.exit(1)
#print self.cbxPrefs.items()
####
self.__cboxUID = int(self.cbxPrefs["System"]["User"])
self.__cboxGID = int(self.cbxPrefs["System"]["Group"])
self.debug = CryptoBoxLogger.CryptoBoxLogger(
@ -321,14 +325,13 @@ Destination = /tmp/cryptobox.log
def testConfigFile(self):
self.assertRaises(KeyError, CryptoBoxProps, "/not/existing/path")
CryptoBoxProps(self.configFile)
CryptoBoxProps()
self.assertTrue(os.path.exists(self.nameDBFile))
self.assertTrue(os.path.exists(self.logFile))
def testDeviceCheck(self):
cb = CryptoBoxProps(self.configFile)
cb = CryptoBoxProps()
self.assertTrue(cb.isDeviceAllowed("/dev/loop"))
self.assertTrue(cb.isDeviceAllowed("/dev/loop1"))
self.assertTrue(cb.isDeviceAllowed("/dev/loop/urgd"))
@ -343,4 +346,5 @@ Destination = /tmp/cryptobox.log
if __name__ == "__main__":
unittest.main()
#cb = CryptoBoxProps()

View file

@ -17,15 +17,18 @@ class CryptoBoxSite:
'''this is the motherclass of all cbx sites
put the stuff in her, that every site will need access to'''
def __init__(self):
pass
def print_foo(self):
'''a stupid demo method'''
self.cbx_inheritance_test()
print "fooooooooooooobaaaaaaaaaaaaaaaaaaaar"
class CryptoBoxSites(CryptoBox.CryptoBoxProps, CryptoBoxSite):
'''
'''
#class CryptoBoxSites(CryptoBox.CryptoBoxProps, CryptoBoxSite):
class CryptoBoxSites(CryptoBox.CryptoBox, CryptoBox.CryptoBoxProps, CryptoBoxSite):
def index(self,action="show_status",page="",weblang="",device="", type=""):
#PROPOSAL:
@ -142,7 +145,9 @@ class CryptoBoxSites(CryptoBox.CryptoBoxProps, CryptoBoxSite):
#go render stuff
cs = CryptoBoxRenderSite()
content = cs.render(TemplateDir+"/main.cs",settings,LangDir+"/"+Language+".hdf")
self.log.debug("rendering site")
content = cs.render(self.cbxPrefs["Settings"]["TemplateDir"]+"/main.cs",settings, \
self.cbxPrefs["Settings"]["LangDir"]+"/"+Language+".hdf")
return content
@ -156,18 +161,19 @@ 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()
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 = neo_cs.CS(hdf)
cs.parseFile(cs_path)
return cs.render()