Esempio n. 1
0
    def test_time_add(self):
        time = "1970-01-25T02:00:00Z"
        q1 = query.time_add(query.epoch(1, "hour"), 577, "hour")
        q2 = query.time_add(query.epoch(2, "hour"), 24, "days")

        self.assertIsInstance(self._q(q1), FaunaTime)
        self.assertEqual(self._q(q1), FaunaTime(time))

        self.assertIsInstance(self._q(q2), FaunaTime)
        self.assertEqual(self._q(q2), FaunaTime(time))
Esempio n. 2
0
    def test_time_subtract(self):
        time = "1970-01-01T00:00:00Z"
        qry1 = query.time_subtract(query.epoch(1, "hour"), 1, "hour")
        qry2 = query.time_subtract(query.epoch(1, "day"), 24, "hour")

        self.assertIsInstance(self._q(qry1), FaunaTime)
        self.assertEqual(self._q(qry1), FaunaTime(time))

        self.assertIsInstance(self._q(qry2), FaunaTime)
        self.assertEqual(self._q(qry2), FaunaTime(time))
    def test_time(self):
        test_ts = FaunaTime("1970-01-01T00:00:00.123456789Z")
        test_ts_json = '{"@ts":"1970-01-01T00:00:00.123456789Z"}'
        self.assertJson(test_ts, test_ts_json)

        self.assertToJson(datetime.fromtimestamp(0, iso8601.UTC),
                          '{"@ts":"1970-01-01T00:00:00Z"}')

        self.assertEqual(repr(test_ts),
                         "FaunaTime('1970-01-01T00:00:00.123456789Z')")

        self.assertNotEqual(test_ts, FaunaTime("some_other_time"))
Esempio n. 4
0
def _parse_json_hook(dct):
    #pylint: disable=too-many-return-statements
    """
  Looks for FaunaDB types in a JSON object and converts to them if possible.
  """
    if "@ref" in dct:
        ref = dct["@ref"]

        if (not "collection" in ref) and (not "database" in ref):
            return Native.from_name(ref["id"])

        return Ref(ref["id"], ref.get("collection"), ref.get("database"))
    if "@obj" in dct:
        return dct["@obj"]
    if "@set" in dct:
        return SetRef(dct["@set"])
    if "@query" in dct:
        return Query(dct["@query"])
    if "@ts" in dct:
        return FaunaTime(dct["@ts"])
    if "@date" in dct:
        return parse_date(dct["@date"]).date()
    if "@bytes" in dct:
        return bytearray(urlsafe_b64decode(dct["@bytes"].encode()))
    return dct
Esempio n. 5
0
    def test_complex_object(self):
        self.maxDiff = None
        json = """{
      "ref": {"@ref":{"collection":{"@ref":{"id":"collections"}},"id":"widget"}},
      "set_ref": {"@set":{"match":{"@ref":{"collection":{"@ref":{"id":"collections"}},"id":"widget"}},"terms":"Laptop"}},
      "date": {"@date":"1970-01-01"},
      "time": {"@ts":"1970-01-01T00:00:00.123456789Z"},
      "object": {"@obj":{"key":"value"}},
      "array": [1, 2],
      "string": "a string",
      "number": 1
    }"""

        self.assertJson(
            json, {
                "ref":
                Ref("widget", Native.COLLECTIONS),
                "set_ref":
                SetRef({
                    "match": Ref("widget", Native.COLLECTIONS),
                    "terms": "Laptop"
                }),
                "date":
                parse_date("1970-01-01").date(),
                "time":
                FaunaTime("1970-01-01T00:00:00.123456789Z"),
                "object": {
                    "key": "value"
                },
                "array": [1, 2],
                "string":
                "a string",
                "number":
                1
            })
Esempio n. 6
0
 def default(self, obj):
     if isinstance(obj, _Expr):
         return obj.to_fauna_json()
     elif isinstance(obj, datetime):
         return FaunaTime(obj).to_fauna_json()
     elif isinstance(obj, date):
         return {"@date": obj.isoformat()}
     elif isinstance(obj, (bytes, bytearray)):
         return {"@bytes": urlsafe_b64encode(obj).decode('utf-8')}
     else:
         raise UnexpectedError(
             "Unserializable object {} of type {}".format(obj, type(obj)),
             None)
    def test_time_conversion(self):
        dt = datetime.now(iso8601.UTC)
        self.assertEqual(FaunaTime(dt).to_datetime(), dt)

        # Must be time zone aware.
        self.assertRaises(ValueError, lambda: FaunaTime(datetime.utcnow()))

        dt = datetime.fromtimestamp(0, iso8601.UTC)
        ft = FaunaTime(dt)
        self.assertEqual(ft, FaunaTime("1970-01-01T00:00:00Z"))
        self.assertEqual(ft.to_datetime(), dt)
Esempio n. 8
0
def from_fauna_time(fauna_time: FaunaTime) -> datetime:
    tz = timezone(settings.TIMEZONE)
    return fauna_time.to_datetime().astimezone(tz)
 def test_fauna_time(self):
     self.assertJson(FaunaTime('1970-01-01T00:00:00.123456789Z'),
                     '{"@ts":"1970-01-01T00:00:00.123456789Z"}')
     self.assertJson(datetime.fromtimestamp(0, iso8601.UTC),
                     '{"@ts":"1970-01-01T00:00:00Z"}')
Esempio n. 10
0
 def test_epoch(self):
     self.assertEqual(self._q(query.epoch(12, "second")),
                      FaunaTime("1970-01-01T00:00:12Z"))
     nano_time = FaunaTime("1970-01-01T00:00:00.123456789Z")
     self.assertEqual(self._q(query.epoch(123456789, "nanosecond")),
                      nano_time)
Esempio n. 11
0
    def test_time(self):
        time = "1970-01-01T00:00:00.123456789Z"
        self.assertEqual(self._q(query.time(time)), FaunaTime(time))

        # "now" refers to the current time.
        self.assertIsInstance(self._q(query.time("now")), FaunaTime)
Esempio n. 12
0
 def test_to_time(self):
     time = "1970-01-01T00:00:00Z"
     self.assertEqual(self._q(query.to_time(time)), FaunaTime(time))
Esempio n. 13
0
 def test_fauna_time(self):
     self.assertJson('{"@ts":"1970-01-01T00:00:00.123456789Z"}',
                     FaunaTime('1970-01-01T00:00:00.123456789Z'))