gristlabs_grist-core/app/plugin/FileParserAPI.ts
Dmitry S d5a4605d2a (core) Improve encoding detection for csv imports, and make encoding an editable option.
Summary:
- Using a sample of data was causing poor detection if the sample were
  cut mid-character. Switch to using line-based detection.
- Add a simple option for changing encoding. No convenient UI is offered
  since config UI is auto-generated, but this at least makes it possible to
  recover from bad guesses.
- Upgrades chardet library for good measure.

- Also fixes python3-building step, to more reliably rebuild Python
  dependencies when requirements3.* files change.

Test Plan:
Added a python-side test case, and a browser test that encodings can
be switched, errors are displayed, and wrong encodings fail recoverably.

Reviewers: alexmojaki

Reviewed By: alexmojaki

Differential Revision: https://phab.getgrist.com/D3979
2023-08-24 09:50:52 -04:00

54 lines
1.4 KiB
TypeScript

/**
* API definitions for FileParser plugins.
*/
import {GristTables} from './GristTable';
export interface EditOptionsAPI {
getParseOptions(parseOptions?: ParseOptions): Promise<ParseOptions>;
}
export interface ParseFileAPI {
parseFile(file: FileSource, parseOptions?: ParseOptions): Promise<ParseFileResult>;
}
/**
* ParseOptions contains parse options depending on plugin,
* number of rows, which is special option that can be used for any plugin
* and schema for generating parse options UI
*/
export interface ParseOptions {
NUM_ROWS?: number;
SCHEMA?: ParseOptionSchema[];
WARNING?: string; // Only on response, includes a warning from parsing, if any.
}
/**
* ParseOptionSchema contains information for generaing parse options UI
*/
export interface ParseOptionSchema {
name: string;
label: string;
type: string;
visible: boolean;
}
export interface FileSource {
/**
* The path is often a temporary file, so its name is meaningless. Access to the file depends on
* the type of plugin. For instance, for `safePython` plugins file is directly available at
* `/importDir/path`.
*/
path: string;
/**
* Plugins that want to know the original filename should use origName. Depending on the source
* of the data, it may or may not be meaningful.
*/
origName: string;
}
export interface ParseFileResult extends GristTables {
parseOptions: ParseOptions;
}