mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
bb8cb2593d
Summary: * Moves essential plugins to grist-core, so that basic imports (e.g. csv) work. * Adds support for a `GRIST_SANDBOX_FLAVOR` flag that can systematically override how the data engine is run. - `GRIST_SANDBOX_FLAVOR=pynbox` is "classic" nacl-based sandbox. - `GRIST_SANDBOX_FLAVOR=docker` runs engines in individual docker containers. It requires an image specified in `sandbox/docker` (alternative images can be named with `GRIST_SANDBOX` flag - need to contain python and engine requirements). It is a simple reference implementation for sandboxing. - `GRIST_SANDBOX_FLAVOR=unsandboxed` runs whatever local version of python is specified by a `GRIST_SANDBOX` flag directly, with no sandboxing. Engine requirements must be installed, so an absolute path to a python executable in a virtualenv is easiest to manage. - `GRIST_SANDBOX_FLAVOR=gvisor` runs the data engine via gvisor's runsc. Experimental, with implementation not included in grist-core. Since gvisor runs on Linux only, this flavor supports wrapping the sandboxes in a single shared docker container. * Tweaks some recent express query parameter code to work in grist-core, which has a slightly different version of express (smoke test doesn't catch this since in Jenkins core is built within a workspace that has node_modules, and wires get crossed - in a dev environment the problem on master can be seen by doing `buildtools/build_core.sh /tmp/any_path_outside_grist`). The new sandbox options do not have tests yet, nor does this they change the behavior of grist servers today. They are there to clean up and consolidate a collection of patches I've been using that were getting cumbersome, and make it easier to run experiments. I haven't looked closely at imports beyond core. Test Plan: tested manually against regular grist and grist-core, including imports Reviewers: alexmojaki, dsagal Reviewed By: alexmojaki Differential Revision: https://phab.getgrist.com/D2942
26 lines
762 B
Python
26 lines
762 B
Python
import logging
|
|
import sandbox
|
|
|
|
import import_csv
|
|
import import_xls
|
|
import import_json
|
|
|
|
def main():
|
|
s = logging.StreamHandler()
|
|
s.setFormatter(logging.Formatter(fmt='%(asctime)s.%(msecs)03d %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S'))
|
|
rootLogger = logging.getLogger()
|
|
rootLogger.addHandler(s)
|
|
rootLogger.setLevel(logging.INFO)
|
|
|
|
# Todo: Grist should expose a register method accepting arguments as
|
|
# follow: register('csv_parser', 'canParse', can_parse)
|
|
sandbox.register("csv_parser.parseFile", import_csv.parse_file_source)
|
|
sandbox.register("xls_parser.parseFile", import_xls.import_file)
|
|
sandbox.register("json_parser.parseFile", import_json.parse_file)
|
|
|
|
sandbox.run()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|