gristlabs_grist-core/sandbox/grist
Alex Hall c5ebd7db3d (core) Add PEEK() function to bypass circular dependencies
Summary:
Adds a Python function `PEEK()` for use in formulas which temporarily sets a new attribute `Engine._peeking` which disables the `_use_node` method, preventing dependency tracking and allowing the given expression to use outdated values. This allows circumventing circular reference errors. It's particularly meant for trigger formulas although it works in normal formulas as well. The expression is wrapped in a `lambda` by `codebuilder` for lazy evaluation.

Discussion: https://grist.slack.com/archives/C0234CPPXPA/p1653571024031359

Test Plan: Added a Python unit test for circular trigger formulas using PEEK.

Reviewers: dsagal

Reviewed By: dsagal

Subscribers: paulfitz

Differential Revision: https://phab.getgrist.com/D3453
2022-06-02 19:50:14 +02:00
..
functions (core) Add PEEK() function to bypass circular dependencies 2022-06-02 19:50:14 +02:00
imports (core) Convert row tuples to lists to fix excel import error 2022-05-17 22:40:46 +02:00
acl_formula.py (core) AddOrUpdateRecord user action 2022-02-03 16:22:51 -05:00
acl.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
action_obj.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
action_summary.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
actions.py (core) AddOrUpdateRecord user action 2022-02-03 16:22:51 -05:00
autocomplete_context.py (core) Autocomplete True/False/None in formulas from lowercase values 2021-11-05 11:18:00 -04:00
codebuilder.py (core) Add PEEK() function to bypass circular dependencies 2022-06-02 19:50:14 +02:00
column.py (core) Add PUT /records DocApi endpoint to AddOrUpdate records 2022-02-12 09:44:34 +02:00
csv_patch.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
depend.py (core) Implement trigger formulas (generalizing default formulas) 2021-06-25 22:53:07 -04:00
docactions.py (core) Undo bug - restoring dependencies for trigger formulas 2021-12-06 16:09:41 +01:00
docmodel.py (core) Conditional formatting rules 2022-03-23 13:15:02 +01:00
engine.py (core) Add PEEK() function to bypass circular dependencies 2022-06-02 19:50:14 +02:00
gencode.py Correct spelling mistakes 2022-02-19 09:46:49 +00:00
gpath.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
grist.py (core) Use MixedTypesKey for sort_by arg of lookupRecords to avoid errors in Python 3 2021-11-09 18:08:29 +02:00
identifiers.py (core) Remove accents when picking identifiers 2021-08-24 14:47:50 +02:00
import_actions.py (core) Prevent rebuilding usercode for every AddColumn when importing 2022-05-24 22:29:20 +02:00
logger.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
lookup.py (core) Make lookups depend on all rows 2022-03-14 19:42:51 +02:00
main.py (core) Show proper message on empty Excel import, rather than a code error 2022-04-27 00:49:28 -04:00
match_counter.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
migrations.py (core) Distinct style rules for summary columns 2022-04-27 20:51:23 +02:00
moment.py (core) New type conversion in the backend 2022-02-04 20:28:13 +02:00
objtypes.py (core) A few tiny documentation tweaks. 2022-01-07 14:26:00 -05:00
parse_data.py (core) Switch excel import parsing from messytables+xlrd to openpyxl, and ignore empty rows 2022-05-12 14:43:21 +02:00
records.py Tweaks to documentation comments for user-facing Grist functions (#126) 2022-02-13 00:45:24 -05:00
relabeling.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
relation.py (core) Polish and enable Reference List widget 2021-08-12 11:51:21 -07:00
runtests.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
sandbox.py (core) communicate with sandbox via standard pipes 2021-07-12 06:45:47 -04:00
schema.py (core) Distinct style rules for summary columns 2022-04-27 20:51:23 +02:00
sort_specs.py (core) Adding sort options for columns. 2021-11-03 15:31:39 +01:00
summary.py (core) Distinct style rules for summary columns 2022-04-27 20:51:23 +02:00
table_data_set.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
table.py (core) Mark column changing actions as indirect when adding data to empty column 2022-05-25 16:21:04 +02:00
test_acl_formula.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_acl_renames.py (core) Update ACL resources/rules when tables/columns get renamed 2021-01-04 22:03:01 -05:00
test_actions.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_codebuilder.py (core) Ensure formulas return something and don't assign to attributes of rec 2022-05-23 21:06:18 +02:00
test_column_actions.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_completion.py (core) add a user.SessionID value for trigger formulas and granular access rules 2022-02-22 12:50:43 -05:00
test_default_formulas.py (core) Fix lookups in default formulas 2020-09-10 18:06:06 -04:00
test_depend.py (core) Fix recursion error in invalidate_deps 2021-06-18 15:42:20 +02:00
test_derived.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_display_cols.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_docmodel.py (core) Backend restrictions for raw data widgets 2022-02-15 22:04:32 +02:00
test_engine.py (core) Create an extra raw data widget when creating a table 2022-02-01 21:19:30 +02:00
test_find_col.py Correct spelling mistakes 2022-02-19 09:46:49 +00:00
test_formula_error.py (core) Add PEEK() function to bypass circular dependencies 2022-06-02 19:50:14 +02:00
test_formula_undo.py (core) Mark column changing actions as indirect when adding data to empty column 2022-05-25 16:21:04 +02:00
test_functions.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_gencode.py (core) Raise syntax errors that Python can format nicely to show the location 2021-09-24 15:07:09 +02:00
test_gpath.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_import_actions.py (core) Create an extra raw data widget when creating a table 2022-02-01 21:19:30 +02:00
test_logger.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_lookups.py (core) Log number of rows in user tables in data engine 2022-02-22 00:59:56 +02:00
test_match_counter.py (core) Import Hashable from six.moves.collections_abc 2022-02-22 00:27:51 +02:00
test_migrations.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_moment.py (core) New type conversion in the backend 2022-02-04 20:28:13 +02:00
test_record_func.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_recordlist.py (core) Return RecordSet instead of list from property access when possible, to allow further property access 2022-04-05 18:05:00 +02:00
test_reflist_rel.py (core) New type conversion in the backend 2022-02-04 20:28:13 +02:00
test_relabeling.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_renames2.py Correct spelling mistakes 2022-02-19 09:46:49 +00:00
test_renames.py (core) add a user.SessionID value for trigger formulas and granular access rules 2022-02-22 12:50:43 -05:00
test_replay.py (core) Add test_replay for easily replaying data sent to the sandbox purely within python 2021-06-30 16:56:09 +02:00
test_rules.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_side_effects.py (core) Ensure formulas return something and don't assign to attributes of rec 2022-05-23 21:06:18 +02:00
test_sort_spec.py (core) Adding sort options for columns. 2021-11-03 15:31:39 +01:00
test_summary2.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_summary_choicelist.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_summary_undo.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_summary.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_table_actions.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_table_data_set.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_temp_rowids.py (core) Allow using negative rowIds to add records and refer to them in Reference values. 2020-12-15 16:39:56 -05:00
test_textbuilder.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_treeview.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_trigger_formulas.py (core) add a user.SessionID value for trigger formulas and granular access rules 2022-02-22 12:50:43 -05:00
test_twowaymap.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_types.py (core) Nicer conversion from numeric to text 2021-09-30 14:16:24 +02:00
test_undo.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
test_urllib_patch.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_user.py (core) add a user.SessionID value for trigger formulas and granular access rules 2022-02-22 12:50:43 -05:00
test_useractions.py (core) Updating RawData views 2022-05-04 21:41:42 +02:00
testsamples.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
testscript.json (core) Updating RawData views 2022-05-04 21:41:42 +02:00
testutil.py (core) Implement trigger formulas (generalizing default formulas) 2021-06-25 22:53:07 -04:00
textbuilder.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
treeview.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
twowaymap.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
tzdata.data (core) move data engine code to core 2020-07-29 08:57:25 -04:00
urllib_patch.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
user.py (core) add a user.SessionID value for trigger formulas and granular access rules 2022-02-22 12:50:43 -05:00
useractions.py (core) Mark column changing actions as indirect when adding data to empty column 2022-05-25 16:21:04 +02:00
usercode.py (core) Raise syntax errors that Python can format nicely to show the location 2021-09-24 15:07:09 +02:00
usertypes.py (core) New type conversion in the backend 2022-02-04 20:28:13 +02:00
xmlrunner.py (core) Run python unit tests again in python 3 2021-06-30 21:46:18 +02:00