2016-03-11 4 views
2

J'essaie de stocker et d'extraire l'utilisateur de la base de données _users en utilisant couchdb-python. Je suis un débutant ici avec couchdb.Gestion des utilisateurs dans _users avec couchdb-python

Je cartographié la classe python utilisateur avec CouchDB document couchdb.mapping.Document comme ceci:

import couchdb.mapping as cmap 


class User(cmap.Document): 
    name = cmap.TextField() 
    password = cmap.TextField() 
    type = 'user' 
    roles = {} 

mais cela ne fonctionne pas. J'ai obtenu doc.type must be userServerError donc probablement la façon dont je déclare le type n'est pas correct.

Comment dois-je construire ma classe à utiliser avec la base de données _users?

Répondre

0

Après quelques conseils de la chaîne #couchdb sur IRC, je suis sorti avec cette classe (qui est probablement plus que ce que je demandais ...)

import couchdb.mapping as cmap 

class User(cmap.Document): 
    """ Class used to map a user document inside the '_users' database to a 
    Python object. 

    For better understanding check https://wiki.apache.org 
     /couchdb/Security_Features_Overview 

    Args: 
     name: Name of the user 
     password: password of the user in plain text 
     type: (Must be) 'user' 
     roles: Roles for the users 

    """ 

    def __init__(self, **values): 
     # For user in the _users database id must be org.couchdb.user:<name> 
     # Here we're auto-generating it. 
     if 'name' in values: 
      _id = 'org.couchdb.user:{}'.format(values['name']) 
      cmap.Document.__init__(self, id=_id, **values) 

    type = cmap.TextField(default='user') 
    name = cmap.TextField() 
    password = cmap.TextField() 
    roles = cmap.ListField(cmap.TextField()) 

    @cmap.ViewField.define('users') 
    def default(doc): 
     if doc['name']: 
      yield doc['name'], doc 

Cela devrait fonctionner:

db = couchdb.server()['_users'] 
alice = User(name="Alice", password="strongpassword") 
alice.store(db)