def get_mongo_objs(host, port, dbname, username=None, passwd=None): """ :return: Database connection, database instance and collection instance. """ connection = Connection(host=host, port=port, read_preference=ReadPreference.NEAREST) connection.register([BenchmarkResult]) benchresult = getattr(connection, dbname).benchresults.BenchmarkResult db = Database(connection, dbname) if username is not None: db.authenticate(username, password=passwd) return connection, db, benchresult
def connect(self): """Connect to the MongoDB server and register the documents from :attr:`registered_documents`. If you set ``MONGODB_USERNAME`` and ``MONGODB_PASSWORD`` then you will be authenticated at the ``MONGODB_DATABASE``. """ if self.app is None: raise RuntimeError('The flask-mongokit extension was not init to ' 'the current application. Please make sure ' 'to call init_app() first.') ctx = ctx_stack.top mongokit_connection = getattr(ctx, 'mongokit_connection', None) if mongokit_connection is None: ctx.mongokit_connection = Connection( host=ctx.app.config.get('MONGODB_HOST'), port=ctx.app.config.get('MONGODB_PORT'), slave_okay=ctx.app.config.get('MONGODB_SLAVE_OKAY')) ctx.mongokit_connection.register(self.registered_documents) mongokit_database = getattr(ctx, 'mongokit_database', None) if mongokit_database is None: ctx.mongokit_database = Database( ctx.mongokit_connection, ctx.app.config.get('MONGODB_DATABASE')) if ctx.app.config.get('MONGODB_USERNAME') is not None: auth_success = ctx.mongokit_database.authenticate( ctx.app.config.get('MONGODB_USERNAME'), ctx.app.config.get('MONGODB_PASSWORD')) if not auth_success: raise AuthenticationIncorrect
def init_app(self, app): """This method connect your ``app`` with this extension. Flask- MongoKit will now take care about to open and close the connection to your MongoDB. Also it registers the :class:`flask.ext.mongokit.BSONObjectIdConverter` as a converter with the key word **ObjectId**. :param app: The Flask application will be bound to this MongoKit instance. """ app.config.setdefault('MONGODB_HOST', '127.0.0.1') app.config.setdefault('MONGODB_PORT', 27017) app.config.setdefault('MONGODB_DATABASE', 'flask') app.config.setdefault('MONGODB_USERNAME', None) app.config.setdefault('MONGODB_PASSWORD', None) app.config.setdefault('MONGODB_URL', 'mongodb://127.0.0.1:27071/') app.config.setdefault('MONGODB_CONNECTION_OPTIONS', { 'auto_start_request': False }) app.before_first_request(self._before_first_request) # 0.9 and later # no coverage check because there is everytime only one if hasattr(app, 'teardown_appcontext'): # pragma: no cover app.teardown_appcontext(self._teardown_request) # 0.7 to 0.8 elif hasattr(app, 'teardown_request'): # pragma: no cover app.teardown_request(self._teardown_request) # Older Flask versions else: # pragma: no cover app.after_request(self._teardown_request) # register extension with app only to say "I'm here" app.extensions = getattr(app, 'extensions', {}) app.extensions['mongokit'] = self app.url_map.converters['ObjectId'] = BSONObjectIdConverter self.app = app self.mongokit_connection = Connection( host=app.config.get('MONGODB_HOST'), port=app.config.get('MONGODB_PORT'), **app.config.get('MONGODB_CONNECTION_OPTIONS', {}) ) self.mongokit_database = Database(self.mongokit_connection, app.config.get('MONGODB_DATABASE')) if app.config.get('MONGODB_USERNAME') is not None: auth_success = self.mongokit_database.authenticate( app.config.get('MONGODB_USERNAME'), app.config.get('MONGODB_PASSWORD') ) if not auth_success: raise AuthenticationIncorrect('Server authentication failed')
def init_db(): config = DefaultConfig() con = Connection(config.MONGODB_HOST, config.MONGODB_PORT) #con.drop_database(config.MONGODB_DATABASE) con.register(User) db = Database(con, config.MONGODB_DATABASE) index = 0 for email in config.ADMIN: user = db.User() user['email'] = email user['password'] = db.User.encode_pwd(u'123456') user['create_time'] = datetime.datetime.now() user['nickname'] = u'' if db.User.find({'email': email}).count() == 0: user.save() index += 1 print '%s done.' % index
def connect(self): """Connect to the MongoDB server and register the documents from :attr:`registered_documents`. If you set ``MONGODB_USERNAME`` and ``MONGODB_PASSWORD`` then you will be authenticated at the ``MONGODB_DATABASE``. """ self.mongokit_connection = Connection( host=self.app.config.get('MONGODB_HOST'), port=self.app.config.get('MONGODB_PORT'), max_pool_size=self.app.config.get('MONGODB_MAX_POOL_SIZE'), slave_okay=self.app.config.get('MONGODB_SLAVE_OKAY') ) self.mongokit_connection.register(self.registered_documents) if self.database: self.mongokit_db = Database(self.mongokit_connection, self.database) else: self.mongokit_db = Database(self.mongokit_connection, self.app.config.get('MONGODB_DATABASE')) if self.app.config.get('MONGODB_USERNAME') is not None: self.mongokit_db.authenticate( self.app.config.get('MONGODB_USERNAME'), self.app.config.get('MONGODB_PASSWORD') )
def init_db(host=None, port=None, database=None): con = Connection(host, port) con.drop_database(database) con.register([Admin, AdminRole]) db = Database(con, database) generate_index(host, port, database) role = db.AdminRole() role['name'] = u'管理员' role['auth_list'] = get_auth_list() role.save() user = db.Admin() user['email'] = u'*****@*****.**' user['name'] = u'admin' user['password'] = db.Admin.encode_pwd('123456') user['login_time'] = datetime.now() user['status'] = True user['role'] = role user.save() return 'success'
def generate_index(host=None, port=None, database=None): con = Connection(host, port) con.register([Article]) db = Database(con, database) db.Article.generate_index(db.article)
class MongoKit(object): """This class is used to integrate `MongoKit`_ into a Flask application. :param app: The Flask application will be bound to this MongoKit instance. If an app is not provided at initialization time than it must be provided later by calling :meth:`init_app` manually. .. _MongoKit: http://namlook.github.com/mongokit/ """ def __init__(self, app=None, database=None): #: :class:`list` of :class:`mongokit.Document` #: which will be automated registed at connection self.registered_documents = [] self.mongokit_connection = None self.database = database if app is not None: self.app = app self.init_app(self.app) else: self.app = None def init_app(self, app): """Also it registers the :class:`flask.ext.mongokit.BSONObjectIdConverter` as a converter with the key word **ObjectId**. :param app: The Flask application will be bound to this MongoKit instance. """ app.config.setdefault('MONGODB_HOST', '127.0.0.1') app.config.setdefault('MONGODB_PORT', 27017) app.config.setdefault('MONGODB_DATABASE', 'flask') app.config.setdefault('MONGODB_SLAVE_OKAY', False) app.config.setdefault('MONGODB_USERNAME', None) app.config.setdefault('MONGODB_PASSWORD', None) app.config.setdefault('MONGODB_MAX_POOL_SIZE', 10) # register extension with app app.extensions = getattr(app, 'extensions', {}) app.extensions['mongokit'] = self app.url_map.converters['ObjectId'] = BSONObjectIdConverter self.app = app def register(self, documents): """Register one or more :class:`mongokit.Document` instances to the connection. Can be also used as a decorator on documents: .. code-block:: python db = MongoKit(app) @db.register class Task(Document): structure = { 'title': unicode, 'text': unicode, 'creation': datetime, } :param documents: A :class:`list` of :class:`mongokit.Document`. """ #enable decorator usage as in mongokit.Connection decorator = None if not isinstance(documents, (list, tuple, set, frozenset)): # we assume that the user used this as a decorator # using @register syntax or using db.register(SomeDoc) # we stock the class object in order to return it later decorator = documents documents = [documents] for document in documents: if document not in self.registered_documents: self.registered_documents.append(document) if decorator is None: return self.registered_documents else: return decorator def connect(self): """Connect to the MongoDB server and register the documents from :attr:`registered_documents`. If you set ``MONGODB_USERNAME`` and ``MONGODB_PASSWORD`` then you will be authenticated at the ``MONGODB_DATABASE``. """ self.mongokit_connection = Connection( host=self.app.config.get('MONGODB_HOST'), port=self.app.config.get('MONGODB_PORT'), max_pool_size=self.app.config.get('MONGODB_MAX_POOL_SIZE'), slave_okay=self.app.config.get('MONGODB_SLAVE_OKAY') ) self.mongokit_connection.register(self.registered_documents) if self.database: self.mongokit_db = Database(self.mongokit_connection, self.database) else: self.mongokit_db = Database(self.mongokit_connection, self.app.config.get('MONGODB_DATABASE')) if self.app.config.get('MONGODB_USERNAME') is not None: self.mongokit_db.authenticate( self.app.config.get('MONGODB_USERNAME'), self.app.config.get('MONGODB_PASSWORD') ) @property def connected(self): """Connection status to your MongoDB.""" return self.mongokit_connection is not None def disconnect(self): """Close the connection to your MongoDB.""" if self.connected: self.mongokit_connection.disconnect() self.mongokit_connection = None del self.mongokit_db def __getattr__(self, name, **kwargs): if not self.connected: self.connect() return getattr(self.mongokit_db, name)
def word_validator(value): word = re.compile(r'^[-A-Za-z0-9_]+(?: +[-A-Za-z0-9_]+)*$') return bool(word.match(value)) class Word(Document): structure = { 'word': basestring, 'content': basestring, 'related': basestring, 'word_info': { 'word_class': basestring, 'phonetic': unicode, 'definition': [{ 'explain': basestring, 'example': [basestring], }], }, } required = ['word'] validators = { 'word': word_validator, } conn = Connection(host=settings.HOST, port=int(settings.PORT)) conn.register([Word]) db = Database(conn, 't') db.authenticate('admin', 'fk5es-3PTd8c')
def get_db(): config = DefaultConfig() con = Connection(config.MONGODB_HOST, config.MONGODB_PORT) con.register(Dictionary) db = Database(con, config.MONGODB_DATABASE) return db
class MongoKit(object): """This class is used to integrate `MongoKit`_ into a Flask application. :param app: The Flask application will be bound to this MongoKit instance. If an app is not provided at initialization time than it must be provided later by calling :meth:`init_app` manually. .. _MongoKit: http://namlook.github.com/mongokit/ """ def __init__(self, app=None): #: :class:`list` of :class:`mongokit.Document` #: which will be automated registed at connection self.registered_documents = [] if app is not None: self.app = app self.init_app(self.app) else: self.app = None def init_app(self, app): """This method connect your ``app`` with this extension. Flask- MongoKit will now take care about to open and close the connection to your MongoDB. Also it registers the :class:`flask.ext.mongokit.BSONObjectIdConverter` as a converter with the key word **ObjectId**. :param app: The Flask application will be bound to this MongoKit instance. """ app.config.setdefault('MONGODB_HOST', '127.0.0.1') app.config.setdefault('MONGODB_PORT', 27017) app.config.setdefault('MONGODB_DATABASE', 'flask') app.config.setdefault('MONGODB_USERNAME', None) app.config.setdefault('MONGODB_PASSWORD', None) app.config.setdefault('MONGODB_URL', 'mongodb://127.0.0.1:27071/') app.config.setdefault('MONGODB_CONNECTION_OPTIONS', { 'auto_start_request': False }) app.before_first_request(self._before_first_request) # 0.9 and later # no coverage check because there is everytime only one if hasattr(app, 'teardown_appcontext'): # pragma: no cover app.teardown_appcontext(self._teardown_request) # 0.7 to 0.8 elif hasattr(app, 'teardown_request'): # pragma: no cover app.teardown_request(self._teardown_request) # Older Flask versions else: # pragma: no cover app.after_request(self._teardown_request) # register extension with app only to say "I'm here" app.extensions = getattr(app, 'extensions', {}) app.extensions['mongokit'] = self app.url_map.converters['ObjectId'] = BSONObjectIdConverter self.app = app self.mongokit_connection = Connection( host=app.config.get('MONGODB_HOST'), port=app.config.get('MONGODB_PORT'), **app.config.get('MONGODB_CONNECTION_OPTIONS', {}) ) self.mongokit_database = Database(self.mongokit_connection, app.config.get('MONGODB_DATABASE')) if app.config.get('MONGODB_USERNAME') is not None: auth_success = self.mongokit_database.authenticate( app.config.get('MONGODB_USERNAME'), app.config.get('MONGODB_PASSWORD') ) if not auth_success: raise AuthenticationIncorrect('Server authentication failed') @property def connected(self): """Connection status to your MongoDB.""" ctx = ctx_stack.top return getattr(ctx, 'mongokit_connection', None) is not None def _before_first_request(self): self.mongokit_connection.start_request() def _teardown_request(self, response): self.mongokit_connection.end_request() return response def __getattr__(self, name, **kwargs): return getattr(self._get_mongo_database(), name) def __getitem__(self, name): return self._get_mongo_database()[name] def _get_mongo_database(self): return self.mongokit_database