Skip to content

Instantly share code, notes, and snippets.

@thisfred
Forked from lvidarte/lai.py
Created July 10, 2012 20:02
Show Gist options
  • Save thisfred/3085870 to your computer and use it in GitHub Desktop.
Save thisfred/3085870 to your computer and use it in GitHub Desktop.
# -*- 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