示例#1
0
 def format_enum_value(self, typename: str, valuename: str):
     return self.enum_name.format(
         lFieldName=typename,
         uFieldName=to_camelcase(typename),
         lValueName=valuename,
         uValueName=valuename
         if valuename[0].isnumeric() else to_camelcase(valuename))
示例#2
0
    def parse(self, schema: dict) -> ModelData:
        if "allOf" in schema:
            schema, self.result.parent = self.handle_all_of(schema)
        if "oneOf" in schema:
            self.result = ModelInterfaceData(self.name,
                                             self.class_name(self.name))
            discriminator = schema.get("discriminator")
            if discriminator:
                self.result.discriminator = to_camelcase(
                    discriminator["propertyName"])
            for element in schema["oneOf"]:
                if "$ref" in element:
                    self.result.children.append(
                        self.class_name_from_ref(element["$ref"]))
                elif "required" in element:
                    pass  # this is fine: https://github.com/p1c2u/openapi-spec-validator/issues/27
                else:
                    logging.warning("did not find $ref as child of oneOf")
        elif "properties" in schema:
            required_props = schema.get('required', list())
            for name, data in schema["properties"].items():
                self.result.properties.append(
                    self.create_param(name, data, name in required_props))

        if "description" in schema:
            self.result.description = schema["description"]

        return self.result
示例#3
0
 def format_updater(self, model: ModelData) -> str:
     props_update = []
     for prop in model.properties:
         name = to_camelcase(prop.name)
         special_call = ""
         if prop.is_list:
             if prop.is_basic_type:
                 special_call = ".ToList()"
         elif not prop.is_basic_type:
             special_call = f".To{prop.typename}()"
             if prop.nullable:
                 special_call = "?" + special_call
         props_update.append(f"{name} = other.{name}{special_call};")
     splitter = "\n\t\t\t"
     formatted = splitter.join(props_update)
     if model.parent:
         formatted = f"UpdateWith{model.parent}(other);{splitter}{formatted}"
     return formatted
示例#4
0
 def class_name(self, name):
     return self.prefix + to_camelcase(name) + self.suffix
示例#5
0
    def format_property(self, property: MemberData) -> str:
        extra = ""
        if property.is_date:
            extra = "[JsonConverter(typeof(CustomJsonDateConverter))]\n\t\t"
        default_str = ""
        if property.default_value is not None:
            default_str = f" = {property.default_value};"

        json_property_extra = ""
        if property.is_required and property.nullable:
            json_property_extra = ", Required = Required.AllowNull"
        elif property.is_required:
            json_property_extra = ", Required = Required.Always"

        description = ""
        if property.description is not None:
            description = property.description.strip().replace(
                "\n", "\n\t\t/// ")
            description = f"/// <summary>\n\t\t/// {description}\n\t\t/// </summary>\n\t\t"

        template_data = dict(TYPE=property.typename,
                             NAMELOWER=property.name,
                             NAMEUPPER=to_camelcase(property.name),
                             JSON_EXTRA=extra,
                             DEFAULT=default_str,
                             JSON_PROPERTY_EXTRA=json_property_extra,
                             DESCRIPTION=description,
                             NO_CHECK="",
                             NO_CHECK_MSG="")

        if property.enums is not None:
            formatted_enums = {
                value: self.format_enum_value(property.name, name)
                for value, name in property.enums.items() if value is not None
            }
            enums = [
                f"public const {property.typename.rstrip('?')} {name} = {value};"
                for value, name in formatted_enums.items()
            ]
            enums = f"\n\t\t".join(enums)
            all_enums = ", ".join(formatted_enums.values())
            if None in property.enums.keys():
                all_enums += f", ({property.typename})null"
            if property.default_value is not None:
                template_data["DEFAULT"] = " = " + formatted_enums.get(
                    property.default_value, property.default_value)
            enum_list_name = self.enum_list_name.format(
                uFieldName=to_camelcase(property.name),
                lFieldName=property.name)
            template = self.enum_prop_template
            template_data['ENUMS'] = enums
            template_data['ENUM_NAMES'] = all_enums
            template_data['ENUM_LIST_NAME'] = enum_list_name
            if not self.check_enums:
                template_data["NO_CHECK"] = "// "
                template_data[
                    'NO_CHECK_MSG'] = "// set checkEnums=true in config file to have a value check here //\n\t\t\t\t"

        else:
            template = self.prop_template

        return template.format_map(template_data)
示例#6
0
 def operation_name(operation_id) -> str:
     return to_camelcase(operation_id) + "Async"