def test_save(self): create_class(ClassToSave, client=self.client) class_to_save = ClassToSave() class_to_save.int_field = 10 class_to_save.str_field = 'foobar' class_to_save.datetime_field = Arrow.utcnow() class_to_save.float_field = 12345.547 class_to_save.save(client=self.client) loaded_class = ClassToSave.get(class_to_save.rid, client=self.client) self.assertEqual(class_to_save.__class__, loaded_class.__class__) self.assertEqual(loaded_class.rid, class_to_save.rid) self.assertEqual(loaded_class.str_field, class_to_save.str_field) self.assertEqual(loaded_class.int_field, class_to_save.int_field) self.assertEqual(loaded_class.datetime_field, class_to_save.datetime_field) self.assertEqual(loaded_class.float_field, class_to_save.float_field) self.assertEqual(loaded_class.bool_field, class_to_save.bool_field) class_to_save.int_field = 20 class_to_save.str_field = 'foobarioioioioio' class_to_save.datetime_field = Arrow.utcnow() class_to_save.float_field = None class_to_save.bool_field = False class_to_save.save(client=self.client) loaded_class = ClassToSave.get(class_to_save.rid, client=self.client) self.assertEqual(class_to_save.__class__, loaded_class.__class__) self.assertEqual(loaded_class.rid, class_to_save.rid) self.assertEqual(loaded_class.str_field, class_to_save.str_field) self.assertEqual(loaded_class.int_field, class_to_save.int_field) self.assertEqual(loaded_class.datetime_field, class_to_save.datetime_field) self.assertEqual(loaded_class.float_field, class_to_save.float_field) self.assertEqual(loaded_class.bool_field, class_to_save.bool_field)
def test_type_validation(self): field = DateTimeField() field.value = 'f' self.assertRaises(ValidationError, field._type_validation) field.value = Arrow.utcnow() field._type_validation()
def test_record_update(self): create_class(ClassToUpdate, client=self.client) class_to_update = ClassToUpdate() class_to_update.int_field = 10 class_to_update.str_field = 'foobar' class_to_update.datetime_field = Arrow.utcnow() class_to_update.float_field = 12345.547 insert(class_to_update, client=self.client) self.assertIsNotNone(class_to_update.rid) r = load(class_to_update.rid, client=self.client) self.assertEqual(r._rid, class_to_update.rid) self.assertEqual(r.oRecordData[class_to_update._py_to_orient_field_mapping['str_field']], class_to_update.str_field) self.assertEqual(r.oRecordData[class_to_update._py_to_orient_field_mapping['int_field']], class_to_update.int_field) self.assertEqual(r.oRecordData[class_to_update._py_to_orient_field_mapping['datetime_field']], class_to_update.datetime_field.timestamp) self.assertEqual(r.oRecordData[class_to_update._py_to_orient_field_mapping['float_field']], class_to_update.float_field) class_to_update.int_field = 20 class_to_update.str_field = 'barfoo' class_to_update.datetime_field = Arrow.utcnow() class_to_update.float_field = None update(class_to_update, client=self.client) self.assertIsNotNone(class_to_update.rid) r = load(class_to_update.rid, client=self.client) self.assertEqual(r._rid, class_to_update.rid) self.assertEqual(r.oRecordData[class_to_update._py_to_orient_field_mapping['str_field']], class_to_update.str_field) self.assertEqual(r.oRecordData[class_to_update._py_to_orient_field_mapping['int_field']], class_to_update.int_field) self.assertEqual(r.oRecordData[class_to_update._py_to_orient_field_mapping['datetime_field']], class_to_update.datetime_field.timestamp) self.assertFalse(class_to_update._py_to_orient_field_mapping['float_field'] in r.oRecordData)
def __init__(self, datasource, criteria, kind): self.datasource = datasource self.criteria = criteria self.kind = kind self.maxcount = 50 self.hits = -1 self.querycount = 0 self.machine = Machine(model=self, states=QueryDateRangeNarrower.states, initial='asleep') self.machine.add_transition('start', '*', 'init', after='work') self.machine.add_transition('check', '*', 'finished', conditions=['is_ready']) self.machine.add_transition('step', 'init', 'finished', conditions='is_century_out_of_bounds') self.machine.add_transition('step', 'init', 'whole', after=['runquery', 'check']) self.machine.add_transition('step', 'whole', 'init', conditions='no_hits', after='range_next_century') if self.kind == self.OLDEST: self.date_from = Arrow.fromdatetime(datetime.datetime(1800, 01, 01)) self.date_to = Arrow.fromdatetime(datetime.datetime(1899, 12, 31)) self.factor = +1 self.machine.add_transition('step', 'whole', 'left', unless='is_ready', after=['range_whole_left', 'runquery', 'check']) self.machine.add_transition('step', 'left', 'right', conditions='no_hits', after=['range_left_right', 'runquery', 'check']) self.machine.add_transition('step', 'left', 'whole', unless='is_ready', after=['range_shrink']) self.machine.add_transition('step', 'right', 'whole', unless='is_ready', after=['range_shrink']) elif self.kind == self.NEWEST: self.date_from = Arrow.fromdatetime(datetime.datetime(2000, 01, 01)) self.date_to = Arrow.utcnow() self.date_to += relativedelta(months=12-self.date_to.month, days=31-self.date_to.day) self.factor = -1 self.machine.add_transition('step', 'whole', 'right', unless='is_ready', after=['range_whole_right', 'runquery', 'check']) self.machine.add_transition('step', 'right', 'left', conditions='no_hits', after=['range_right_left', 'runquery', 'check']) self.machine.add_transition('step', 'right', 'whole', unless='is_ready', after=['range_shrink']) self.machine.add_transition('step', 'left', 'whole', unless='is_ready', after=['range_shrink']) else: raise ValueError('kind must be self.OLDEST or self.NEWEST') self.delta = (self.date_to - self.date_from) / 2
def product_info(prod_id): product = db.session.query(model.Product) \ .filter_by(id=prod_id) \ .one_or_none() if product is None: flask.abort(404) pricehistory = list(product.pricehistory) history_chart = {"labels": [], "values": [], "max": 0} if pricehistory: current_price = copy.copy(pricehistory[-1]) current_price.arrow = Arrow.utcnow() pricehistory.append(current_price) last_price = None for entry in pricehistory: if entry.price_final is not None: history_chart["labels"].append(entry.date.isoformat()) history_chart["values"].append(str(entry.price_final)) history_chart["max"] = max(history_chart["max"], entry.price_final) elif last_price is not None: history_chart["labels"].append(entry.date.isoformat()) history_chart["values"].append(str(last_price)) history_chart["labels"].append(entry.date.isoformat()) history_chart["values"].append(None) last_price = entry.price_final history_chart["max"] = float(history_chart["max"]) priceframes = [] for start, end in zip(pricehistory[:-1], pricehistory[1:]): frame = { "start": start.arrow, "end": end.arrow, "discount": start.discount, "price_final": start.price_final, "price_base": start.price_base } priceframes.append(frame) return flask.render_template("product_info.html", product=product, pricehistory=history_chart, priceframes=priceframes)
def test_from_orient(self): create_class(ClassToInsert, client=self.client) class_to_insert = ClassToInsert() class_to_insert.int_field = 10 class_to_insert.str_field = 'foobar' class_to_insert.datetime_field = Arrow.utcnow() class_to_insert.float_field = 12345.547 class_to_insert.bin_field = bytes('foo','utf-8') insert(class_to_insert, client=self.client) r = load(class_to_insert.rid, client=self.client) result = Model.from_orient(r) self.assertEqual(class_to_insert.__class__, result.__class__) self.assertEqual(result.rid, class_to_insert.rid) self.assertEqual(result.str_field, class_to_insert.str_field) self.assertEqual(result.int_field, class_to_insert.int_field) self.assertEqual(result.datetime_field, class_to_insert.datetime_field) self.assertEqual(result.float_field, class_to_insert.float_field) self.assertEqual(result.bin_field, class_to_insert.bin_field)
def test_get(self): create_class(ClassToGet, client=self.client) class_to_insert = ClassToGet() class_to_insert.int_field = 10 class_to_insert.str_field = 'foobar' class_to_insert.datetime_field = Arrow.utcnow() class_to_insert.float_field = 12345.547 class_to_insert.bin_field = bytes('foo','utf-8') class_to_insert.bool_field = True insert(class_to_insert, client=self.client) loaded_class = ClassToGet.get(class_to_insert.rid, client=self.client) self.assertEqual(class_to_insert.__class__, loaded_class.__class__) self.assertEqual(loaded_class.rid, class_to_insert.rid) self.assertEqual(loaded_class.str_field, class_to_insert.str_field) self.assertEqual(loaded_class.int_field, class_to_insert.int_field) self.assertEqual(loaded_class.datetime_field, class_to_insert.datetime_field) self.assertEqual(loaded_class.float_field, class_to_insert.float_field) self.assertEqual(loaded_class.bin_field, class_to_insert.bin_field) self.assertEqual(loaded_class.bool_field, class_to_insert.bool_field)
def test_load_record(self): create_class(ClassToLoad, client=self.client) class_to_insert = ClassToLoad() class_to_insert.int_field = 10 class_to_insert.str_field = 'foobar' class_to_insert.datetime_field = Arrow.utcnow() class_to_insert.float_field = 12345.547 class_to_insert.bin_field = bytes('foo', 'utf-8') insert(class_to_insert, client=self.client) self.assertIsNotNone(class_to_insert.rid) r = load(class_to_insert.rid, client=self.client) self.assertEqual(r._rid, class_to_insert.rid) self.assertEqual(r.oRecordData[class_to_insert._py_to_orient_field_mapping['str_field']], class_to_insert.str_field) self.assertEqual(r.oRecordData[class_to_insert._py_to_orient_field_mapping['int_field']], class_to_insert.int_field) self.assertEqual(r.oRecordData[class_to_insert._py_to_orient_field_mapping['datetime_field']], class_to_insert.datetime_field.timestamp) self.assertEqual(r.oRecordData[class_to_insert._py_to_orient_field_mapping['float_field']], class_to_insert.float_field) self.assertEqual(base64.b64decode(r.oRecordData[class_to_insert._py_to_orient_field_mapping['bin_field']].encode()), class_to_insert.bin_field)
def is_century_out_of_bounds(self): return self.date_from.year > Arrow.utcnow( ).year or self.date_to.year < 1800