Пример #1
0
 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)
Пример #2
0
 def test_type_validation(self):
     
     field = DateTimeField()
     field.value = 'f'
     self.assertRaises(ValidationError, field._type_validation)
     field.value = Arrow.utcnow()
     field._type_validation()
Пример #3
0
    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)
Пример #4
0
    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
Пример #5
0
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)
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
    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)
Пример #9
0
 def is_century_out_of_bounds(self):
     return self.date_from.year > Arrow.utcnow(
     ).year or self.date_to.year < 1800