class FieldProbe(Model): tablename = 'FieldProbes' name = Field.string() kind = Field.string() min_frequency = Field.float() max_frequency = Field.float() min_frequency_unit = Field.string(default='GHz') max_frequency_unit = Field.string(default='GHz') correction_factor = Field.string() # filename default = Field.bool() validation = { "name": { 'presence': True }, "kind": { 'presence': True, 'in': ('e', 'h') }, "min_frequency": { 'presence': True }, "max_frequency": { 'presence': True }, "correction_factor": { 'allow': 'empty' }, } repr_values = {'kind': lambda kind: {'e': 'E', 'h': 'H'}.get(kind)} default_values = {'default': False, 'correction_factor': 1} indexes = {'name_index': {'fields': ['name'], 'unique': True}} @before_update def set_as_default(self, dbset, fields): self._set_as_default(fields) @before_insert def set_new_as_default(self, fields): self._set_as_default(fields) @staticmethod def _set_as_default(fields): if fields['default']: probes = FieldProbe.where(lambda s: (s.default == True)).select() for probe in probes: probe.update_record(default=False)
class Fortune(Model): tablename = "fortune" message = Field.string() @rowmethod('serialize') def _serialize(self, row): return {'id': row.id, 'message': row.message}
class Fortune(Model): tablename = "fortune" message = Field.string() @rowmethod("serialize") def _serialize(self, row): return {"id": row.id, "message": row.message}
class SpectrumAnalyzer(Model): tablename = 'SpectrumAnalyzers' has_many({'probes': 'FieldProbe'}, {'scans': 'Scan'}) name = Field.string() model = Field.string() min_frequency = Field.float() max_frequency = Field.float() min_frequency_unit = Field.string(default='GHz') max_frequency_unit = Field.string(default='GHz') default = Field.bool() validation = { "name": { 'presence': True }, "model": { 'presence': True }, "min_frequency": { 'presence': True }, "max_frequency": { 'presence': True }, } default_values = {'default': False} indexes = {'name_index': {'fields': ['name'], 'unique': True}} @before_update def set_as_default(self, dbset, fields): self._set_as_default(fields) @before_insert def set_new_as_default(self, fields): self._set_as_default(fields) @staticmethod def _set_as_default(fields): if fields['default']: analyzers = SpectrumAnalyzer.where(lambda s: (s.default == True)).select() for analyzer in analyzers: analyzer.update_record(default=False)
class Scan(Model): tablename = 'Scans' belongs_to({'analyzer': 'SpectrumAnalyzer'}) belongs_to({'probe': 'FieldProbe'}) has_one({'result_mat': 'ScanResultMat'}) name = Field.string() date = Field.datetime() kind = Field.string() min_frequency = Field.float() max_frequency = Field.float() min_frequency_unit = Field.string(default='GHz') max_frequency_unit = Field.string(default='GHz') min_x = Field.float(validation={'blank': True, 'gte': 0}) min_y = Field.float(validation={'blank': True, 'gte': 0}) min_z = Field.float(validation={'blank': True, 'gte': 0}) max_x = Field.float(validation={'blank': True, 'gt': 0}) max_y = Field.float(validation={'blank': True, 'gt': 0}) max_z = Field.float(validation={'blank': True, 'gt': 0}) pcb_filename = Field.string(default='') status = Field.string() progress = Field.int(default=0) validation = { 'name': { 'presence': True }, 'kind': { 'presence': True, 'in': ('flat', 'volumetric', 'z') }, 'min_frequency': { 'presence': True, 'gt': 0 }, 'max_frequency': { 'presence': True, 'gt': 0 }, } repr_values = { 'kind': lambda kind: { 'flat': 'Flat', 'volumetric': 'Volumetric', 'z': 'Z-variable' }.get(kind), 'date': lambda date: date.strftime("%d.%m.%Y") } default_values = { 'date': lambda: datetime.now, } indexes = {'name_index': {'fields': ['name'], 'unique': True}}
class ExampleModel(Model): foo = Field.string() bar = Field.string()
class ScanResultMat(Model): tablename = 'ScanResultsMat' belongs_to({'scan': 'Scan'}) mat_filename = Field.string(default='')
class Stuff(Model): a = Field.string() b = Field() price = Field.float() quantity = Field.int() total = Field.float() invisible = Field() validation = {"a": {'presence': True}} fields_rw = {"invisible": False} form_labels = {"a": "A label"} form_info = {"a": "A comment"} update_values = {"a": "a_update"} repr_values = {"a": _represent_f} form_widgets = {"a": _widget_f} def setup(self): self.table.b.requires = notInDb(self.db, self.table.b) @compute('total') def eval_total(self, row): return row.price * row.quantity @before_insert def bi(self, fields): return _call_bi(fields) @after_insert def ai(self, fields, id): return _call_ai(fields, id) @before_update def bu(self, set, fields): return _call_u(set, fields) @after_update def au(self, set, fields): return _call_u(set, fields) @before_delete def bd(self, set): return _call_d(set) @after_delete def ad(self, set): return _call_d(set) @rowattr('totalv') def eval_total_v(self, row): return row.price * row.quantity @rowmethod('totalm') def eval_total_m(self, row): return row.price * row.quantity @classmethod def method_test(cls, t): return cls.db, cls.table, t