diff --git a/CHANGELOG.md b/CHANGELOG.md index 79b651c..d69e9e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * **master** * Added `field.rows` and `index.group_by` calls. + * Deprecated `field.range` method. Use `field.row` with `from_` and/or `to` keywords instead. * **v1.2.0** (2018-12-21) * **Compatible with Pilosa 1.2** diff --git a/integration_tests/test_client_it.py b/integration_tests/test_client_it.py index e3165a9..bed9319 100644 --- a/integration_tests/test_client_it.py +++ b/integration_tests/test_client_it.py @@ -381,7 +381,7 @@ def test_csv_roaring_import_time_field(self): target = [5, 7] start = datetime(2016, 1, 1, 0, 0) end = datetime(2019, 1, 1, 0, 0, 0) - response = client.query(field.range(10, start, end)) + response = client.query(field.row(10, from_=start, to=end)) self.assertEqual(target, response.result.row.columns) # test clear import @@ -550,7 +550,7 @@ def test_range(self): field.set(10, 100, timestamp=datetime(2018, 1, 1, 0, 0)), field.set(10, 100, timestamp=datetime(2019, 1, 1, 0, 0)), )) - response = client.query(field.range(10, start=datetime(2017, 5, 1, 0, 0), end=datetime(2018, 5, 1, 0, 0))) + response = client.query(field.row(10, from_=datetime(2017, 5, 1, 0, 0), to=datetime(2018, 5, 1, 0, 0))) self.assertEqual([100], response.result.row.columns) def test_range_field(self): diff --git a/pilosa/orm.py b/pilosa/orm.py index 2f1b597..0a4d96e 100644 --- a/pilosa/orm.py +++ b/pilosa/orm.py @@ -512,19 +512,22 @@ def copy(self): self.int_min, self.int_max, self.keys, self.mutex, self.bool) - def row(self, row_idkey): + def row(self, row_idkey, from_=None, to=None): """Creates a Row query. Row retrieves the indices of all the set columns in a row or column based on whether the row label or column label is given in the query. It also retrieves any attributes set on that row or column. - This variant of Row query uses the row label. - :param int row_idkey: + :param datetime from_: (Optional) start of the time range + :param datetime end_: (Optional) end of the time range :return: Pilosa row query :rtype: pilosa.PQLQuery * See `Query Language/Row `_ """ + if from_ or to: + # this is a row range query + return self._row_range(row_idkey, from_, to) row_str = idkey_as_str(row_idkey) fmt = u"Row(%s=%s)" return PQLQuery(fmt % (self.name, row_str), self.index) @@ -536,7 +539,7 @@ def set(self, row, col, timestamp=None): :param int row: :param int col: - :param pilosa.TimeStamp timestamp: + :param datetime timestamp: :return: Pilosa query :rtype: pilosa.PQLQuery @@ -593,6 +596,8 @@ def topn(self, n, row=None, name="", *values): def range(self, row, start, end): """Creates a Range query. + *Deprecated at Pilosa 1.3. Use `rowRange` instead.* + Similar to ``Row``, but only returns columns which were set with timestamps between the given start and end timestamps. * see: `Range Query `_ @@ -610,6 +615,18 @@ def range(self, row, start, end): return PQLQuery(fmt % (self.name, row_str, start_str, end_str), self.index) + def _row_range(self, row, start, end): + """Creates a Row query with timestamps.""" + row_str = idkey_as_str(row) + start_str = start.strftime(_TIME_FORMAT) + end_str = end.strftime(_TIME_FORMAT) + parts = ['%s=%s' % (self.name, row_str)] + if start: + parts.append("from='%s'" % start_str) + if end: + parts.append("to='%s'" % end_str) + return PQLQuery(u"Row(%s)" % ','.join(parts), self.index) + def set_row_attrs(self, row, attrs): """Creates a SetRowAttrs query. diff --git a/tests/test_orm.py b/tests/test_orm.py index 79b82d4..4b19396 100644 --- a/tests/test_orm.py +++ b/tests/test_orm.py @@ -375,6 +375,20 @@ def test_range(self): u"Range(collaboration='b7feb014-8ea7-49a8-9cd8-19709161ab63',1970-01-01T00:00,2000-02-02T03:04)", q3.serialize().query) + def test_row_range(self): + start = datetime(1970, 1, 1, 0, 0) + end = datetime(2000, 2, 2, 3, 4) + + q1 = collabField.row(10, from_=start, to=end) + self.assertEquals( + u"Row(collaboration=10,from='1970-01-01T00:00',to='2000-02-02T03:04')", + q1.serialize().query) + + q3 = collabField.row("b7feb014-8ea7-49a8-9cd8-19709161ab63", start, end) + self.assertEquals( + u"Row(collaboration='b7feb014-8ea7-49a8-9cd8-19709161ab63',from='1970-01-01T00:00',to='2000-02-02T03:04')", + q3.serialize().query) + def test_set_row_attributes(self): attrs_map = { "quote": '''"Don't worry, be happy"''',