# coding: utf-8
from __future__ import absolute_import, division, print_function
import datetime
from collections import Sequence
import six
[docs]def greater_than(value):
"""``'>value'``."""
return '>' + _stringify_predicate_value(value)
[docs]def less_than(value):
"""``'<value'``."""
return '<' + _stringify_predicate_value(value)
[docs]def not_equal(value):
"""``'<>value'``."""
return '<>' + _stringify_predicate_value(value)
[docs]def inclusive_range(left, right):
"""``'left--right'``."""
return (_stringify_predicate_value(left) + '--' +
_stringify_predicate_value(right))
[docs]def like(value):
"""``'~~value'``."""
return '~~' + _stringify_predicate_value(value)
[docs]def startswith(value):
"""``'^value'``."""
return '^' + _stringify_predicate_value(value)
[docs]def _stringify_predicate_value(value):
"""Convert Python objects to Space-Track compatible strings
- Booleans (``True`` -> ``'true'``)
- Sequences (``[25544, 34602]`` -> ``'25544,34602'``)
- dates/datetimes (``date(2015, 12, 23)`` -> ``'2015-12-23'``)
- ``None`` -> ``'null-val'``
"""
if isinstance(value, bool):
return str(value).lower()
elif isinstance(value, Sequence) and not isinstance(value, six.string_types):
return ','.join(_stringify_predicate_value(x) for x in value)
elif isinstance(value, datetime.datetime):
return value.isoformat(sep=' ')
elif isinstance(value, datetime.date):
return value.isoformat()
elif value is None:
return 'null-val'
else:
return str(value)