I’ve added some new functions to the python API to FluidDB in the fdb.py library. This has been pushed to GitHub (http://github.com/njr0/fdb.py).
At the moment, the functionality is somewhat embryonic, but useful. Basically there are new functions to:
Create a namespace, e.g.id = db.create_namespace ('/njr/bas/bar/foo', 'three levels deep', verbose=True)
This is recursive, and will create bas under /njr and bar under bas if required.
Delete a namespace:status = db.delete_namespace ('bas/bar/foo')
This is not recursive, though arguments for recurse and force have been added to the function signature. (They are casually ignored at present.)
Fetch the description of a namespace, e.g.print db.describe_namespace ('bas/bar/foo')
These follow FDB’s usual convention that if paths start with a ‘/’ they are taken to be absolute, and if not they are taken to be relative to the user’s top-level namespace. So for me (njr), /njr/foo/bar is the same as foo/bar.
Points to note:
- There are no unit tests for this functionality yet (lazy, lazy, bad njr!)
- There is, however, a set of examples in nstest.py that illustrate and, to some extent, test the functionality (I know, I know, why not just make them tests. I will, I will.)
- There are no new commands in the CLI to leverage this APi functionality. (As you might imagine, I don’t intend that to be a permanent state of affairs.)
- Not only are there no new commands, but the existing commands have not been extended to take advantage of the new functionality properly, So, for example, fdb tag still can’t use the new namespace created. Ridiculous? Yes.
The following code shows the API:
import fdb import simplejson as json db = fdb.FluidDB () user = db.credentials.username db.create_namespace ('subs', 'Subnamespace of njr', verbose=True) print db.delete_namespace ('/%s/subs' % user, verbose=True) print db.create_namespace ('bas/bar/foo', 'three levels deep', verbose=True) print print db.describe_namespace ('/%s/bas/bar/foo' % user), '\n' print db.describe_namespace ('/%s/bas/bar' % user), '\n' print db.describe_namespace ('/%s/bas' % user), '\n\n' db.delete_namespace ('/%s/bas/bar/foo' % user, verbose=True) db.delete_namespace ('bas/bar', verbose=True) db.delete_namespace ('/%s/bas' % user, verbose=True) print assert db.describe_namespace ('bas/bar/foo') == 404 assert db.describe_namespace ('bas/bar') == 404 assert db.describe_namespace ('bas') == 404 print 'All namespaces verified to have been deleted.'
It produces the following output (starting from a clean sheet, anyway).
Created namespace /njr/subs with ID 1671aa1f-9cdb-44a0-b55e-ed4ca78553cd Removed namespace /njr/subs Created namespace /njr/bas with ID 2ce1aa8e-d069-4d3b-960c-40685c47868f Created namespace /njr/bas/bar with ID 4328b9ec-d96a-40e4-9a30-6906d360d9a8 Created namespace /njr/bas/bar/foo with ID d83240e7-2863-4cac-95d2-42d61b2050d4 description: three levels deep id: d83240e7-2863-4cac-95d2-42d61b2050d4 namespaceNames:  tagNames:  description: None id: 4328b9ec-d96a-40e4-9a30-6906d360d9a8 namespaceNames: ['foo'] tagNames:  description: None id: 2ce1aa8e-d069-4d3b-960c-40685c47868f namespaceNames: ['bar'] tagNames:  Removed namespace /njr/bas/bar/foo Removed namespace /njr/bas/bar Removed namespace /njr/bas All namespaces verified to have been deleted.