
Security News
vlt Launches "reproduce": A New Tool Challenging the Limits of Package Provenance
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
CouchDB3 is a wrapper around the CouchDB API. For more detailed information, please refer to the documentation.
Big parts of the documentation (and thus docstrings) have been copied from CouchDB's API's great official documentation.
>= 3.7
3.x
Installing via PyPi
pip install couchdb3
Installing via Github
python -m pip install git+https://github.com/n-Vlahovic/couchdb3.git
Installing from source
git clone https://github.com/n-Vlahovic/couchdb3
python -m pip install -e couchdb3
import couchdb3
client = couchdb3.Server(
"http://user:password@127.0.0.1:5984"
)
# Checking if the server is up
print(client.up())
# True
user and password can also be passed into the Server constructor as keyword parameters, e.g.
client = couchdb3.Server(
"127.0.0.1:5984", # Scheme omitted - will assume http protocol
user="user",
password="password"
)
Both approaches are equivalent, i.e. in both cases the instance's scheme,host,port,user,password
will be identical.
Further, clients can be used with context managers:
with couchdb3.Server("http://user:password@127.0.0.1:5984") as client:
# Do stuff
...
dbname = "mydb"
db = client.get(dbname) if dbname in client else client.create(dbname)
print(db)
# Database: mydb
mydoc = {
"_id": "mydoc-id",
"name": "Hello",
"type": "World"
}
print(db.save(mydoc))
# ('mydoc-id', True, '1-24fa3b3fd2691da9649dd6abe3cafc7e')
Note: Database.save
requires the document to have an id (i.e. a key _id
),
Database.create
does not.
To update an existing document, retrieving the revision is paramount.
In the example below, dbdoc
contains the key _rev
and the builtin dict.update
function is used to update the
document before saving it.
mydoc = {
"_id": "mydoc-id",
"name": "Hello World",
"type": "Hello World"
}
dbdoc = db.get(mydoc["_id"])
dbdoc.update(mydoc)
print(db.save(dbdoc))
# ('mydoc-id', True, '2-374aa8f0236b9120242ca64935e2e8f1')
Alternatively, one can use Database.rev
to fetch the latest revision and overwrite the document
mydoc = {
"_id": "mydoc-id",
"_rev": db.rev("mydoc-id"),
"name": "Hello World",
"type": "Hello World"
}
print(db.save(mydoc))
# ('mydoc-id', True, '3-d56b14b7ffb87960b51d03269990a30d')
To delete a document, the docid
and rev
are needed
docid = "mydoc-id"
print(db.delete(docid=docid, rev=db.rev(docid))) # Fetch the revision on the go
# True
For a partitioned database, the couchdb3.database.Partition
class offers a wrapper around partitions (acting similarly
to collections in Mongo).
from couchdb3 import Server, Database, Partition
client: Server = Server(...)
db: Database = client["some-db"]
partition: Partition = db.get_partition("partition_id")
Partition instances append the partition's ID the document IDs (partition-id:doc-id
) for a simpler user interaction,
e.g.
doc_id = "test-id"
print(doc_id in partition) # no need to append the partition's ID
rev = partition.rev(doc_id)
partition.save({
"_id": doc_id, # no need to append the partition's ID
"_rev": rev,
...
})
The partition ID will only be appended provided document IDs do not start with partition-id
, e.g. the following will
work and be equivalent to the previous example
doc_id = "partition_id:test-id"
print(doc_id in partition)
rev = partition.rev(doc_id)
partition.save({
"_id": doc_id,
"_rev": rev,
...
})
FAQs
A wrapper around the CouchDB API.
We found that CouchDB3 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.