示例#1
0
 def transpile(self):
     template = TypeScriptTemplate.open(templates.MODEL_TYPE_TEMPLATE_FILE)
     source = template.render(
         pk_field_name=self.pk_field_info.serializer_field_name,
         pk_type=FieldTypeTranspiler.transpile(self.pk_field_info.serializer),
         model_name=self.model_type.model_name,
         queryset_name=model_queryset_name(self.model_type.model_cls),
         field_interface_name=model_field_interface_name(self.model_type.model_cls),
         # URLS
         update_url=self._url_prefix + self.model_type.update_view.endpoint.url(TYPESCRIPT_THIS_PK_REF),
         get_url=self._url_prefix + self.model_type.get_view.endpoint.url(TYPESCRIPT_ARG_PK_REF),
         get_or_create_url=self._url_prefix + self.model_type.get_or_create_view.endpoint.url(),
         create_url=self._url_prefix + self.model_type.create_view.endpoint.url(TYPESCRIPT_ARG_PK_REF),
         # Todo: fix hacky
         list_url=self._url_prefix + self.model_type.list_view.endpoint.url().replace('//', '/'),
         delete_url=self._url_prefix + self.model_type.delete_view.endpoint.url(TYPESCRIPT_THIS_PK_REF),
         # -----
         model_interface_types=self.model_interface_types(),
         model_class_types=self.model_class_types(),
         lookups_interface_name=model_lookups_name(self.model_type.model_cls),
         queryset_lookups=self.queryset_lookup_types(),
         reverse_relations=self._reverse_relations(),
         methods=self._methods(),
         static_methods=self._static_methods(),
         field_schemas=self.field_schemas(),
         prefetch_type_name=model_prefetch_type_name(self.model_type.model_cls),
         prefetch_type=self._prefetch_type_body()
     )
     return source
 def field_type_declarations(self):
     type_declarations = []
     serializer_fields = self.serializer_cls().get_fields()
     for field_name, field in serializer_fields.items():
         type_declarations.append(
             render_type_declaration(
                 name=field_name,
                 optional=field.allow_null,
                 readonly=field.read_only,
                 type_=FieldTypeTranspiler.transpile(field))
         )
     return "\n".join(type_declarations)
    def serialized_type_declaration(self) -> str:
        """
        Return the 'serialized' type declaration for this field. That is,
        the type corresponding to the value that will be sent to the server
        and serialized. These type declarations make of the body of a model's
        field interface type.

        """
        return render_type_declaration(
            name=self.serializer_field_name,
            optional=self.serializer_field.allow_null,
            readonly=self.serializer_field.read_only,
            type_=FieldTypeTranspiler.transpile(type_=self.serializer_field))
 def lookup_declarations(self):
     return [
         render_type_declaration(name=self.model_field.get_attname(),
                                 optional=True,
                                 readonly=False,
                                 type_=FieldTypeTranspiler.transpile(
                                     self.serializer_field)),
         render_type_declaration(
             name=self.model_field.name,
             optional=True,
             readonly=False,
             type_=model_lookups_name(
                 model_cls=self.model_field.related_model))
     ]
示例#5
0
    def serialized_type_declaration(self) -> str:
        """
        Return the 'serialized' type declaration for this field. That is,
        the type corresponding to the value that will be sent to the server
        and serialized. These type declarations make of the body of a model's
        field interface type.

        """
        if self.serializer_field is None:
            raise AssertionError("A serialized type declaration can only be generated "
                                 "for fields with a corresponding `serializer_field`.")
        return render_type_declaration(
                name=self.serializer_field_name,
                optional=self.serializer_field.allow_null,
                readonly=self.serializer_field.read_only,
                type_=FieldTypeTranspiler.transpile(type_=self.serializer_field)
            )
 def lookup_declarations(self):
     declarations = list()
     declarations.append(
         render_type_declaration(name=self.serializer_field_name,
                                 optional=True,
                                 readonly=False,
                                 type_=self._serialized_type))
     for lookup_str, lookup_cls in self.model_field.get_lookups().items():
         declarations.append(
             render_type_declaration(name=self._lookup_key(
                 self.serializer_field_name, lookup_str),
                                     optional=True,
                                     readonly=False,
                                     type_=FieldTypeTranspiler.transpile(
                                         type_=self.model_field,
                                         container_type=lookup_cls)))
     return declarations
示例#7
0
def method_sig_interface(arg_serializer_cls=None, signature: Signature = None):
    type_declarations = []
    if arg_serializer_cls:
        serializer_fields = arg_serializer_cls().get_fields()
        for field_name, field in serializer_fields.items():
            type_declarations.append(
                render_type_declaration(
                    name=field_name,
                    optional=field.allow_null,
                    readonly=field.read_only,
                    type_=FieldTypeTranspiler.transpile(field)))
        return "data: {" + ", ".join(type_declarations) + "}"
    if signature:
        if len(signature) > 0:
            for param_name in signature.param_names:
                type_declarations.append(
                    render_type_declaration(name=param_name,
                                            optional=False,
                                            readonly=False,
                                            type_=typescript_types.ANY))
            return "data: {" + ", ".join(type_declarations) + "}"
    return ''
 def _serialized_type(self):
     if self.model_field.choices:
         return self._choices_type
     return FieldTypeTranspiler.transpile(type_=self.serializer_field)