def _prep_schema(self): overrides = { 'person': { 'includes': ['name', 'surname', 'gender', 'addresses'], 'overrides': { 'addresses': { 'includes': ['street', 'city'], 'overrides': { 'city': { 'exclude': False } } } } }, } includes = ['email', 'enabled', 'created', 'timeout', 'person'] schema = SQLAlchemySchemaNode(Account, includes=includes, overrides=overrides) # Add a non-SQLAlchemy field schema.add(colander.SchemaNode( colander.String(), name='non_sql', missing=colander.drop )) return schema
def get_add_edit_schema(edit=False): """ Add a form schema for login add/edit :returns: A colander form schema """ schema = SQLAlchemySchemaNode(Login) set_widgets(schema) schema.add( colander.SchemaNode( colander.String(), name="primary_group", validator=_deferred_primary_group_validator, widget=_deferred_primary_group_widget, title=u"Rôle de l'utilisateur", )) schema.add( colander.SchemaNode( colander.Set(), name="groups", validator=_deferred_group_validator, widget=_deferred_group_widget, title=u"Droits spécifiques", )) if edit: schema['login'].validator = _deferred_login_validator schema['pwd_hash'].missing = colander.drop schema['user_id'].validator = _deferred_user_id_validator else: schema['user_id'].validator = _get_unique_user_id_validator() schema['login'].validator = _get_unique_login_validator() return schema
def get_add_edit_schema(edit=False): """ Return a user add schema """ schema = SQLAlchemySchemaNode( User, includes=( 'civilite', 'firstname', 'lastname', 'email', ), ) if not edit: schema.add( colander.SchemaNode( colander.Boolean(), name='add_login', title=u"Créer des identifiants pour ce compte ?", description=u"Les identifiants permettront au titulaire de ce " u"compte de se connecter", ) ) set_widgets(schema) return schema
def get_user_schema(edit=False, permanent=True): """ Return the schema for adding/editing users edit Is this an edit form permanent Is this form related to permanent edition (managers or admins) """ if permanent: schema = SQLAlchemySchemaNode(user.User, excludes=('compte_tiers',)) else: schema = SQLAlchemySchemaNode(user.User) if permanent: schema.insert( 0, colander.SchemaNode( colander.Integer(), name='primary_group', validator=deferred_primary_group_validator, widget=deferred_primary_group_widget, title=u"Rôle de l'utilisateur", ) ) schema.add( CompanySchema( name='companies', title=u"Entreprise(s)", widget=deform.widget.SequenceWidget( add_subitem_text_template=u"Ajouter une entreprise" ) ) ) else: schema.add( colander.SchemaNode( colander.Set(), name="groups", validator=deferred_group_validator, widget=deferred_group_widget, title=u"Groupes de l'utilisateur", ) ) if edit: schema['login'].validator = deferred_login_validator schema['pwd'].missing = colander.drop else: schema['login'].validator = get_unique_login_validator() return schema
def test_dictify(self): import datetime overrides = { 'person': { 'includes': ['name', 'surname', 'gender', 'addresses'], 'overrides': { 'addresses': { 'includes': ['street', 'city'], 'overrides': { 'city': { 'exclude': False } } } } }, } includes = ['email', 'enabled', 'created', 'timeout', 'person'] schema = SQLAlchemySchemaNode(Account, includes=includes, overrides=overrides) #Add a non-SQLAlchemy field schema.add(colander.SchemaNode(colander.String, name='non_sql')) args = dict(street='My Street', city='My City') address = Address(**args) kws = dict(name='My Name', surname='My Surname', gender='M', addresses=[address]) person = Person(**kws) params = dict(email='*****@*****.**', enabled=True, created=datetime.datetime.now(), timeout=datetime.time(hour=00, minute=00), person=person) account = Account(**params) dictified = schema.dictify(account) kws['addresses'] = [args] params['person'] = kws self.assertEqual(dictified, params) for key in params: self.assertIn(key, dictified) if key == 'person': for k in kws: self.assertIn(k, dictified[key])
def get_user_schema(edit=False, permanent=True): """ Return the schema for adding/editing users edit Is this an edit form permanent Is this form related to permanent edition (managers or admins) """ schema = SQLAlchemySchemaNode(user.User) schema.insert( 0, colander.SchemaNode( colander.Set(), name="groups", validator=deferred_group_validator, widget=deferred_group_widget, title=u"Groupes de l'utilisateur", )) if permanent: schema.add( CompanySchema( name='companies', title=u"Entreprise(s)", widget=deform.widget.SequenceWidget( add_subitem_text_template=u"Ajouter une entreprise"))) if edit: schema['login'].validator = deferred_login_validator schema['pwd'].missing = colander.drop else: schema['login'].validator = get_unique_login_validator() return schema
def get_add_edit_schema(edit=False): """ Add a form schema for login add/edit :returns: A colander form schema """ schema = SQLAlchemySchemaNode(Login) set_widgets(schema) schema.add( colander.SchemaNode( colander.String(), name="primary_group", validator=_deferred_primary_group_validator, widget=_deferred_primary_group_widget, title=u"Rôle de l'utilisateur", ) ) schema.add( colander.SchemaNode( colander.Set(), name="groups", validator=_deferred_group_validator, widget=_deferred_group_widget, title=u"Droits spécifiques", ) ) if edit: schema['login'].validator = _deferred_login_validator schema['pwd_hash'].missing = colander.drop schema['user_id'].validator = _deferred_user_id_validator else: schema['user_id'].validator = _get_unique_user_id_validator() schema['login'].validator = _get_unique_login_validator() return schema
def get_admin_income_statement_measure_schema(total=False): """ Build the schema for income statement measure type edit/add Total types are more complex and can be : * The sum of categories * A list of account prefix (like the common type of measure_types) """ if total: schema = SQLAlchemySchemaNode( IncomeStatementMeasureType, includes=( "category_id", 'label', "account_prefix", 'is_total', 'order', ), ) schema['label'].validator = deferred_label_validator schema['is_total'].widget = deform.widget.HiddenWidget() schema.add_before( 'account_prefix', colander.SchemaNode( colander.String(), name="total_type", title=u"Cet indicateur est il définit comme :", widget=deform_extensions.RadioChoiceToggleWidget(values=( ( "categories", u"la somme des indicateurs de une ou plusieurs " u"catégories ?", "categories", ), ( "account_prefix", u"un groupement d'écritures ?", "account_prefix", ), ( "complex_total", u"le résultat d'une formule arithmétique basée sur " u"les catégories et les indicateurs ?", "complex_total", ), )), missing=colander.drop, )) schema['account_prefix'].missing = "" schema.add( colander.SchemaNode( colander.String(), name="complex_total", title=u"Combinaison complexe de catégories et d'indicateurs", description=deferred_complexe_total_description, validator=complex_total_validator, missing="")) schema.add( colander.SchemaNode( CsvTuple(), name="categories", title=u"Somme des catégories", description=u"Représentera la somme des catégories " u"sélectionnées", widget=deferred_categories_widget, )) else: schema = SQLAlchemySchemaNode(IncomeStatementMeasureType, excludes=('is_total', "categories")) schema['label'].validator = deferred_label_validator return schema
def get_admin_income_statement_measure_schema(total=False): """ Build the schema for income statement measure type edit/add Total types are more complex and can be : * The sum of categories * A list of account prefix (like the common type of measure_types) """ if total: schema = SQLAlchemySchemaNode( IncomeStatementMeasureType, includes=( "category_id", 'label', "account_prefix", 'is_total', 'order', ), ) schema['label'].validator = deferred_label_validator schema['is_total'].widget = deform.widget.HiddenWidget() schema.add_before( 'account_prefix', colander.SchemaNode( colander.String(), name="total_type", title=u"Cet indicateur est il définit comme :", widget=deform_extensions.RadioChoiceToggleWidget( values=( ( "categories", u"la somme des indicateurs de une ou plusieurs " u"catégories ?", "categories", ), ( "account_prefix", u"un groupement d'écritures ?", "account_prefix", ), ( "complex_total", u"le résultat d'une formule arithmétique basée sur " u"les catégories et les indicateurs ?", "complex_total", ), ) ), missing=colander.drop, ) ) schema['account_prefix'].missing = "" schema.add( colander.SchemaNode( colander.String(), name="complex_total", title=u"Combinaison complexe de catégories et d'indicateurs", description=deferred_complexe_total_description, validator=complex_total_validator, missing="" ) ) schema.add( colander.SchemaNode( CsvTuple(), name="categories", title=u"Somme des catégories", description=u"Représentera la somme des catégories " u"sélectionnées", widget=deferred_categories_widget, ) ) else: schema = SQLAlchemySchemaNode( IncomeStatementMeasureType, excludes=('is_total', "categories") ) schema['label'].validator = deferred_label_validator return schema