Trees | Index | Help |
---|
|
1 2 from configParser import C3Object 3 from baseObjects import RecordStore, Record 4 from baseStore import SimpleStore, BdbStore 5 from record import SaxRecord 6 from c3errors import * 7 from document import StringDocument 8 import time, cPickle 9 from utils import nonTextToken 10 11 # Fastest to pickle elementHash, append to list, then join with nonTextToken 12 1315 inTransformer = None 16 outParser = None 17 idNormalizer = None 18165 166 167 from baseStore import BdbIter 17520 if (not self.paths): 21 RecordStore.__init__(self, session, node, parent) 22 self.inTransformer = self.get_path(None, 'inTransformer') 23 self.outParser = self.get_path(None, 'outParser') 24 self.idNormalizer = self.get_path(None, 'idNormalizer')25 2628 29 p = self.permissionHandlers.get('info:srw/operation/1/create', None) 30 if p: 31 if not session.user: 32 raise PermissionException("Authenticated user required to create an object in %s" % self.id) 33 okay = p.hasPermission(session, session.user) 34 if not okay: 35 raise PermissionException("Permission required to create an object in %s" % self.id) 36 37 id = self.generate_id(session) 38 if (record == None): 39 # Create a placeholder 40 record = SaxRecord([], "", id) 41 else: 42 record.id = id 43 record.recordStore = self.id 44 try: 45 self.store_record(session, record) 46 except ObjectAlreadyExistsException: 47 # Back out id change 48 self.currentId -= 1 49 raise 50 except: 51 raise 52 return record5355 # Hook for permissions check 56 p = self.permissionHandlers.get('info:srw/operation/1/replace', None) 57 if p: 58 if not session.user: 59 raise PermissionException("Authenticated user required to replace an object in %s" % self.id) 60 okay = p.hasPermission(session, session.user) 61 if not okay: 62 raise PermissionException("Permission required to replace an object in %s" % self.id) 63 self.store_record(session, record)6466 record.recordStore = self.id 67 if type(record.id) == unicode: 68 record.id = record.id.encode('utf-8') 69 70 # Maybe add metadata, etc. 71 if self.inTransformer != None: 72 doc = self.inTransformer.process_record(session, record) 73 data = doc.get_raw() 74 else: 75 sax = record.get_sax() 76 sax.append("9 " + cPickle.dumps(record.elementHash)) 77 data = nonTextToken.join(sax) 78 79 self.verify_checkSum(session, record.id, data) 80 self.store_data(session, record.id, data, record.size) 81 return record8284 p = self.permissionHandlers.get('info:srw/operation/2/retrieve', None) 85 if p: 86 if not session.user: 87 raise PermissionException("Authenticated user required to retrieve an object from %s" % self.id) 88 okay = p.hasPermission(session, session.user) 89 if not okay: 90 raise PermissionException("Permission required to retrieve an object from %s" % self.id) 91 92 data = self.fetch_data(session, id) 93 if (data): 94 # Allow custom parser 95 if (parser <> None): 96 doc = StringDocument(data) 97 record = parser.process_document(session, doc) 98 elif (self.outParser <> None): 99 doc = StringDocument(data) 100 record = self.outParser.process_document(session, doc) 101 else: 102 # Assume raw sax events 103 104 data = unicode(data, 'utf-8') 105 sax = data.split(nonTextToken) 106 if sax[-1][0] == "9": 107 line = sax.pop() 108 elemHash = cPickle.loads(str(line[2:])) 109 else: 110 elemHash = {} 111 112 record = SaxRecord(sax) 113 record.elementHash = elemHash 114 115 # Ensure basic required info 116 record.id = id 117 record.recordStore = self.id 118 return record 119 else: 120 raise FileDoesNotExistException()121123 p = self.permissionHandlers.get('info:srw/operation/1/delete', None) 124 if p: 125 if not session.user: 126 raise PermissionException("Authenticated user required to delete an object from %s" % self.id) 127 okay = p.hasPermission(session, session.user) 128 if not okay: 129 raise PermissionException("Permission required to replace an object from %s" % self.id) 130 131 # XXX This if -sucks- 132 # Need to fix workflow to send id, not object 133 if isinstance(id, Record): 134 id = id.id 135 self.delete_item(session, id)136 139 142144 if (parser <> None): 145 doc = StringDocument(data) 146 record = parser.process_document(session, doc) 147 elif (self.outParser <> None): 148 doc = StringDocument(data) 149 record = self.outParser.process_document(session, doc) 150 else: 151 # Assume raw sax events 152 data = unicode(data, 'utf-8') 153 sax = data.split(nonTextToken) 154 if sax[-1][0] == "9": 155 line = sax.pop() 156 elemHash = cPickle.loads(str(line[2:])) 157 else: 158 elemHash = {} 159 record = SaxRecord(sax) 160 record.elementHash = elemHash 161 # Ensure basic required info 162 record.id = id 163 record.recordStore = self.id 164 return record184 185 try: 186 from baseStore import PostgresStore 187 class PostgresRecordStore(PostgresStore, SimpleRecordStore): 188 def __init__(self, session, node, parent): 189 PostgresStore.__init__(self, session, node, parent) 190 SimpleRecordStore.__init__(self, session, node, parent)178 BdbStore.__init__(self, session, node, parent) 179 SimpleRecordStore.__init__(self, session, node, parent)180
Trees | Index | Help |
---|
Generated by Epydoc 3.0alpha2 on Wed Aug 9 18:10:40 2006 | http://epydoc.sf.net |