diff options
author | Victor Näslund <victor@sunet.se> | 2022-11-02 15:31:23 +0100 |
---|---|---|
committer | Victor Näslund <victor@sunet.se> | 2022-11-02 15:31:23 +0100 |
commit | 8baecf339e8061160bee519e87ffe837d1525c18 (patch) | |
tree | 22664c10f22382b1d4647b5f2e96bcea4220d879 /src/couch/client.py | |
parent | ffb26f4a81a9ca61c4105df037f7e1beb8dc5fb0 (diff) |
more freshup
Diffstat (limited to 'src/couch/client.py')
-rw-r--r-- | src/couch/client.py | 82 |
1 files changed, 48 insertions, 34 deletions
diff --git a/src/couch/client.py b/src/couch/client.py index 52477be..96dc78a 100644 --- a/src/couch/client.py +++ b/src/couch/client.py @@ -8,10 +8,24 @@ import copy import mimetypes import warnings -from couch import utils -from couch import feedreader -from couch import exceptions as exp -from couch.resource import Resource +from .utils import ( + force_bytes, + force_text, + encode_view_options, + extract_credentials, +) +from .feedreader import ( + SimpleFeedReader, + BaseFeedReader, +) + +from .exceptions import ( + Conflict, + NotFound, + FeedReaderExited, + UnexpectedError, +) +from .resource import Resource DEFAULT_BASE_URL = os.environ.get('COUCHDB_URL', 'http://localhost:5984/') @@ -25,16 +39,16 @@ def _id_to_path(_id: str) -> str: def _listen_feed(object, node, feed_reader, **kwargs): if not callable(feed_reader): - raise exp.UnexpectedError("feed_reader must be callable or class") + raise UnexpectedError("feed_reader must be callable or class") - if isinstance(feed_reader, feedreader.BaseFeedReader): + if isinstance(feed_reader, BaseFeedReader): reader = feed_reader(object) else: - reader = feedreader.SimpleFeedReader()(object, feed_reader) + reader = SimpleFeedReader()(object, feed_reader) # Possible options: "continuous", "longpoll" kwargs.setdefault("feed", "continuous") - data = utils.force_bytes(json.dumps(kwargs.pop('data', {}))) + data = force_bytes(json.dumps(kwargs.pop('data', {}))) (resp, result) = object.resource(node).post( params=kwargs, data=data, stream=True) @@ -44,8 +58,8 @@ def _listen_feed(object, node, feed_reader, **kwargs): if not line: reader.on_heartbeat() else: - reader.on_message(json.loads(utils.force_text(line))) - except exp.FeedReaderExited: + reader.on_message(json.loads(force_text(line))) + except FeedReaderExited: reader.on_close() @@ -100,7 +114,7 @@ class Server(object): def __init__(self, base_url=DEFAULT_BASE_URL, full_commit=True, authmethod="basic", verify=False): - self.base_url, credentials = utils.extract_credentials(base_url) + self.base_url, credentials = extract_credentials(base_url) self.resource = Resource(self.base_url, full_commit, credentials=credentials, authmethod=authmethod, @@ -112,7 +126,7 @@ class Server(object): def __contains__(self, name): try: self.resource.head(name) - except exp.NotFound: + except NotFound: return False else: return True @@ -158,7 +172,7 @@ class Server(object): """ (r, result) = self.resource.head(name) if r.status_code == 404: - raise exp.NotFound("Database '{0}' does not exists".format(name)) + raise NotFound("Database '{0}' does not exists".format(name)) db = Database(self.resource(name), name) return db @@ -206,7 +220,7 @@ class Server(object): data = {'source': source, 'target': target} data.update(kwargs) - data = utils.force_bytes(json.dumps(data)) + data = force_bytes(json.dumps(data)) (resp, result) = self.resource.post('_replicate', data=data) return result @@ -244,7 +258,7 @@ class Database(object): try: (resp, result) = self.resource.head(_id_to_path(doc_id)) return resp.status_code < 206 - except exp.NotFound: + except NotFound: return False def config(self): @@ -308,14 +322,14 @@ class Database(object): if "_deleted" not in doc: doc["_deleted"] = True - data = utils.force_bytes(json.dumps({"docs": _docs})) + data = force_bytes(json.dumps({"docs": _docs})) params = {"all_or_nothing": "true" if transaction else "false"} (resp, results) = self.resource.post( "_bulk_docs", data=data, params=params) for result, doc in zip(results, _docs): if "error" in result: - raise exp.Conflict("one or more docs are not saved") + raise Conflict("one or more docs are not saved") return results @@ -370,7 +384,7 @@ class Database(object): else: params = {} - data = utils.force_bytes(json.dumps(_doc)) + data = force_bytes(json.dumps(_doc)) print("gg1", flush=True) print(data, flush=True) @@ -390,7 +404,7 @@ class Database(object): print("vv2", flush=True) if resp.status_code == 409: - raise exp.Conflict(result['reason']) + raise Conflict(result['reason']) if "rev" in result and result["rev"] is not None: _doc["_rev"] = result["rev"] @@ -420,7 +434,7 @@ class Database(object): if "_id" not in doc: doc["_id"] = uuid.uuid4().hex - data = utils.force_bytes(json.dumps({"docs": _docs})) + data = orce_bytes(json.dumps({"docs": _docs})) params = {"all_or_nothing": "true" if transaction else "false"} (resp, results) = self.resource.post("_bulk_docs", data=data, @@ -456,9 +470,9 @@ class Database(object): if "keys" in params: data = {"keys": params.pop("keys")} - data = utils.force_bytes(json.dumps(data)) + data = force_bytes(json.dumps(data)) - params = utils.encode_view_options(params) + params = encode_view_options(params) if data: (resp, result) = self.resource.post( "_all_docs", params=params, data=data) @@ -538,7 +552,7 @@ class Database(object): resource = self.resource(doc_id) (resp, result) = resource.get(params=params) if resp.status_code == 404: - raise exp.NotFound("Document id `{0}` not found".format(doc_id)) + raise NotFound("Document id `{0}` not found".format(doc_id)) for rev in result['_revs_info']: if status and rev['status'] == status: @@ -566,10 +580,10 @@ class Database(object): (resp, result) = resource.delete( filename, params={'rev': _doc['_rev']}) if resp.status_code == 404: - raise exp.NotFound("filename {0} not found".format(filename)) + raise NotFound("filename {0} not found".format(filename)) if resp.status_code > 205: - raise exp.Conflict(result['reason']) + raise Conflict(result['reason']) _doc['_rev'] = result['rev'] try: @@ -645,7 +659,7 @@ class Database(object): if resp.status_code < 206: return self.get(doc["_id"]) - raise exp.Conflict(result['reason']) + raise Conflict(result['reason']) def one(self, name, flat=None, wrapper=None, **kwargs): """ @@ -665,16 +679,16 @@ class Database(object): params = {"limit": 1} params.update(kwargs) - path = utils._path_from_name(name, '_view') + path = _path_from_name(name, '_view') data = None if "keys" in params: data = {"keys": params.pop('keys')} if data: - data = utils.force_bytes(json.dumps(data)) + data = force_bytes(json.dumps(data)) - params = utils.encode_view_options(params) + params = encode_view_options(params) result = list(self._query(self.resource(*path), wrapper=wrapper, flat=flat, params=params, data=data)) @@ -716,16 +730,16 @@ class Database(object): :returns: generator object """ params = copy.copy(kwargs) - path = utils._path_from_name(name, '_view') + path = _path_from_name(name, '_view') data = None if "keys" in params: data = {"keys": params.pop('keys')} if data: - data = utils.force_bytes(json.dumps(data)) + data = force_bytes(json.dumps(data)) - params = utils.encode_view_options(params) + params = encode_view_options(params) result = self._query(self.resource(*path), wrapper=wrapper, flat=flat, params=params, data=data) @@ -768,7 +782,7 @@ class Database(object): """ path = '_find' - data = utils.force_bytes(json.dumps(selector)) + data = force_bytes(json.dumps(selector)) (resp, result) = self.resource.post(path, data=data, params=kwargs) @@ -780,7 +794,7 @@ class Database(object): def index(self, index_doc, **kwargs): path = '_index' - data = utils.force_bytes(json.dumps(index_doc)) + data = force_bytes(json.dumps(index_doc)) (resp, result) = self.resource.post(path, data=data, params=kwargs) |