示例#1
0
 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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
    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])
示例#7
0
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
示例#8
0
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
示例#9
0
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
示例#10
0
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