Created
July 10, 2012 18:50
-
-
Save lvidarte/3085488 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import argparse | |
import json | |
import re | |
import u1db | |
from datetime import datetime | |
DB_FILENAME = "client1.u1db" | |
SERVER_URL = "http://127.0.0.1:9000/server.u1db" | |
class Client(object): | |
def __init__(self, db_filename=None, server_url=None): | |
self.db_filename = db_filename or DB_FILENAME | |
self.server_url = server_url or SERVER_URL | |
try: | |
self.db = u1db.open(self.db_filename, create=False) | |
except u1db.errors.DatabaseDoesNotExist: | |
self.db = u1db.open(self.db_filename, create=True) | |
self.db.create_index('by-data', ['data']) | |
def add(self, data): | |
self.db.create_doc(json.dumps({'data': data})) | |
def get(self, doc_id): | |
doc = self.db.get_doc(doc_id) | |
content = json.loads(doc.content) | |
print content['data'] | |
def sync(self): | |
self.db.sync(self.server_url) | |
def getall(self): | |
for doc in self._getall(): | |
content = json.loads(doc.content) | |
print "%s: %s" % (doc.doc_id, content['data']) | |
def _getall(self): | |
return self.db.get_from_index('by-data', [("*",)]) | |
def find(self, regex): | |
for doc in self._getall(): | |
content = json.loads(doc.content) | |
data = content['data'] | |
if re.search(regex, data): | |
print "%s: %s" % (doc.doc_id, data.encode('utf8')) | |
def add_for_test(self, num_docs=100, text="hello world"): | |
for i in range(num_docs): | |
self.add("%s %s" % (text, datetime.now())) | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser(prog='lai') | |
group = parser.add_mutually_exclusive_group(required=True) | |
group.add_argument('--add', '-a', metavar='doc', type=str, | |
help='Add document') | |
group.add_argument('--get', '-g', metavar='id', type=str, | |
help='Get document by id') | |
group.add_argument('--getall', '-x', action='store_true', | |
help='Get all documents') | |
group.add_argument('--sync', '-s', action='store_true', | |
help='Sync database with server') | |
group.add_argument('--find', '-f', metavar='regex', type=str, | |
help='Performs') | |
group.add_argument('--add-for-test', metavar='num_docs', type=int, | |
help='Add n test docs', dest='num_docs') | |
parser.add_argument('--database', metavar='filename', type=str, | |
help='Database filename', dest='db_filename') | |
parser.add_argument('--server', metavar='url', type=str, | |
help='Server to sync', dest='server_url') | |
args = parser.parse_args() | |
client = Client(db_filename=args.db_filename, | |
server_url=args.server_url) | |
if args.sync: | |
client.sync() | |
elif args.find: | |
client.find(args.find) | |
elif args.add: | |
client.add(args.add) | |
elif args.getall: | |
client.getall() | |
elif args.get: | |
client.get(args.get) | |
elif args.num_docs: | |
client.add_for_test(args.num_docs) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment