Package: pupdb
What is it?PupDB is an ernest attempt to create a simple file-based key-value database written in Python.Why PupDB?The objective behind the creation of PupDB is to create a database system which performs simple persistence operations well and data can be accessed with a minimalist, easy-to-use API with least configuration.PupDB is the best choice when:You need a simple NoSQL data store with an interface as simple as a Pythondict, and want to start storing and retrieving data within a few minutes.You want to create an application without bothering much about configuration and setup for storing data.Your database is not very huge i.e. not greater than a few megabytes of data.When not to use PupDB:You want to perform advanced queries on your data.Your database is larger than a few megabytes of data.You want a database software that supports advanced capabilities like indexing, partitioning etc.Salient FeaturesMulti-processing support: Same database file can be used across multiple processes concurrently.Mult-threading support: Same database file (with separatePupDBinstance per thread) can be used concurrently.REST-based HTTP Interface: Apart from using it as apythonpackage, you can also use PupDB via aflask-based HTTP interface. This way you can use PupDB with programming languages other than Python.InstallationPupDB can be installed usingpip:pipinstallpupdbBasic API Documentation and UsagePupDB can be instantiated as follows:frompupdb.coreimportPupDB# Specify database file path as an argument to the PupDB constructor. That's it.db=PupDB('db.json')set(key, value): Stores thevaluemapped tokeyin the database file.db.set('test_key','test_value')get(key): Returns thevaluemapped tokeyin the database file. ReturnsNoneifkeyis not found.db.get('test_key')remove(key): Removes thekeyfrom the database file. Raises aKeyErrorifkeyis not found in the database file.# Remove the key `test_key` from the db.db.remove('test_key')# Try doing the same again and it'll raise a `KeyError`,# as the key has already been deleted from the db in the above step.db.remove('test_key')keys(): Returns the keys present in the database file. Return type islistin Python 2 andDictionary view object(similar todict.keys()) in Python 3.# Python 2printdb.keys()# This will print ['key1', ...]# Python 3print(list(db.keys()))# This will print ['key1', ...]values(): Returns the values of all keys present in the database file. Return type islistfor Python 2 andDictionary view object(similar todict.values()) in Python 3.# Python 2printdb.values()# This will print ['value1', ...]# Python 3print(list(db.values()))# This will print ['value1', ...]items(): Returns the values of all keys present in the database file. Return type islistfor Python 2 andDictionary view object(similar todict.items()) in Python 3.# Python 2printdb.items()# This will print [('key1', 'value1'), ...]# Python 3print(list(db.items()))# This will print [('key1', 'value1'), ...]dumps(): Returns ajsondump of the entire database file sorted by key.db.dumps()# This will print the database json string.truncate_db(): Removes all data from the database file i.e. truncates the database file.db.truncate_db()print(db)# Will print an empty database dict '{}', as the database has been truncated.Using the PupDB HTTP/REST InterfaceUsing the HTTP/REST Interface, all PupDB-related operations can be performed without using PupDB as a Python package. As a result, PupDB can be used in any programming language that can make HTTP requests.To start PupDB'sgunicorn-basedflaskserver:frompupdb.serverimportstart_http_server# Start the gunicorn server (with 4 worker threads).start_http_server()The server will listen to local port 4000. The server will be available athttp://localhost:4000.HTTP API Endpoints/get?key=<key-goes-here>(Method:GET): This API endpoint is an interface to PupDB'sget()method. e.g.:curl-XGEThttp://localhost:4000/get?key=testThe abovecurlrequest will fetch the result for keytest./set(Method:POST): This API endpoint is an interface to PupDB'sset()method. e.g.:curl-XPOSThttp://localhost:4000/set-H'Content-Type: application/json'-d'{"key": "test", "value": "1234"}'The abovecurlrequest will set the value1234to keytestin the database./remove/<key-goes-here>(Method:DELETE): This API endpoint is an interface to PupDB'sremove()method. e.g.:curl-XDELETEhttp://localhost:4000/remove/testThe abovecurlrequest will remove the keytestin the database. It returns a404 Not Foundif the key does not exist in the database./keys(Method:GET): This API endpoint is an interface to PupDB'skeys()method. e.g.:curl-XGEThttp://localhost:4000/keysThe abovecurlrequest will return a payload containing thelistof keys in the database./values(Method:GET): This API endpoint is an interface to PupDB'svalues()method. e.g.:curl-XGEThttp://localhost:4000/valuesThe abovecurlrequest will return a payload containing thelistof values of all keys in the database./items(Method:GET): This API endpoint is an interface to PupDB'sitems()method. e.g.:curl-XGEThttp://localhost:4000/itemsThe abovecurlrequest will return a payload containing thelistof[key, value]pairs in the database./dumps(Method:GET): This API endpoint is an interface to PupDB'sdumps()method. e.g.:curl-XGEThttp://localhost:4000/dumpsThe abovecurlrequest will return a payload containing the string dump of the entire database./truncate-db(Method:POST): This API endpoint is an interface to PupDB'struncate_db()method. e.g.:curl-XPOSThttp://localhost:4000/truncate-dbThe abovecurlrequest will truncate i.e. remove all key-value pairs from the database.VersioningWe useSemVerfor versioning. For the versions available,
see thetags on this repository.LicenseThis project is licensed under the MIT License - see theLICENSE.txtfile for more details.