aromanovich / jsl

A Python DSL for describing JSON schemas
http://jsl.readthedocs.org/
Other
218 stars 21 forks source link

Переиспользование поля или создание своего типа BaseField #35

Open mcgr0g opened 6 years ago

mcgr0g commented 6 years ago

Приветствую! К примеру есть класс с базовыми полями, которые будут переиспользоваться по всему проекту (схема довольно таки масивная)

class ProjectBaseFields(jsl.Document):
    obj_id = jsl.IntField(required=True, title="ID объекта ")
    PD_ObjectName = jsl.StringField(required=True, title="Наименование объекта в соответствии с декларацией")

На данный момент есть возможность переиспользовать через костыль

class DocsDeveloperCommissioningPermission(DocsDeveloperHeader):
    class CommissioningPermissioCls(jsl.Document):
        class BasicInfoCls(jsl.Document):
            DateIssue = jsl.StringField(required=True, title="Дата Выдачи")
            PermissionNumber = jsl.StringField(required=True, title="Номер разрешения")

        BasicInfo = jsl.DocumentField(BasicInfoCls)

        class SectionOneCls(jsl.Document):
            PD_ObjectName = jsl.BaseField.__getattribute__(ProjectBaseFields, 'PD_ObjectName')

        SectionOne = jsl.DocumentField(SectionOneCls)

    obj_id = jsl.ArrayField(jsl.BaseField.__getattribute__(ProjectBaseFields, 'obj_id')
                            , min_items=1, unique_items=True)
    commissioning_permission_values = jsl.DocumentField(CommissioningPermissionObj)

Есть ли вариант сделать не используя .__getattribute__? Пробовал воспользоваться итераторами iter_possible_values() и iter_fields() но не смог их прикрутить (за адекватное время). Есть ли какие либо советы?