Use lazy evaluation #10
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Refactor the record manager
listandsearchmethods, and other methods on record managers, so that it is possible to use lazy evaluation.The
listandsearchmethods now returnListRecordsandSearchRecordsobjects, which do not perform any requests or processing at first. Calling theas_ids,as_dictsoras_recordsmethods on these objects invokes the API request, but instead of returning lists as with the previous behaviour, generators are returned instead so the user can choose between performing per-item processing lazily on each iteration, or converting to a list to eagerly evaluate everything.This removes the
as_idandas_dictoptional parameters from thelistandsearchmethods, which were not possible to express correctly with generators due to bugs in how Mypy handles conditional overloads. Returning a common object that contains separate methods with different, static return types is easier to make compliant with static type checkers.