Beispiel #1
0
    def test_get_all_products(self):
        result = get(UserTable, self.session)
        self._assert_result(result, [self.p1_history[-1], self.p2_history[-1], self.p3_history[-1]])

        result = get(UserTable, self.session, t1=datetime.utcfromtimestamp(31))
        self._assert_result(result, [self.p1_history[2], self.p2_history[0], self.p3_history[0]])

        result = get(UserTable, self.session, t1=datetime.utcfromtimestamp(11))
        self._assert_result(result, [self.p1_history[0], self.p3_history[0]])

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(11),
            t2=datetime.utcfromtimestamp(45),
        )
        self._assert_result(result, list(chain(self.p1_history[1:], self.p2_history)))
Beispiel #2
0
 def test_get_products_after_va_id(self):
     result = get(
         UserTable,
         self.session,
         va_id=3,
     )
     self._assert_result(result, [
         self.p1_history[1], self.p1_history[2], self.p1_history[3], self.p2_history[1]
     ])
Beispiel #3
0
    def test_get_multiple_products(self):
        conds = [{'product_id': 10}, {'product_id': 11}]
        result = get(UserTable, self.session, conds=conds)
        self._assert_result(result, [self.p1_history[-1], self.p2_history[-1]])

        result = get(UserTable, self.session, t1=datetime.utcfromtimestamp(15), conds=conds)
        self._assert_result(result, self.p1_history[:1])

        result = get(UserTable, self.session, t1=datetime.utcfromtimestamp(25), conds=conds)
        self._assert_result(result, [self.p1_history[1], self.p2_history[0]])

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(11),
            t2=datetime.utcfromtimestamp(45),
            conds=conds,
        )
        self._assert_result(result, list(chain(self.p1_history[1:], self.p2_history)))
Beispiel #4
0
    def test_failure_conditions(self):
        '''
        Pass invalid conds arguments and ensure the query fails.
        '''
        conds = [{'product_id': 10, 'foo': 15}]
        with self.assertRaises(ValueError):
            get(UserTable, self.session, t1=datetime.utcfromtimestamp(31), conds=conds)

        conds = [{'pid': 10}]
        with self.assertRaises(ValueError):
            get(UserTable, self.session, t1=datetime.utcfromtimestamp(31), conds=conds)

        with self.assertRaises(ValueError):
            get(UserTable, self.session, page=-10)
Beispiel #5
0
    def test_get_single_product_no_change(self):
        '''
        Performs a query for p3 which has no changes for current time, previous time slice,
        a time period that includes t1, and a time period that does not include t1.
        '''
        conds = [{'product_id': 2546}]
        result = get(UserTable, self.session, conds=conds)
        self._assert_result(result, self.p3_history)

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(5),
            conds=conds,
        )
        self.assertEquals(len(result), 0)

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(15),
            conds=conds,
        )
        self._assert_result(result, self.p3_history)

        result = get(
            UserTable,
            self.session,
            t1=self.t1,
            conds=conds,
        )
        self._assert_result(result, self.p3_history)

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(5),
            t2=datetime.utcfromtimestamp(11),
            conds=conds,
        )
        self._assert_result(result, self.p3_history)

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(11),
            t2=datetime.utcfromtimestamp(15),
            conds=conds,
        )
        self.assertEquals(len(result), 0)
Beispiel #6
0
    def test_get_single_product_with_change(self):
        '''
        Performs a query for p1 which has been changed 3 times for current time, previous time
        slices, and various time periods.
        '''
        conds = [{'product_id': 10}]
        result = get(UserTable, self.session, conds=conds)
        self._assert_result(result, self.p1_history[-1:])

        result = get(UserTable, self.session, t1=datetime.utcfromtimestamp(15), conds=conds)
        self._assert_result(result, self.p1_history[:1])

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(35),
            conds=conds,
        )
        self._assert_result(result, self.p1_history[2:3])

        result = get(
            UserTable,
            self.session,
            t2=datetime.utcfromtimestamp(35),
            conds=conds,
        )
        self._assert_result(result, self.p1_history[:3])

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(11),
            t2=datetime.utcfromtimestamp(45),
            conds=conds,
        )
        self._assert_result(result, self.p1_history[1:])

        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(11),
            t2=datetime.utcfromtimestamp(35),
            conds=conds,
        )
        self._assert_result(result, self.p1_history[1:3])
Beispiel #7
0
 def test_paging_results(self):
     self.session.execute('delete from {}'.format(UserTable.__tablename__))
     self.session.execute('delete from {}'.format(ArchiveTable.__tablename__))
     t = datetime.utcfromtimestamp(10000)
     with mock.patch('versionalchemy.models.datetime') as p:
         p.now.return_value = t
         history = []
         self.p1['col2'] = 0
         p1 = UserTable(**self.p1)
         self.session.add(p1)
         self.session.commit()
         history.append(self._history(p1, t, self.p1['col2']))
         # make 500 changes
         for i in xrange(500):
             self.p1['col2'] += 1
             self.p1['col3'] = int(i < 250)
             self.p1['col1'] = 'foobar' + '1' * ((i + 1) / 10)
             [setattr(p1, k, v) for k, v in self.p1.iteritems()]
             self.session.add(p1)
             self.session.commit()
             history.append(self._history(p1, t, self.p1['col2']))
         result = get(
             UserTable,
             self.session,
             t1=datetime.utcfromtimestamp(0),
             t2=datetime.utcfromtimestamp(10000000000),
             page=1,
             page_size=1000,
         )
         self._assert_result(result, history)
         result = get(
             UserTable,
             self.session,
             t1=datetime.utcfromtimestamp(0),
             t2=datetime.utcfromtimestamp(10000000000),
             page=1,
             page_size=100
         )
         self._assert_result(result, history[:100])
         result = get(
             UserTable,
             self.session,
             t1=datetime.utcfromtimestamp(0),
             t2=datetime.utcfromtimestamp(10000000000),
             page=3,
             page_size=100
         )
         self._assert_result(result, history[200:300])
         result = get(
             UserTable,
             self.session,
             t1=datetime.utcfromtimestamp(0),
             t2=datetime.utcfromtimestamp(10000000000),
             page=5,
             page_size=100
         )
         self._assert_result(result, history[400:500])
         result = get(
             UserTable,
             self.session,
             t1=datetime.utcfromtimestamp(0),
             t2=datetime.utcfromtimestamp(10000000000),
             fields=['col1'],
             page=1,
             page_size=80
         )
         self._assert_result(result, history[0:80:10], fields=['col1'])
Beispiel #8
0
    def test_fields_query(self):
        '''
        Test specifying fields and make sure dedup happens correctly.
        '''
        def prune_data(d, fields):
            return {k: d[k] for k in fields}

        conds = [{'product_id': 10}]

        fields = ['col2']
        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(9),
            t2=datetime.utcfromtimestamp(45),
            conds=conds,
            fields=fields,
        )
        expected = [self.p1_history[0], self.p1_history[3]]
        self._assert_result(result, expected, fields=fields)

        fields = ['col1', 'col2']
        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(9),
            t2=datetime.utcfromtimestamp(45),
            conds=conds,
            fields=fields,
        )
        self._assert_result(result, self.p1_history, fields=fields)

        fields = ['col1']
        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(9),
            t2=datetime.utcfromtimestamp(45),
            fields=fields,
        )
        self._assert_result(
            result,
            list(chain(self.p1_history[:3], self.p2_history[:1], self.p3_history)),
            fields=fields,
        )

        fields = ['col1', 'col2']
        result = get(
            UserTable,
            self.session,
            t1=datetime.utcfromtimestamp(11),
            conds=conds,
            fields=fields,
        )
        self._assert_result(result, self.p1_history[:1], fields=fields)

        fields = ['col1', 'col2']
        result = get(
            UserTable,
            self.session,
            conds=conds,
            fields=fields,
        )
        self._assert_result(result, self.p1_history[-1:], fields=fields)

        fields = ['col1', 'invalid_col']
        result = get(
            UserTable,
            self.session,
            conds=conds,
            fields=fields,
        )
        self.p1_history[-1]['va_data']['invalid_col'] = None
        self._assert_result(result, self.p1_history[-1:], fields=fields)