Exemplo n.º 1
0
    def build_schema(self):
        schema = Resource.build_schema(self)
        for field_name, field_object in self.fields.items():
            help_text = field_object.help_text
            if field_object.attribute:
                mf = self._meta.object_model._meta.get_field_by_name(field_object.attribute)[0]
                # try to fix help_text from the model field
                if not help_text or help_text == type(field_object).help_text:
                    ht = mf.help_text
                    if ht:
                        help_text = ht
                # try to fix help_text from other side verbose name for relationships
                if not help_text or help_text == type(field_object).help_text:
                    if isinstance(field_object,SetField):
                        help_text = mf.rel.to._meta.verbose_name_plural
                    elif isinstance(field_object,ToOneField):
                        help_text = mf.rel.to._meta.verbose_name
                schema['fields'][field_name]['verbose_name'] = mf.verbose_name
            if isinstance(field_object,RelatedField):
                # add embedded field descriptors for full-filled relation
                if field_object.full:
                    fields = field_object.to_class().build_schema()['fields']
                    for fn,fo in field_object.to_class().fields.items():
                        if getattr(fo,'hidden',False):
                            del fields[fn]
                    schema['fields'][field_name]['fields'] = fields
            schema['fields'][field_name]['help_text'] = help_text

            if hasattr(field_object,'full'):
                schema['fields'][field_name]['full'] = field_object.full
                if not field_object.full:
                    schema['fields'][field_name]['schema_uri'] = field_object.to_class()._build_reverse_url(
                        "api_get_schema",
                        kwargs=field_object.to_class().resource_uri_kwargs()
                    )
        if 'resource_uri' in schema['fields']:
            schema['fields']['resource_uri']['help_text'] = _("URI to access the object using API")
            schema['fields']['resource_uri']['verbose_name'] = _("Resource URI")
        return schema
Exemplo n.º 2
0
    def build_schema(self):
        schema = Resource.build_schema(self)
        for field_name, field_object in self.fields.items():
            help_text = field_object.help_text
            if field_object.attribute:
                mf = self._meta.object_model._meta.get_field_by_name(field_object.attribute)[0]
                # try to fix help_text from the model field
                if not help_text or help_text == type(field_object).help_text:
                    ht = mf.help_text
                    if ht:
                        help_text = ht
                # try to fix help_text from other side verbose name for relationships
                if not help_text or help_text == type(field_object).help_text:
                    if isinstance(field_object, SetField):
                        help_text = mf.rel.to._meta.verbose_name_plural
                    elif isinstance(field_object, ToOneField):
                        help_text = mf.rel.to._meta.verbose_name
                schema["fields"][field_name]["verbose_name"] = mf.verbose_name
            if isinstance(field_object, RelatedField):
                # add embedded field descriptors for full-filled relation
                if field_object.full:
                    fields = field_object.to_class().build_schema()["fields"]
                    for fn, fo in field_object.to_class().fields.items():
                        if getattr(fo, "hidden", False):
                            del fields[fn]
                    schema["fields"][field_name]["fields"] = fields
            schema["fields"][field_name]["help_text"] = help_text

            if hasattr(field_object, "full"):
                schema["fields"][field_name]["full"] = field_object.full
                if not field_object.full:
                    schema["fields"][field_name]["schema_uri"] = field_object.to_class()._build_reverse_url(
                        "api_get_schema", kwargs=field_object.to_class().resource_uri_kwargs()
                    )
        if "resource_uri" in schema["fields"]:
            schema["fields"]["resource_uri"]["help_text"] = _("URI to access the object using API")
            schema["fields"]["resource_uri"]["verbose_name"] = _("Resource URI")
        return schema