Skip to content

Commit

Permalink
Allow install in ^3.x Python projects
Browse files Browse the repository at this point in the history
  • Loading branch information
fjsj committed Jul 5, 2024
1 parent adae65d commit f026c57
Show file tree
Hide file tree
Showing 7 changed files with 233 additions and 228 deletions.
2 changes: 1 addition & 1 deletion .python-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.12.3
3.12.4
2 changes: 1 addition & 1 deletion frontend/openapi_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"openapi": "3.1.0",
"info": {
"title": "django_ai_assistant",
"version": "0.0.2",
"version": "0.0.1",
"description": ""
},
"paths": {
Expand Down
3 changes: 1 addition & 2 deletions frontend/src/client/core/ApiRequestOptions.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export type ApiRequestOptions<T = unknown> = {
export type ApiRequestOptions = {
readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH';
readonly url: string;
readonly path?: Record<string, unknown>;
Expand All @@ -9,6 +9,5 @@ export type ApiRequestOptions<T = unknown> = {
readonly body?: any;
readonly mediaType?: string;
readonly responseHeader?: string;
readonly responseTransformer?: (data: unknown) => T;
readonly errors?: Record<number | string, string>;
};
4 changes: 2 additions & 2 deletions frontend/src/client/core/OpenAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { ApiRequestOptions } from './ApiRequestOptions';

type Headers = Record<string, string>;
type Middleware<T> = (value: T) => T | Promise<T>;
type Resolver<T> = (options: ApiRequestOptions<T>) => Promise<T>;
type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;

export class Interceptors<T> {
_fns: Middleware<T>[];
Expand Down Expand Up @@ -48,7 +48,7 @@ export const OpenAPI: OpenAPIConfig = {
PASSWORD: undefined,
TOKEN: undefined,
USERNAME: undefined,
VERSION: '0.0.2',
VERSION: '0.0.1',
WITH_CREDENTIALS: false,
interceptors: {
request: new Interceptors(),
Expand Down
21 changes: 6 additions & 15 deletions frontend/src/client/core/request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,24 +108,20 @@ export const getFormData = (options: ApiRequestOptions): FormData | undefined =>
return undefined;
};

type Resolver<T> = (options: ApiRequestOptions<T>) => Promise<T>;
type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;

export const resolve = async <T>(options: ApiRequestOptions<T>, resolver?: T | Resolver<T>): Promise<T | undefined> => {
export const resolve = async <T>(options: ApiRequestOptions, resolver?: T | Resolver<T>): Promise<T | undefined> => {
if (typeof resolver === 'function') {
return (resolver as Resolver<T>)(options);
}
return resolver;
};

export const getHeaders = async <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>): Promise<Record<string, string>> => {
export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise<Record<string, string>> => {
const [token, username, password, additionalHeaders] = await Promise.all([
// @ts-ignore
resolve(options, config.TOKEN),
// @ts-ignore
resolve(options, config.USERNAME),
// @ts-ignore
resolve(options, config.PASSWORD),
// @ts-ignore
resolve(options, config.HEADERS),
]);

Expand Down Expand Up @@ -177,7 +173,7 @@ export const getRequestBody = (options: ApiRequestOptions): unknown => {

export const sendRequest = async <T>(
config: OpenAPIConfig,
options: ApiRequestOptions<T>,
options: ApiRequestOptions,
url: string,
body: unknown,
formData: FormData | undefined,
Expand Down Expand Up @@ -305,7 +301,7 @@ export const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult):
* @returns CancelablePromise<T>
* @throws ApiError
*/
export const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>, axiosClient: AxiosInstance = axios): CancelablePromise<T> => {
export const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions, axiosClient: AxiosInstance = axios): CancelablePromise<T> => {
return new CancelablePromise(async (resolve, reject, onCancel) => {
try {
const url = getUrl(config, options);
Expand All @@ -323,17 +319,12 @@ export const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>,
const responseBody = getResponseBody(response);
const responseHeader = getResponseHeader(response, options.responseHeader);

let transformedBody = responseBody;
if (options.responseTransformer && isSuccess(response.status)) {
transformedBody = options.responseTransformer(responseBody)
}

const result: ApiResult = {
url,
ok: isSuccess(response.status),
status: response.status,
statusText: response.statusText,
body: responseHeader ?? transformedBody,
body: responseHeader ?? responseBody,
};

catchErrorCodes(options, result);
Expand Down
Loading

0 comments on commit f026c57

Please sign in to comment.