def create(self, *fields, **kw): """Creates a database instance and returns a reference to it fields are tuples (field_name,field_type[,default_value]) field_name must not begin by _ field_type can be one of the values in the dictionary self.types A keyword 'mode' can be specified: 'override' : if the base already exists, remove it and create a new one 'open' : if the base already exists, open it If mode is not set, if the base exists, raise IOError In any case, if a directory of the same name exists, raise an exception """ mode = kw.get('mode', None) if os.path.exists(self.name): if os.path.exists(self.info_name): if mode == 'override': pass elif mode == 'open': return self.open() else: raise IOError, "Base %s already exists" % self.name else: if mode != 'open': raise IOError, "Directory %s already exists" % self.name else: raise IOError,"Mode 'open' : " \ "Directory %s already exists but no info file found" \ %self.name self.field_names = [f[0] for f in fields] self.fields = dict([(f[0], f[1]) for f in fields]) # set general info about field definition buzhug_info.set_info(self, fields) self.field_names = ['__id__', '__version__'] + self.field_names self.fields['__id__'] = int self.fields['__version__'] = int # create the directory used for the base if not os.path.exists(self.name): os.mkdir(self.name) # create index file self._id_pos = IntegerFile(self.name, '_id_pos').create() # create positions file open(self.pos_name, 'wb').close() self._pos = PositionFile(self).create() # create the file holding a list of the deleted rows (the line number # of deleted records in field files) self._del_rows = DeletedRowsFile(self.name, "__del_rows__").create() # create field files abstractions self._file = {} for f in self.field_names: self._file[f] = self.file_types[self.fields[f]](self.name, f) self._file[f].create() # save information in files __info__ and __defaults__ buzhug_info.save_info(self) # create class for records with all values set self._full_rec = makeRecordClass(self, self.record_class, self.field_names) return self
def create(self,*fields,**kw): """Creates a database instance and returns a reference to it fields are tuples (field_name,field_type[,default_value]) field_name must not begin by _ field_type can be one of the values in the dictionary self.types A keyword 'mode' can be specified: 'override' : if the base already exists, remove it and create a new one 'open' : if the base already exists, open it If mode is not set, if the base exists, raise IOError In any case, if a directory of the same name exists, raise an exception """ mode = kw.get('mode',None) if os.path.exists(self.name): if os.path.exists(self.info_name): if mode == 'override': pass elif mode == 'open': return self.open() else: raise IOError,"Base %s already exists" %self.name else: if mode != 'open': raise IOError,"Directory %s already exists" %self.name else: raise IOError,"Mode 'open' : " \ "Directory %s already exists but no info file found" \ %self.name self.field_names = [ f[0] for f in fields ] self.fields = dict([(f[0],f[1]) for f in fields]) # set general info about field definition buzhug_info.set_info(self,fields) self.field_names = ['__id__','__version__'] + self.field_names self.fields['__id__'] = int self.fields['__version__'] = int # create the directory used for the base if not os.path.exists(self.name): os.mkdir(self.name) # create index file self._id_pos = IntegerFile(self.name,'_id_pos').create() # create positions file open(self.pos_name,'wb').close() self._pos = PositionFile(self).create() # create the file holding a list of the deleted rows (the line number # of deleted records in field files) self._del_rows = DeletedRowsFile(self.name,"__del_rows__").create() # create field files abstractions self._file = {} for f in self.field_names: self._file[f] = self.file_types[self.fields[f]](self.name,f) self._file[f].create() # save information in files __info__ and __defaults__ buzhug_info.save_info(self) # create class for records with all values set self._full_rec = makeRecordClass(self,self.record_class,self.field_names) return self
def set_default(self, field_name, default): """Set a default value for a field""" fields = [] for f in self.field_names[2:]: if f == field_name: fields.append((f, self.fields[f], default)) elif self.defaults[f] is None: fields.append((f, self.fields[f])) else: fields.append((f, self.fields[f], self.defaults[f])) buzhug_info.set_info(self, fields)
def set_default(self,field_name,default): """Set a default value for a field""" fields = [] for f in self.field_names[2:]: if f==field_name: fields.append((f,self.fields[f],default)) elif self.defaults[f] is None: fields.append((f,self.fields[f])) else: fields.append((f,self.fields[f],self.defaults[f])) buzhug_info.set_info(self,fields)