mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
parent
d8b224b45d
commit
7bc862fb02
@ -36,7 +36,7 @@ export async function collectTableSchemaInFrictionlessFormat(
|
|||||||
req: express.Request,
|
req: express.Request,
|
||||||
options: DownloadOptions
|
options: DownloadOptions
|
||||||
): Promise<FrictionlessFormat> {
|
): Promise<FrictionlessFormat> {
|
||||||
const {tableId} = options;
|
const {tableId, header} = options;
|
||||||
if (!activeDoc.docData) {
|
if (!activeDoc.docData) {
|
||||||
throw new Error('No docData in active document');
|
throw new Error('No docData in active document');
|
||||||
}
|
}
|
||||||
@ -50,24 +50,15 @@ export async function collectTableSchemaInFrictionlessFormat(
|
|||||||
throw new ApiError(`Table ${tableId} not found.`, 404);
|
throw new ApiError(`Table ${tableId} not found.`, 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await exportTable(activeDoc, tableRef, req);
|
const {tableName, columns} = await exportTable(activeDoc, tableRef, req);
|
||||||
const tableSchema = columnsToTableSchema(tableId, data, settings.locale);
|
|
||||||
return tableSchema;
|
|
||||||
}
|
|
||||||
|
|
||||||
function columnsToTableSchema(
|
|
||||||
tableId: string,
|
|
||||||
{tableName, columns}: {tableName: string, columns: ExportColumn[]},
|
|
||||||
locale: string,
|
|
||||||
): FrictionlessFormat {
|
|
||||||
return {
|
return {
|
||||||
name: tableId.toLowerCase().replace(/_/g, '-'),
|
name: tableId.toLowerCase().replace(/_/g, '-'),
|
||||||
title: tableName,
|
title: tableName,
|
||||||
schema: {
|
schema: {
|
||||||
fields: columns.map(col => ({
|
fields: columns.map(col => ({
|
||||||
name: col.label,
|
name: col[header || "label"],
|
||||||
...(col.description ? {description: col.description} : {}),
|
...(col.description ? {description: col.description} : {}),
|
||||||
...buildTypeField(col, locale),
|
...buildTypeField(col, settings.locale),
|
||||||
})),
|
})),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -2695,6 +2695,43 @@ function testDocApi() {
|
|||||||
assert.equal(resp2.data, 'A,B\nSanta,1\nBob,11\nAlice,2\nFelix,22\n');
|
assert.equal(resp2.data, 'A,B\nSanta,1\nBob,11\nAlice,2\nFelix,22\n');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("GET /docs/{did}/download/table-schema serves table-schema-encoded document with header=colId", async function () {
|
||||||
|
const { docUrl, tableUrl } = await generateDocAndUrl('tableSchemaWithColIdAsHeader');
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
id: 'Some_ID',
|
||||||
|
fields: {
|
||||||
|
label: 'Some Label',
|
||||||
|
type: 'Text',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const setupColResp = await axios.put(`${tableUrl}/columns`, { columns }, {...chimpy, params: { replaceall: true }});
|
||||||
|
assert.equal(setupColResp.status, 200);
|
||||||
|
|
||||||
|
const resp = await axios.get(`${docUrl}/download/table-schema?tableId=Table1&header=colId`, chimpy);
|
||||||
|
assert.equal(resp.status, 200);
|
||||||
|
const expected = {
|
||||||
|
format: "csv",
|
||||||
|
mediatype: "text/csv",
|
||||||
|
encoding: "utf-8",
|
||||||
|
dialect: {
|
||||||
|
delimiter: ",",
|
||||||
|
doubleQuote: true,
|
||||||
|
},
|
||||||
|
name: 'table1',
|
||||||
|
title: 'Table1',
|
||||||
|
schema: {
|
||||||
|
fields: [{
|
||||||
|
name: 'Some_ID',
|
||||||
|
type: 'string',
|
||||||
|
format: 'default',
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
assert.deepInclude(resp.data, expected);
|
||||||
|
});
|
||||||
|
|
||||||
it("GET /docs/{did}/download/table-schema respects permissions", async function () {
|
it("GET /docs/{did}/download/table-schema respects permissions", async function () {
|
||||||
// kiwi has no access to TestDoc
|
// kiwi has no access to TestDoc
|
||||||
const resp = await axios.get(`${serverUrl}/api/docs/${docIds.TestDoc}/download/table-schema?tableId=Table1`, kiwi);
|
const resp = await axios.get(`${serverUrl}/api/docs/${docIds.TestDoc}/download/table-schema?tableId=Table1`, kiwi);
|
||||||
|
Loading…
Reference in New Issue
Block a user