-
-
Notifications
You must be signed in to change notification settings - Fork 566
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added some test code and python script for openapi generation
- Loading branch information
1 parent
12e0c7f
commit fc567d2
Showing
5 changed files
with
218 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import json | ||
import os | ||
import sys | ||
from urllib.request import urlretrieve | ||
|
||
|
||
os.chdir('vue3/src/openapi') | ||
|
||
# generate base API client for all models | ||
os.system('openapi-generator-cli generate -g typescript-fetch -i http://127.0.0.1:8000/openapi/') | ||
|
||
sys.exit(0) | ||
|
||
# TODO this code was written as a test and commited for archiving | ||
# TODO it is currently not used because the generator creates interfaces not classes, thus cannot be annotated by functions | ||
|
||
# get the latest template from openapi generator and tell it to include the custom model functions | ||
with open('openapitools.json','r') as f: | ||
openapi_tools_config = json.loads(f.read()) | ||
|
||
TEMPLATE_URL = f'https://raw.githubusercontent.com/OpenAPITools/openapi-generator/refs/tags/v{openapi_tools_config['generator-cli']['version']}/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache' | ||
TEMPLATE_FILE_NAME = 'templates/modelGeneric.mustache' | ||
OVERRIDE_FILE_NAME = 'templates/customModelFunctions.mustache' | ||
|
||
urlretrieve(TEMPLATE_URL, TEMPLATE_FILE_NAME) | ||
|
||
with open(TEMPLATE_FILE_NAME, 'a') as template_file, open(OVERRIDE_FILE_NAME, 'r') as override_file: | ||
template_file.write(override_file.read()) | ||
|
||
# generate API client with custom template for specified models | ||
MODELS = ['Keyword', 'Food'] | ||
|
||
os.system(f'openapi-generator-cli generate -g typescript-fetch -t templates -i http://127.0.0.1:8000/openapi/ --global-property models={':'.join(MODELS)}') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
// ---------------------------------------------------------------------- | ||
// Custom model functions added by custom openapi-generator template | ||
// ---------------------------------------------------------------------- | ||
import {ApiApi, Api{{classname}}ListRequest, Paginated{{classname}}List} from "@/openapi"; | ||
|
||
/** | ||
* query list endpoint using the provided request parameters | ||
*/ | ||
export function list(requestParameters: Api{{classname}}ListRequest = {}): Promise<Paginated{{classname}}List> { | ||
const api = new ApiApi() | ||
return api.api{{classname}}List(requestParameters) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,172 @@ | ||
import { mapValues } from '../runtime{{importFileExtension}}'; | ||
{{#hasImports}} | ||
{{#tsImports}} | ||
import type { {{{classname}}} } from './{{filename}}{{importFileExtension}}'; | ||
import { | ||
{{classname}}FromJSON, | ||
{{classname}}FromJSONTyped, | ||
{{classname}}ToJSON, | ||
} from './{{filename}}{{importFileExtension}}'; | ||
{{/tsImports}} | ||
|
||
{{/hasImports}} | ||
{{#discriminator}} | ||
{{#discriminator.mappedModels}} | ||
import { {{modelName}}FromJSONTyped } from './{{modelName}}{{importFileExtension}}'; | ||
{{/discriminator.mappedModels}} | ||
{{/discriminator}} | ||
{{>modelGenericInterfaces}} | ||
|
||
/** | ||
* Check if a given object implements the {{classname}} interface. | ||
*/ | ||
export function instanceOf{{classname}}(value: object): value is {{classname}} { | ||
{{#vars}} | ||
{{#required}} | ||
if (!('{{name}}' in value) || value['{{name}}'] === undefined) return false; | ||
{{/required}} | ||
{{/vars}} | ||
return true; | ||
} | ||
|
||
export function {{classname}}FromJSON(json: any): {{classname}} { | ||
return {{classname}}FromJSONTyped(json, false); | ||
} | ||
|
||
export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boolean): {{classname}} { | ||
{{#hasVars}} | ||
if (json == null) { | ||
return json; | ||
} | ||
{{#discriminator}} | ||
if (!ignoreDiscriminator) { | ||
{{#discriminator.mappedModels}} | ||
if (json['{{discriminator.propertyBaseName}}'] === '{{mappingName}}') { | ||
return {{modelName}}FromJSONTyped(json, true); | ||
} | ||
{{/discriminator.mappedModels}} | ||
} | ||
{{/discriminator}} | ||
return { | ||
{{#parent}}...{{{.}}}FromJSONTyped(json, ignoreDiscriminator),{{/parent}} | ||
{{#additionalPropertiesType}} | ||
...json, | ||
{{/additionalPropertiesType}} | ||
{{#vars}} | ||
{{#isPrimitiveType}} | ||
{{#isDateType}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}new Date(json['{{baseName}}'])), | ||
{{/isDateType}} | ||
{{#isDateTimeType}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}new Date(json['{{baseName}}'])), | ||
{{/isDateTimeType}} | ||
{{^isDateType}} | ||
{{^isDateTimeType}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}json['{{baseName}}'], | ||
{{/isDateTimeType}} | ||
{{/isDateType}} | ||
{{/isPrimitiveType}} | ||
{{^isPrimitiveType}} | ||
{{#isArray}} | ||
{{#uniqueItems}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}new Set((json['{{baseName}}'] as Array<any>).map({{#items}}{{datatype}}{{/items}}FromJSON))), | ||
{{/uniqueItems}} | ||
{{^uniqueItems}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}(json['{{baseName}}'] as Array<any>).map({{#items}}{{datatype}}{{/items}}FromJSON)), | ||
{{/uniqueItems}} | ||
{{/isArray}} | ||
{{#isMap}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}mapValues(json['{{baseName}}'], {{#items}}{{datatype}}{{/items}}FromJSON)), | ||
{{/isMap}} | ||
{{^isArray}} | ||
{{^isMap}} | ||
{{^isFreeFormObject}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}{{datatype}}FromJSON(json['{{baseName}}']), | ||
{{/isFreeFormObject}} | ||
{{#isFreeFormObject}} | ||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}json['{{baseName}}'], | ||
{{/isFreeFormObject}} | ||
{{/isMap}} | ||
{{/isArray}} | ||
{{/isPrimitiveType}} | ||
{{/vars}} | ||
}; | ||
{{/hasVars}} | ||
{{^hasVars}} | ||
return json; | ||
{{/hasVars}} | ||
} | ||
|
||
export function {{classname}}ToJSON(value?: {{#hasReadOnly}}Omit<{{classname}}, {{#readOnlyVars}}'{{baseName}}'{{^-last}}|{{/-last}}{{/readOnlyVars}}>{{/hasReadOnly}}{{^hasReadOnly}}{{classname}}{{/hasReadOnly}} | null): any { | ||
{{#hasVars}} | ||
if (value == null) { | ||
return value; | ||
} | ||
return { | ||
{{#parent}}...{{{.}}}ToJSON(value),{{/parent}} | ||
{{#additionalPropertiesType}} | ||
...value, | ||
{{/additionalPropertiesType}} | ||
{{#vars}} | ||
{{^isReadOnly}} | ||
{{#isPrimitiveType}} | ||
{{#isDateType}} | ||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}(value['{{name}}']{{#isNullable}} as any{{/isNullable}}).toISOString().substring(0,10)), | ||
{{/isDateType}} | ||
{{#isDateTimeType}} | ||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}(value['{{name}}']{{#isNullable}} as any{{/isNullable}}).toISOString()), | ||
{{/isDateTimeType}} | ||
{{#isArray}} | ||
'{{baseName}}': {{#uniqueItems}}{{^required}}value['{{name}}'] == null ? undefined : {{/required}}{{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}Array.from(value['{{name}}'] as Set<any>){{/uniqueItems}}{{^uniqueItems}}value['{{name}}']{{/uniqueItems}}, | ||
{{/isArray}} | ||
{{^isDateType}} | ||
{{^isDateTimeType}} | ||
{{^isArray}} | ||
'{{baseName}}': value['{{name}}'], | ||
{{/isArray}} | ||
{{/isDateTimeType}} | ||
{{/isDateType}} | ||
{{/isPrimitiveType}} | ||
{{^isPrimitiveType}} | ||
{{#isArray}} | ||
{{#uniqueItems}} | ||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}Array.from(value['{{name}}'] as Set<any>).map({{#items}}{{datatype}}{{/items}}ToJSON)), | ||
{{/uniqueItems}} | ||
{{^uniqueItems}} | ||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}(value['{{name}}'] as Array<any>).map({{#items}}{{datatype}}{{/items}}ToJSON)), | ||
{{/uniqueItems}} | ||
{{/isArray}} | ||
{{#isMap}} | ||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}mapValues(value['{{name}}'], {{#items}}{{datatype}}{{/items}}ToJSON)), | ||
{{/isMap}} | ||
{{^isArray}} | ||
{{^isMap}} | ||
{{^isFreeFormObject}} | ||
'{{baseName}}': {{datatype}}ToJSON(value['{{name}}']), | ||
{{/isFreeFormObject}} | ||
{{#isFreeFormObject}} | ||
'{{baseName}}': value['{{name}}'], | ||
{{/isFreeFormObject}} | ||
{{/isMap}} | ||
{{/isArray}} | ||
{{/isPrimitiveType}} | ||
{{/isReadOnly}} | ||
{{/vars}} | ||
}; | ||
{{/hasVars}} | ||
{{^hasVars}} | ||
return value; | ||
{{/hasVars}} | ||
} | ||
// ---------------------------------------------------------------------- | ||
// Custom model functions added by custom openapi-generator template | ||
// ---------------------------------------------------------------------- | ||
import {ApiApi, Api{{classname}}ListRequest, Paginated{{classname}}List} from "@/openapi"; | ||
|
||
/** | ||
* query list endpoint using the provided request parameters | ||
*/ | ||
export function list(requestParameters: Api{{classname}}ListRequest = {}): Promise<Paginated{{classname}}List> { | ||
const api = new ApiApi() | ||
return api.api{{classname}}List(requestParameters) | ||
} |
This file was deleted.
Oops, something went wrong.