def test_custom_gettext(self): def my_gettext(message): return 'my_' + message set_gettext(my_gettext) assert gettext('hello') == 'my_hello'
def test_i18n(self): # i18n support should be kept, because it's pretty cool to have this ! def my_gettext(message): return 'OMG !!! ' + message set_gettext(my_gettext) ma_schema_cls = self.User.schema.as_marshmallow_schema() ret = ma_schema_cls().load({'name': 'John', 'birthday': 'not_a_date', 'dummy_field': 'dummy'}) assert ret.errors == {'birthday': ['OMG !!! Not a valid datetime.'], '_schema': ['OMG !!! Unknown field name dummy_field.']}
def test_document_validation(self): class Client(Document): phone_number = fields.StrField(validate=validate.Regexp(r'^[0-9 ]+$')) def my_gettext(message): return message.upper() set_gettext(my_gettext) with pytest.raises(ValidationError) as exc: Client(phone_number='not a phone !') assert exc.value.args[0] == {'phone_number': ['STRING DOES NOT MATCH EXPECTED PATTERN.']}
def test_document_validation(self): class Client(Document): phone_number = fields.StrField( validate=validate.Regexp(r'^[0-9 ]+$')) def my_gettext(message): return message.upper() set_gettext(my_gettext) with pytest.raises(ValidationError) as exc: Client(phone_number='not a phone !') assert exc.value.args[0] == { 'phone_number': ['STRING DOES NOT MATCH EXPECTED PATTERN.'] }
def test_i18n(self): # i18n support should be kept, because it's pretty cool to have this ! def my_gettext(message): return 'OMG !!! ' + message set_gettext(my_gettext) ma_schema_cls = self.User.schema.as_marshmallow_schema() with pytest.raises(marshmallow.ValidationError) as excinfo: ma_schema_cls().load({ 'name': 'John', 'birthday': 'not_a_date', 'dummy_field': 'dummy' }) assert excinfo.value.messages == { 'birthday': ['OMG !!! Not a valid datetime.'], 'dummy_field': ['OMG !!! Unknown field.'] }
def teardown_method(self, method): # Reset i18n config before each test set_gettext(None)
import json import datetime from twisted.internet import reactor from twisted.internet.defer import inlineCallbacks, returnValue from klein import Klein from bson import ObjectId from txmongo import MongoConnection from klein_babel import gettext, locale_from_request from umongo import Instance, Document, fields, ValidationError, set_gettext from umongo.marshmallow_bonus import SchemaFromUmongo app = Klein() db = MongoConnection().demo_umongo instance = Instance(db) set_gettext(gettext) class MongoJsonEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, (datetime.datetime, datetime.date)): return obj.isoformat() elif isinstance(obj, ObjectId): return str(obj) return json.JSONEncoder.default(self, obj) def jsonify(request, *args, **kwargs): """ jsonify with support for MongoDB ObjectId """
from functools import partial from umongo import Instance, Document, fields, ValidationError, set_gettext from umongo.marshmallow_bonus import SchemaFromUmongo import logging logging.basicConfig(level=logging.DEBUG) app = muffin.Application(__name__, PLUGINS=('muffin_babel', ), BABEL_LOCALES_DIRS=['translations']) db = AsyncIOMotorClient()['demo_umongo'] instance = Instance(db) set_gettext(app.ps.babel.gettext) @app.ps.babel.locale_selector def set_locale(request): """Get locale based on request Accept-Language header""" return app.ps.babel.select_locale_by_request(request) class MongoJsonEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, (datetime.datetime, datetime.date)): return obj.isoformat() elif isinstance(obj, ObjectId): return str(obj) return json.JSONEncoder.default(self, obj)
from datetime import datetime from flask import Flask, abort, jsonify, request from flask.ext.babel import Babel, gettext from bson import ObjectId from pymongo import MongoClient from umongo import Document, fields, ValidationError, set_gettext app = Flask(__name__) db = MongoClient().demo_umongo babel = Babel(app) set_gettext(gettext) # available languages LANGUAGES = { 'en': 'English', 'fr': 'Français' } @babel.localeselector def get_locale(): return request.accept_languages.best_match(LANGUAGES.keys()) class User(Document): nick = fields.StrField(required=True, unique=True) firstname = fields.StrField() lastname = fields.StrField()