from couchdb import schema as s
from couchdb.client import Server
import settings
DB = None
class Manager(object):
def __init__(self, cls):
self.cls = cls
self.type = cls.TYPE
def all(self):
args = {'type': self.type}
mapf = """function(doc) { if (doc.type == '%(type)s') { emit(doc._id, doc); } }""" % args
return DB.query(mapf)
class Model(s.Document):
@classmethod
def objects(cls):
return Manager(cls)
def __init__(self, *args, **kwargs):
super(Model, self).__init__(*args, **kwargs)
if not hasattr(self, 'TYPE'):
raise Exception('Model subclass should provide TYPE class attribute')
def save(self):
self.store(DB)
def connect(db_name, force=False):
global DB
if DB is None or Force:
server = Server('http://localhost:5984/')
try:
DB = server[db_name]
except Exception:
DB = create_db(db_name)
return DB
def create_db(db_name, force=False):
try:
server.create(db_name)
except Exception:
if force:
del server[db_name]
server.create(db_name)
return server[db_name]
connect(settings.DATABASE_NAME)