From 24edeb3247952df818ddf82798552e780908095f Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Tue, 29 Sep 2015 22:07:50 +0000 Subject: [PATCH] support array slice notation https://rethinkdb.com/api/python/slice/ --- rethinkstuff/__init__.py | 5 ++++- tests/test_rethinker.py | 21 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/rethinkstuff/__init__.py b/rethinkstuff/__init__.py index f53f6a5..538fd37 100644 --- a/rethinkstuff/__init__.py +++ b/rethinkstuff/__init__.py @@ -15,6 +15,9 @@ class RethinkerWrapper(object): delegate = getattr(self.wrapped, name) return self.rethinker.wrap(delegate) + def __getitem__(self, key): + return self.rethinker.wrap(self.wrapped.__getitem__)(key) + def __repr__(self): return "".format(repr(self.wrapped)) @@ -73,7 +76,7 @@ class Rethinker(object): except ValueError: return r.connect(host=server) except Exception as e: - self.logger.error('will keep trying to get a connection after failure connecting to %s', server, exc_info=True) + self.logger.error('will keep trying to get a connection after failure connecting to %s: %s', server, e) time.sleep(0.5) def wrap(self, delegate): diff --git a/tests/test_rethinker.py b/tests/test_rethinker.py index 85877af..3648b38 100644 --- a/tests/test_rethinker.py +++ b/tests/test_rethinker.py @@ -18,18 +18,22 @@ class RethinkerForTesting(rethinkstuff.Rethinker): # logging.info("self.last_conn=%s", self.last_conn) return self.last_conn -def test_rethinker(): +@pytest.fixture(scope="module") +def r(): r = RethinkerForTesting() result = r.db_create("my_db").run() assert not r.last_conn.is_open() assert result["dbs_created"] == 1 + return RethinkerForTesting(db="my_db") - r = RethinkerForTesting(db="my_db") +@pytest.fixture(scope="module") +def my_table(r): assert r.table_list().run() == [] result = r.table_create("my_table").run() assert not r.last_conn.is_open() assert result["tables_created"] == 1 +def test_rethinker(r, my_table): assert r.table("my_table").index_create("foo").run() == {"created": 1} assert not r.last_conn.is_open() @@ -66,8 +70,21 @@ def test_rethinker(): # connection should be closed after result is garbage-collected assert not r.last_conn.is_open() +def test_too_many_errors(r): with pytest.raises(rethinkdb.errors.ReqlOpFailedError): r.table_create("too_many_replicas", replicas=99).run() with pytest.raises(rethinkdb.errors.ReqlOpFailedError): r.table_create("too_many_shards", shards=99).run() +def test_slice(r, my_table): + """Tests RethinkerWrapper.__getitem__()""" + result = r.table("my_table")[5:10].run() + assert r.last_conn.is_open() # should still be open this time + assert isinstance(result, types.GeneratorType) + n = 0 + for x in result: + n += 1 + pass + # connection should be closed after finished iterating over results + assert not r.last_conn.is_open() + assert n == 5