PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/sdb/
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64
IP: 209.182.202.254
Choose File :

Url:
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/sdb/couchdb.py

"""
CouchDB sdb Module

:maintainer:    SaltStack
:maturity:      New
:depends:       python2-couchdb
:platform:      all

This allow interaction between Salt and a CouchDB [couchdb.apache.org]
database. It uses salt's `sdb` system to allow for inserts and retrevals
using the `sdb://` prefix in salt configuration files.

To use the couchbase sdb module, it must first be configured in the salt
master or minion config. The following arguments are required:

.. code-block:: yaml

    couchdb_sdb:
      driver: couchdb
      host: localhost
      port: 5984
      database: salt_sdb

One could then query the CouchDB instance via an `sdb://` URI such as the
following:

.. code-block:: yaml

    password: sdb://couchdb_sdb/mykey

To use this interface, you must track IDs on your own or have another source
to do the map-reduce logic necessary to calculate the ID you wish to fetch.

Additional contributions to build true map-reduce functionality into this module
would be welcome.
"""

# Import Python libraries
import logging
from uuid import uuid4

# Import Salt libraries
from salt.utils.decorators import memoize

try:
    import couchdb

    HAS_COUCH = True
except ImportError:
    HAS_COUCH = False


log = logging.getLogger(__name__)

# 'set' is a reserved word
__func_alias__ = {"set_": "set"}


def __virtual__():
    """
    Require the python2-couchdb libraries
    """
    return HAS_COUCH


@memoize
def _construct_uri(profile):
    """
    Examine configuration and return
    a uri for the couchdb server in the following format:

    .. code-block:: bash

        http://localhost:5984/
    """
    return "http://{host}:{port}".format(**profile)


def _get_conn(profile):
    """
    Get a connection to CouchDB
    """
    DEFAULT_BASE_URL = _construct_uri(profile) or "http://localhost:5984"

    server = couchdb.Server()
    if profile["database"] not in server:
        server.create(profile["database"])
    return server


def set_(key, value, profile=None):
    """
    Set a key/value pair in couchdb
    """
    db = _get_db(profile)
    return db.save({"_id": uuid4().hex, key: value})


def get(key, profile=None):
    """
    Get a value from couchdb by id
    """
    db = _get_db(profile)
    return db.get(key)


def _get_db(profile):
    """
    Wraps _get_conn() to return a db
    """
    server = _get_conn(profile)
    db = _get_db(profile)
    return db