From 8f2bea85403f4e6b3a88d8f39f67d957a33b5131 Mon Sep 17 00:00:00 2001 From: David Bartley Date: Mon, 2 Jun 2008 23:43:13 -0400 Subject: [PATCH] Add library path to config --- ceo/library.py | 36 +++++++++++++++++++++++++++++------- ceo/library.pyc | Bin 4952 -> 6571 bytes ceo/main.py | 3 ++- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/ceo/library.py b/ceo/library.py index 0f2d9cb..a297875 100644 --- a/ceo/library.py +++ b/ceo/library.py @@ -13,9 +13,31 @@ Future plans: keep a whole stack of people who have checked it out (the last few import shelve import time import re +from ceo import conf + +### Configuration ### + +CONFIG_FILE = '/etc/csc/library.cf' + +cfg = {} + +def configure(): + """Load Members Configuration""" + + string_fields = [ 'library_db_path' ] + numeric_fields = [ ] + + # read configuration file + cfg_tmp = conf.read(CONFIG_FILE) + + # verify configuration + conf.check_string_fields(CONFIG_FILE, string_fields, cfg_tmp) + conf.check_integer_fields(CONFIG_FILE, numeric_fields, cfg_tmp) + + # update the current configuration with the loaded values + cfg.update(cfg_tmp) + -#LIBRARY_DB = "/users/office/library/books.db" -LIBRARY_DB = "./csc_library.db" #testing location def format_maybe(v): """little hack to make printing things that may come out as None nicer""" @@ -71,11 +93,11 @@ class Signout: def reset(): """make a fresh database""" - shelve.open(LIBRARY_DB,'n').close() + shelve.open(cfg['library_db_path'],'n').close() def add(author, title, year): - db = shelve.open(LIBRARY_DB,'c') #use w here (not c) to ensure a crash if the DB file got erased (is this a good idea?) + db = shelve.open(cfg['library_db_path'],'c') #use w here (not c) to ensure a crash if the DB file got erased (is this a good idea?) isbn = str(len(db)) #not true, but works for now db[isbn] = Book(author, title, year, isbn) db.close() @@ -89,7 +111,7 @@ def search(author=None, title=None, year=None, ISBN=None, description=None, sign this is extraordinarily inefficient, but whatever (I don't think that without having an indexer run inthe background we can improve this any?) returns: a sequence of Book objects """ - db = shelve.open(LIBRARY_DB, 'c', writeback=True) #open it for writing so that changes to books get saved + db = shelve.open(cfg['library_db_path'], 'c', writeback=True) #open it for writing so that changes to books get saved if type(year) == int: year = [year] def filter(book): @@ -134,13 +156,13 @@ def search(author=None, title=None, year=None, ISBN=None, description=None, sign def save(book): - db = shelve.open(LIBRARY_DB, "w") + db = shelve.open(cfg['library_db_path'], "w") assert book.ISBN is not None, "We should really handle this case better, like making an ISBN or something" db[book.ISBN] = book db.close() def delete(book): - db = shelve.open(LIBRARY_DB, "w") + db = shelve.open(cfg['library_db_path'], "w") del db[book.ISBN] diff --git a/ceo/library.pyc b/ceo/library.pyc index 5efa11c59e19259aec251a3c4862df616892dbfa..86c8817962f5f69c6ad649531b8a7636dfd60a01 100644 GIT binary patch literal 6571 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 G%=;ht!}nYO delta 2420 zcmZ`)TW=Fr5T3KUUf*ITbuP^fFd+@w(Bg8FsDxCY6oQIUdZ@TWs#dXg15QJnco&IO zc3ml`Nu@p%&Rbvj0TmAjRq9{pYt@HJed<3z{RN$GHi=CX;>?_L=FI)f%>H`j@0p2* z{}poj*_F8(?fj*9y~q%~d^&Nwv*1u*(-WeF6a@|~5d|q6H;L{oxD>cTO7D@<6l8=w zLqS$HSqfCoe~z9ww2-H;kAgfcThus4YA)!bYjcmsDa=Fjm9O)(P@u3tBiH8Ef1x|8 ziWFU=gQ~fm`t7>n3y&c|@igx$kD{;{ zRaWmm3RmL?VP$Qj7B(t?UD>sbxQ`i^8qJ4`vHx&!qZ;;`kKC!F&~}+2I>#vHTu4Aj ziba9NQJOXP$b`P-xqLrga~K0GhEEwH&;0Hl&Ts%NB0ptbyBC#fPNiqH21}dz+A_P_8E&&Y!jRK7^>N+Ajc?OLKA7PO6yDIBuQw(WcFr$6{Ua%pH8ci}i zj2#}UC;PbVYEG2GgR|yb!SBG+M1jb{Qlj8(sTWVrGuv)VlJ9ZIO)!#D^ZlSv^L;IW zzBMv*nmTQUisdrIx$5hRVy<^Zn-og zHriru6kXs$UFL@hi2cH=&Ud8VYn}vqm?`=QP?-@2!_%x9!;2N33CL+(UUXmYX>jPH zj66x_o1Lj=a664#h6E)&3b9LzL2#AV2v13>r25pPk_iC^W5X2$cer>OC0-nAgoTPBES$m*|Kt}SeF0Mpj&v?T`>Z*Xsq=F!zKLDBq z`Vi;@qh$P}DmsalQ@Gii|4CWF@KSvx4x4v*7fmtZZn8_Nphi^A%Jr-RJLfSqe^3YL z_gPd*R|avsu@;IkF1-%tdNtOk!7u|PE=v!faQAnJ_$kb2gsz0gr=F;~snH^V#@86Z zHy9#}H_DJ2RfDQfP{X5XauvcUneRrYJNQuPNg(NCnTRKGECWerA~hP5OCu}#I1t`U zY-kyS@9@!+uZ^(4xCSjzDq2KA88lHZT3q^!&#;+<#2ZSU17qV8DTXrdTq~>iXY-mK ToE+@O_h7hEaFt4_9N+#AVr4_S diff --git a/ceo/main.py b/ceo/main.py index 1c9ffd4..57d4e2a 100644 --- a/ceo/main.py +++ b/ceo/main.py @@ -2,11 +2,12 @@ import sys, ldap from getpass import getpass import ceo.urwid.main import ceo.console.main -from ceo import ldapi, members +from ceo import ldapi, members, library def start(): try: print "Connecting to LDAP...", + library.configure() members.connect(AuthCallback()) print "connected"