mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
42afb17e36
Summary: Python 2 only needs to be supported for the sake of old documents and formulas. This doesn't apply to the separate sandboxes that parse files for imports. Using Python 3 only allows using newer libraries and library versions. In particular, the latest version of openpyxl doesn't support Python 2. This will also make it easier to make other similar changes in the future, such as replacing messytables with a modern library. See https://grist.slack.com/archives/C0234CPPXPA/p1661261829343999?thread_ts=1661260442.837959&cid=C0234CPPXPA The latest openpyxl is better at handling a particular edge case with broken dates in Excel, but still doesn't quite do what we want, so we monkeypatch it. Discussion: https://grist.slack.com/archives/C02EGJ1FUCV/p1661440851911869?thread_ts=1661154219.515549&cid=C02EGJ1FUCV Setting `preferredPythonVersion` to '3' in SafePythonComponent ensures that JS always creates import sandboxes that use Python 3. Within Python, a module used by all imports will raise an error in Python 2. Python unit tests of imports are now only run in Python 3, using the `load_tests` protocol of `unittest`. Test Plan: Mostly existing tests. Added another strange date to the Excel fixture. Reviewers: dsagal Reviewed By: dsagal Subscribers: dsagal Differential Revision: https://phab.getgrist.com/D3606
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
/**
|
|
* This module was automatically generated by `ts-interface-builder`
|
|
*/
|
|
import * as t from "ts-interface-checker";
|
|
// tslint:disable:object-literal-key-quotes
|
|
|
|
export const ColumnToMap = t.iface([], {
|
|
"name": "string",
|
|
"title": t.opt(t.union("string", "null")),
|
|
"description": t.opt(t.union("string", "null")),
|
|
"type": t.opt("string"),
|
|
"optional": t.opt("boolean"),
|
|
"allowMultiple": t.opt("boolean"),
|
|
});
|
|
|
|
export const ColumnsToMap = t.array(t.union("string", "ColumnToMap"));
|
|
|
|
export const InteractionOptionsRequest = t.iface([], {
|
|
"requiredAccess": t.opt("string"),
|
|
"hasCustomOptions": t.opt("boolean"),
|
|
"columns": t.opt("ColumnsToMap"),
|
|
});
|
|
|
|
export const InteractionOptions = t.iface([], {
|
|
"accessLevel": "string",
|
|
});
|
|
|
|
export const WidgetColumnMap = t.iface([], {
|
|
[t.indexKey]: t.union("string", t.array("string"), "null"),
|
|
});
|
|
|
|
export const CustomSectionAPI = t.iface([], {
|
|
"configure": t.func("void", t.param("customOptions", "InteractionOptionsRequest")),
|
|
"mappings": t.func(t.union("WidgetColumnMap", "null")),
|
|
});
|
|
|
|
const exportedTypeSuite: t.ITypeSuite = {
|
|
ColumnToMap,
|
|
ColumnsToMap,
|
|
InteractionOptionsRequest,
|
|
InteractionOptions,
|
|
WidgetColumnMap,
|
|
CustomSectionAPI,
|
|
};
|
|
export default exportedTypeSuite;
|