Sylvain Filoni
update gradio client
9ada4bc
import type { UploadResponse } from "./types";
import type { Client } from "./client";
export async function upload(
this: Client,
file_data: FileData[],
root_url: string,
upload_id?: string,
max_file_size?: number
): Promise<(FileData | null)[] | null> {
let files = (Array.isArray(file_data) ? file_data : [file_data]).map(
(file_data) => file_data.blob!
);
const oversized_files = files.filter(
(f) => f.size > (max_file_size ?? Infinity)
);
if (oversized_files.length) {
throw new Error(
`File size exceeds the maximum allowed size of ${max_file_size} bytes: ${oversized_files
.map((f) => f.name)
.join(", ")}`
);
}
return await Promise.all(
await this.upload_files(root_url, files, upload_id).then(
async (response: { files?: string[]; error?: string }) => {
if (response.error) {
throw new Error(response.error);
} else {
if (response.files) {
return response.files.map((f, i) => {
const file = new FileData({
...file_data[i],
path: f,
url: root_url + "/file=" + f
});
return file;
});
}
return [];
}
}
)
);
}
export async function prepare_files(
files: File[],
is_stream?: boolean
): Promise<FileData[]> {
return files.map(
(f) =>
new FileData({
path: f.name,
orig_name: f.name,
blob: f,
size: f.size,
mime_type: f.type,
is_stream
})
);
}
export class FileData {
path: string;
url?: string;
orig_name?: string;
size?: number;
blob?: File;
is_stream?: boolean;
mime_type?: string;
alt_text?: string;
readonly meta = { _type: "gradio.FileData" };
constructor({
path,
url,
orig_name,
size,
blob,
is_stream,
mime_type,
alt_text
}: {
path: string;
url?: string;
orig_name?: string;
size?: number;
blob?: File;
is_stream?: boolean;
mime_type?: string;
alt_text?: string;
}) {
this.path = path;
this.url = url;
this.orig_name = orig_name;
this.size = size;
this.blob = url ? undefined : blob;
this.is_stream = is_stream;
this.mime_type = mime_type;
this.alt_text = alt_text;
}
}