Esempio n. 1
0
def findpath(parser, s):
    '''returns (server url, path component)'''

    if s == '.':
        return client.DEFAULT_BASE_URL, ''
    if not s.startswith('http'):
        return client.DEFAULT_BASE_URL, s

    bits = urlparse.urlparse(s)
    res = http.Resource('%s://%s/' % (bits.scheme, bits.netloc), None)
    parts = bits.path.split('/')[1:]
    if parts and not parts[-1]:
        parts = parts[:-1]

    cut = None
    for i in range(0, len(parts) + 1):
        try:
            data = res.get_json(parts[:i])[2]
        except Exception:
            data = None
        if data and 'couchdb' in data:
            cut = i

    if cut is None:
        raise parser.error("'%s' does not appear to be a CouchDB" % s)

    base = res.url + (parts[:cut] and '/'.join(parts[:cut]) or '')
    return base, '/'.join(parts[cut:])
Esempio n. 2
0
 def __init__(self, url, name=None, session=None):
     if isinstance(url, util.strbase):
         if not url.startswith('http'):
             url = DEFAULT_BASE_URL + url
         self.resource = http.Resource(url, session)
     else:
         self.resource = url
     self._name = name
Esempio n. 3
0
 def search(self, db, view, **params):
     """
     Runs a full text search on the db.
     """
     import urllib
     if db == None:
         db = connect("shiftspace/master")
     uri = 'http://localhost:5984/%s/_fti/_design/lucene' % urllib.quote_plus(
         db.name)
     resource = http.Resource(uri, None)
     status, msg, response = resource.get_json(path=view, **params)
     return response.get("rows")
Esempio n. 4
0
def fetch(db=None, view=None, keys=None):
    """
    Fetch multiple documents from the database. Useful when
    joins are necessary and making multiple requests to the db
    is an undesirable performance hit.

    Paramters:
        db - defaults to 'shiftspace'
        view - defaults to  '_all_docs'
    """
    import urllib
    if db == None:
        db = connect()

    reduce = False
    if isinstance(view, ViewDefinition):
        viewpath = "/".join(["_design", view.design, "_view", view.name])
        reduce = (view.reduce_fun != None)
    else:
        viewpath = "_all_docs"

    uri = 'http://localhost:5984/%s/%s' % (urllib.quote_plus(
        db.name), viewpath)
    resource = http.Resource(uri, None)

    params = None
    if reduce != True:
        params = {"include_docs": True}
    else:
        params = {"group": True}

    status, message, response = resource.post_json(body={"keys": keys},
                                                   **params)

    rows = response["rows"]

    if viewpath == "_all_docs":
        result = []
        for row in rows:
            value = row.get('value')
            if value and not value.get("deleted"):
                result.append(row['doc'])
            else:
                result.append(None)
        return result
    else:
        kvs = toDict(rows)
        result = []
        for key in keys:
            key = toStr(key)
            result.append((kvs.get(key) and kvs.get(key)["value"]) or None)
        return result
Esempio n. 5
0
    def __init__(self, url=DEFAULT_BASE_URL, full_commit=True, session=None):
        """Initialize the server object.

        :param url: the URI of the server (for example
                    ``http://localhost:5984/``)
        :param full_commit: turn on the X-Couch-Full-Commit header
        :param session: an http.Session instance or None for a default session
        """
        if isinstance(url, util.strbase):
            self.resource = http.Resource(url, session or http.Session())
        else:
            self.resource = url # treat as a Resource object
        if not full_commit:
            self.resource.headers['X-Couch-Full-Commit'] = 'false'
Esempio n. 6
0
 def test_init_with_resource(self):
     sess = http.Session()
     res = http.Resource(client.DEFAULT_BASE_URL, sess)
     serv = client.Server(url=res)
     serv.config()
Esempio n. 7
0
def get_or_create(url, name):
    resource = http.Resource(url, session=None)
    try:
        return resource.head(name)
    except http.ResourceNotFound:
        resource.put_json(name)
Esempio n. 8
0
 def __init__(self, url, wrapper=None, session=None):
     if isinstance(url, util.strbase):
         self.resource = http.Resource(url, session)
     else:
         self.resource = url
     self.wrapper = wrapper