Convert multipart/form-data requests to HttpMultipartRequest
This commit is contained in:
Родитель
9968e54e06
Коммит
ce2d636a70
|
@ -1,7 +1,7 @@
|
||||||
import { Model as oai3, Dereferenced, dereference, Refable, JsonType, IntegerFormat, StringFormat, NumberFormat, MediaType, filterOutXDash } from '@azure-tools/openapi';
|
import { Model as oai3, Dereferenced, dereference, Refable, JsonType, IntegerFormat, StringFormat, NumberFormat, MediaType, filterOutXDash } from '@azure-tools/openapi';
|
||||||
import * as OpenAPI from '@azure-tools/openapi';
|
import * as OpenAPI from '@azure-tools/openapi';
|
||||||
import { items, values, Dictionary, length, keys } from '@azure-tools/linq';
|
import { items, values, Dictionary, length, keys } from '@azure-tools/linq';
|
||||||
import { HttpMethod, HttpModel, CodeModel, Operation, SetType, HttpRequest, BooleanSchema, Schema, NumberSchema, ArraySchema, Parameter, ChoiceSchema, StringSchema, ObjectSchema, ByteArraySchema, CharSchema, DateSchema, DateTimeSchema, DurationSchema, UuidSchema, UriSchema, CredentialSchema, ODataQuerySchema, UnixTimeSchema, SchemaType, SchemaContext, OrSchema, XorSchema, DictionarySchema, ParameterLocation, SerializationStyle, ImplementationLocation, Property, ComplexSchema, HttpWithBodyRequest, HttpBinaryRequest, HttpParameter, Response, HttpResponse, HttpBinaryResponse, SchemaResponse, SchemaUsage, SealedChoiceSchema, ExternalDocumentation, BinaryResponse, BinarySchema, Discriminator, Relations, AnySchema, ConstantSchema, ConstantValue, HttpHeader, ChoiceValue, Language, Request, OperationGroup, TimeSchema } from '@azure-tools/codemodel';
|
import { HttpMethod, HttpModel, CodeModel, Operation, SetType, HttpRequest, BooleanSchema, Schema, NumberSchema, ArraySchema, Parameter, ChoiceSchema, StringSchema, ObjectSchema, ByteArraySchema, CharSchema, DateSchema, DateTimeSchema, DurationSchema, UuidSchema, UriSchema, CredentialSchema, ODataQuerySchema, UnixTimeSchema, SchemaType, SchemaContext, OrSchema, XorSchema, DictionarySchema, ParameterLocation, SerializationStyle, ImplementationLocation, Property, ComplexSchema, HttpWithBodyRequest, HttpBinaryRequest, HttpParameter, Response, HttpResponse, HttpBinaryResponse, SchemaResponse, SchemaUsage, SealedChoiceSchema, ExternalDocumentation, BinaryResponse, BinarySchema, Discriminator, Relations, AnySchema, ConstantSchema, ConstantValue, HttpHeader, ChoiceValue, Language, Request, OperationGroup, TimeSchema, HttpMultipartRequest } from '@azure-tools/codemodel';
|
||||||
import { Session, Channel } from '@azure-tools/autorest-extension-base';
|
import { Session, Channel } from '@azure-tools/autorest-extension-base';
|
||||||
import { Interpretations, XMSEnum } from './interpretations';
|
import { Interpretations, XMSEnum } from './interpretations';
|
||||||
import { fail, minimum, pascalCase, knownMediaType, KnownMediaType } from '@azure-tools/codegen';
|
import { fail, minimum, pascalCase, knownMediaType, KnownMediaType } from '@azure-tools/codegen';
|
||||||
|
@ -1176,7 +1176,68 @@ export class ModelerFour {
|
||||||
}
|
}
|
||||||
|
|
||||||
processMultipart(kmtMulti: Array<{ mediaType: string; schema: Dereferenced<OpenAPI.Schema | undefined>; }>, operation: Operation, body: Dereferenced<OpenAPI.RequestBody | undefined>) {
|
processMultipart(kmtMulti: Array<{ mediaType: string; schema: Dereferenced<OpenAPI.Schema | undefined>; }>, operation: Operation, body: Dereferenced<OpenAPI.RequestBody | undefined>) {
|
||||||
throw new Error('Multipart forms not implemented yet..');
|
if (!body?.instance) {
|
||||||
|
throw new Error('NO BODY DUDE.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// We assume that this request doesn't have any other media types
|
||||||
|
// since the multipart/form-data type wraps properties that represent
|
||||||
|
// different media types
|
||||||
|
const multiPartType = kmtMulti[0];
|
||||||
|
const kmt = KnownMediaType.Multipart;
|
||||||
|
|
||||||
|
const http = new HttpMultipartRequest({
|
||||||
|
knownMediaType: kmt,
|
||||||
|
mediaTypes: [multiPartType.mediaType]
|
||||||
|
});
|
||||||
|
|
||||||
|
// create the request object
|
||||||
|
const httpRequest = new Request({
|
||||||
|
protocol: {
|
||||||
|
http
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this.options[`always-create-content-type-parameter`] === true) {
|
||||||
|
const scs = this.getContentTypeParameterSchema(http, true);
|
||||||
|
|
||||||
|
// add the parameter for the binary upload.
|
||||||
|
httpRequest.addParameter(new Parameter('content-type', 'Body Parameter content-type', scs, {
|
||||||
|
implementation: ImplementationLocation.Method,
|
||||||
|
required: true,
|
||||||
|
origin: 'modelerfour:synthesized/content-type',
|
||||||
|
protocol: {
|
||||||
|
http: new HttpParameter(ParameterLocation.Header)
|
||||||
|
}, language: {
|
||||||
|
default: {
|
||||||
|
serializedName: 'Content-Type'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
const requestSchema = multiPartType.schema;
|
||||||
|
const pSchema = this.processSchema(requestSchema?.name || 'requestBody', requestSchema?.instance || <OpenAPI.Schema>{})
|
||||||
|
|
||||||
|
// Track the usage of this schema as an input with media type
|
||||||
|
this.trackSchemaUsage(pSchema, { usage: [SchemaContext.Input], serializationFormats: [kmt] });
|
||||||
|
|
||||||
|
httpRequest.addParameter(new Parameter(
|
||||||
|
body.instance?.['x-ms-requestBody-name'] ?? 'body',
|
||||||
|
this.interpret.getDescription('', body?.instance || {}),
|
||||||
|
pSchema, {
|
||||||
|
extensions: this.interpret.getExtensionProperties(body.instance),
|
||||||
|
required: !!body.instance.required,
|
||||||
|
nullable: requestSchema?.instance?.nullable,
|
||||||
|
protocol: {
|
||||||
|
http: new HttpParameter(ParameterLocation.Body, {
|
||||||
|
style: <SerializationStyle><any>kmt,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
implementation: ImplementationLocation.Method,
|
||||||
|
clientDefaultValue: this.interpret.getClientDefault(body?.instance || {}, {})
|
||||||
|
}));
|
||||||
|
return operation.addRequest(httpRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
processOperation(httpOperation: OpenAPI.HttpOperation, method: string, path: string, pathItem: OpenAPI.PathItem) {
|
processOperation(httpOperation: OpenAPI.HttpOperation, method: string, path: string, pathItem: OpenAPI.PathItem) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче