mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
(core) ensure randomness works when sandbox is cloned from a checkpoint
Summary: This calls a new `initialize` method on the sandbox before we start doing calculations with it, to make sure that `random.seed()` has been called. Otherwise, if the sandbox is cloned from a checkpoint, the seed will have been reset. The `initialize` method includes the functionality previously done by `set_doc_url` since it is also initialization/personalization and this way we avoid introducing another round trip to the sandbox. Test Plan: tested with grist-core configured to use gvisor Reviewers: georgegevoian, dsagal Reviewed By: georgegevoian, dsagal Subscribers: alexmojaki Differential Revision: https://phab.getgrist.com/D3549
This commit is contained in:
parent
364715eba3
commit
7078922a65
@ -2059,9 +2059,7 @@ export class ActiveDoc extends EventEmitter {
|
|||||||
num_on_demand_tables: onDemandNames.length,
|
num_on_demand_tables: onDemandNames.length,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this._options?.docUrl) {
|
await this._pyCall('initialize', this._options?.docUrl);
|
||||||
await this._pyCall('set_doc_url', this._options.docUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculations are not associated specifically with the user opening the document.
|
// Calculations are not associated specifically with the user opening the document.
|
||||||
// TODO: be careful with which users can create formulas.
|
// TODO: be careful with which users can create formulas.
|
||||||
|
@ -15,10 +15,6 @@ from functions.info import ISNUMBER, ISLOGICAL
|
|||||||
from functions.unimplemented import unimplemented
|
from functions.unimplemented import unimplemented
|
||||||
import roman
|
import roman
|
||||||
|
|
||||||
if os.environ.get("DETERMINISTIC_MODE"):
|
|
||||||
random.seed(1)
|
|
||||||
|
|
||||||
|
|
||||||
# Iterates through elements of iterable arguments, or through individual args when not iterable.
|
# Iterates through elements of iterable arguments, or through individual args when not iterable.
|
||||||
def _chain(*values_or_iterables):
|
def _chain(*values_or_iterables):
|
||||||
for v in values_or_iterables:
|
for v in values_or_iterables:
|
||||||
|
@ -3,6 +3,7 @@ This module defines what sandbox functions are made available to the Node contro
|
|||||||
and starts the grist sandbox. See engine.py for the API documentation.
|
and starts the grist sandbox. See engine.py for the API documentation.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
import sys
|
import sys
|
||||||
sys.path.append('thirdparty')
|
sys.path.append('thirdparty')
|
||||||
# pylint: disable=wrong-import-position
|
# pylint: disable=wrong-import-position
|
||||||
@ -121,7 +122,13 @@ def run(sandbox):
|
|||||||
return schema.SCHEMA_VERSION
|
return schema.SCHEMA_VERSION
|
||||||
|
|
||||||
@export
|
@export
|
||||||
def set_doc_url(doc_url):
|
def initialize(doc_url):
|
||||||
|
if os.environ.get("DETERMINISTIC_MODE"):
|
||||||
|
random.seed(1)
|
||||||
|
else:
|
||||||
|
# Make sure we have randomness, even if we are being cloned from a checkpoint
|
||||||
|
random.seed()
|
||||||
|
if doc_url:
|
||||||
os.environ['DOC_URL'] = doc_url
|
os.environ['DOC_URL'] = doc_url
|
||||||
|
|
||||||
@export
|
@export
|
||||||
|
Loading…
Reference in New Issue
Block a user