Skip to content

Commit

Permalink
Support for versioned @query type
Browse files Browse the repository at this point in the history
  • Loading branch information
Trevor Sibanda committed Jul 9, 2020
1 parent 5044dab commit 1ad020d
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 7 deletions.
1 change: 1 addition & 0 deletions faunadb/__init__.py
Expand Up @@ -3,3 +3,4 @@
__author__ = "Fauna, Inc"
__license__ = "MPL 2.0"
__copyright__ = "2020 Fauna, Inc"
__api_version__ = "3"
5 changes: 2 additions & 3 deletions faunadb/client.py
Expand Up @@ -7,13 +7,12 @@
from requests.auth import HTTPBasicAuth
from requests.adapters import HTTPAdapter

from faunadb import __api_version__
from faunadb.errors import _get_or_raise, FaunaError, UnexpectedError
from faunadb.query import _wrap
from faunadb.request_result import RequestResult
from faunadb._json import parse_json_or_none, to_json

API_VERSION = "3"

class _LastTxnTime(object):
"""Wraps tracking the last transaction time supplied from the database."""
def __init__(self):
Expand Down Expand Up @@ -138,7 +137,7 @@ def __init__(
"Accept-Encoding": "gzip",
"Content-Type": "application/json;charset=utf-8",
"X-Fauna-Driver": "python",
"X-FaunaDB-API-Version": API_VERSION
"X-FaunaDB-API-Version": __api_version__
})
if self._query_timeout_ms is not None:
self.session.headers["X-Query-Timeout"] = str(self._query_timeout_ms)
Expand Down
11 changes: 11 additions & 0 deletions faunadb/objects.py
Expand Up @@ -7,6 +7,7 @@
from iso8601 import parse_date
from faunadb.deprecated import deprecated
from faunadb.query import _Expr
from faunadb import __api_version__

class Ref(_Expr):
"""
Expand Down Expand Up @@ -170,6 +171,16 @@ class Query(_Expr):
See the `docs <https://app.fauna.com/documentation/reference/queryapi#special-type>`__.
"""

def __init__(self, value):
"""
:param value:
If an api_version key is not defined, `faunadb.__api_version__` is used.
"""
if isinstance(value, dict):
if not "api_version" in value:
value["api_version"] = __api_version__
super(Query, self).__init__(value)

def to_fauna_json(self):
return {"@query": self.value}

Expand Down
8 changes: 8 additions & 0 deletions tests/test_deserialization.py
@@ -1,6 +1,7 @@
from unittest import TestCase
from iso8601 import parse_date

from faunadb import __api_version__
from faunadb.objects import Ref, SetRef, FaunaTime, Query, Native
from faunadb._json import parse_json

Expand Down Expand Up @@ -47,7 +48,14 @@ def test_bytes(self):
self.assertJson('{"@bytes":"AQID"}', bytearray(b'\x01\x02\x03'))

def test_query(self):
self.assertJson('{"@query": {"api_version": "3", "lambda": "x", "expr": {"var": "x"}}}',
Query({"api_version":"3", "lambda": "x", "expr": {"var": "x"}}))
self.assertJson('{"@query": {"lambda": "x", "expr": {"var": "x"}}}',
Query({"api_version": "3", "lambda": "x", "expr": {"var": "x"}}))
self.assertJson('{"@query": {"lambda": "x", "expr": {"var": "x"}}}',
Query({"lambda": "x", "expr": {"var": "x"}}))
self.assertJson('{"@query": {"api_version":"%s", "lambda": "x", "expr": {"var": "x"}}}'
%(__api_version__),
Query({"lambda": "x", "expr": {"var": "x"}}))

def test_string(self):
Expand Down
10 changes: 9 additions & 1 deletion tests/test_query.py
Expand Up @@ -3,7 +3,7 @@
from time import sleep

from faunadb.errors import BadRequest, NotFound
from faunadb.objects import FaunaTime, Ref, SetRef, _Expr, Native
from faunadb.objects import FaunaTime, Ref, SetRef, _Expr, Native, Query
from faunadb import query
from tests.helpers import FaunaTestCase

Expand Down Expand Up @@ -60,6 +60,14 @@ def _assert_bad_query(self, q):
def test_abort(self):
self._assert_bad_query(query.abort("aborting"))

def test_query(self):
body = self._q(query.query(lambda a, b: query.concat([a, b], "/")))
bodyEchoed = self._q(body)

self.assertEqual(body, bodyEchoed)
self.assertEqual(body, Query({"api_version":"3", "lambda": ["a", "b"], "expr": {"concat": [{"var": "a"}, {"var": "b"}], "separator": "/"}}))


def test_at(self):
document = self._create(n=1)
ref = document["ref"]
Expand Down
9 changes: 6 additions & 3 deletions tests/test_serialization.py
Expand Up @@ -3,7 +3,7 @@
from unittest import TestCase
import iso8601

from faunadb import query
from faunadb import query, __api_version__
from faunadb.objects import Ref, SetRef, FaunaTime, Query, Native
from faunadb._json import to_json

Expand Down Expand Up @@ -44,8 +44,11 @@ def test_bytes(self):
self.assertJson(b'\x01\x02\x03', '{"@bytes":"AQID"}')

def test_query(self):
self.assertJson(Query({"lambda": "x", "expr": {"var": "x"}}),
'{"@query":{"expr":{"var":"x"},"lambda":"x"}}')
expected1 = '{"@query":{"api_version":"%s","expr":{"var":"x"},"lambda":"x"}}'%(
__api_version__)
self.assertJson(Query({"lambda": "x", "expr": {"var": "x"}}), expected1)
self.assertJson(Query({"api_version": "2.12", "lambda": "x", "expr": {"var": "x"}}),
'{"@query":{"api_version":"2.12","expr":{"var":"x"},"lambda":"x"}}')

#region Basic forms

Expand Down

0 comments on commit 1ad020d

Please sign in to comment.