Removed dependency on type long; field_type can now be datetime.

This commit is contained in:
Jorge C. Leitão 2014-05-18 14:14:34 +02:00
parent d06da45d9d
commit 1b764d7ddf
2 changed files with 14 additions and 12 deletions

View File

@ -457,7 +457,7 @@ class XapianSearchBackendTestCase(HaystackBackendTestCase, TestCase):
self.assertEqual(len(fields), 14 + 3)
self.assertEqual(fields, [
{'column': 0, 'type': 'text', 'field_name': 'id', 'multi_valued': 'false'},
{'column': 1, 'type': 'long', 'field_name': 'django_id', 'multi_valued': 'false'},
{'column': 1, 'type': 'integer', 'field_name': 'django_id', 'multi_valued': 'false'},
{'column': 2, 'type': 'text', 'field_name': 'django_ct', 'multi_valued': 'false'},
{'column': 3, 'type': 'text', 'field_name': 'empty', 'multi_valued': 'false'},
{'column': 4, 'type': 'date', 'field_name': 'exp_date', 'multi_valued': 'false'},
@ -472,7 +472,7 @@ class XapianSearchBackendTestCase(HaystackBackendTestCase, TestCase):
{'column': 13, 'type': 'text', 'field_name': 'text', 'multi_valued': 'false'},
{'column': 14, 'type': 'text', 'field_name': 'titles', 'multi_valued': 'true'},
{'column': 15, 'type': 'text', 'field_name': 'url', 'multi_valued': 'false'},
{'column': 16, 'type': 'long', 'field_name': 'value', 'multi_valued': 'false'}
{'column': 16, 'type': 'integer', 'field_name': 'value', 'multi_valued': 'false'}
])
def test_parse_query(self):

View File

@ -80,7 +80,7 @@ class XHValueRangeProcessor(xapian.ValueRangeProcessor):
if not begin:
if field_dict['type'] == 'text':
begin = 'a' # TODO: A better way of getting a min text value?
elif field_dict['type'] == 'long':
elif field_dict['type'] == 'integer':
begin = -sys.maxint - 1
elif field_dict['type'] == 'float':
begin = float('-inf')
@ -89,7 +89,7 @@ class XHValueRangeProcessor(xapian.ValueRangeProcessor):
elif end == '*':
if field_dict['type'] == 'text':
end = 'z' * 100 # TODO: A better way of getting a max text value?
elif field_dict['type'] == 'long':
elif field_dict['type'] == 'integer':
end = sys.maxint
elif field_dict['type'] == 'float':
end = float('inf')
@ -98,9 +98,9 @@ class XHValueRangeProcessor(xapian.ValueRangeProcessor):
if field_dict['type'] == 'float':
begin = _marshal_value(float(begin))
end = _marshal_value(float(end))
elif field_dict['type'] == 'long':
begin = _marshal_value(long(begin))
end = _marshal_value(long(end))
elif field_dict['type'] == 'integer':
begin = _marshal_value(int(begin))
end = _marshal_value(int(end))
return field_dict['column'], str(begin), str(end)
@ -642,7 +642,7 @@ class XapianSearchBackend(BaseSearchBackend):
'multi_valued': 'false',
'column': 0},
{'field_name': DJANGO_ID,
'type': 'long',
'type': 'integer',
'multi_valued': 'false',
'column': 1},
{'field_name': DJANGO_CT,
@ -668,10 +668,12 @@ class XapianSearchBackend(BaseSearchBackend):
'column': column,
}
if field_class.field_type in ['date', 'datetime']:
if field_class.field_type == 'date':
field_data['type'] = 'date'
elif field_class.field_type == 'datetime':
field_data['type'] = 'datetime'
elif field_class.field_type == 'integer':
field_data['type'] = 'long'
field_data['type'] = 'integer'
elif field_class.field_type == 'float':
field_data['type'] = 'float'
elif field_class.field_type == 'boolean':
@ -1126,7 +1128,7 @@ class XapianSearchQuery(BaseSearchQuery):
"""
Returns a startswith query on the un-stemmed term.
"""
# TODO: if field_type is of type long, we need to marsh the value.
# TODO: if field_type is of type integer, we need to marsh the value.
if field_name:
query_string = '%s:%s*' % (field_name, term)
else:
@ -1250,7 +1252,7 @@ def _marshal_value(value):
value = 'f'
elif isinstance(value, float):
value = xapian.sortable_serialise(value)
elif isinstance(value, (int, long)):
elif isinstance(value, int):
value = '%012d' % value
else:
value = force_text(value).lower()