Minor nodeiterator-related docs improvements
This commit is contained in:
parent
fe9cd653e7
commit
612842f255
@ -431,7 +431,7 @@ class InstaloaderContext:
|
|||||||
"""
|
"""
|
||||||
Retrieve a list of GraphQL nodes.
|
Retrieve a list of GraphQL nodes.
|
||||||
|
|
||||||
..deprecated:: 4.5
|
.. deprecated:: 4.5
|
||||||
Use :class:`NodeIterator` instead, which provides more functionality.
|
Use :class:`NodeIterator` instead, which provides more functionality.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -59,13 +59,13 @@ class NodeIterator(Iterator[T]):
|
|||||||
been constructed with the same parameters as the instance that is represented by the :class:`FrozenNodeIterator` in
|
been constructed with the same parameters as the instance that is represented by the :class:`FrozenNodeIterator` in
|
||||||
question. This is to ensure that an iteration cannot be resumed in a wrong, unmatching loop. As a quick way to
|
question. This is to ensure that an iteration cannot be resumed in a wrong, unmatching loop. As a quick way to
|
||||||
distinguish iterators that are saved e.g. in files, there is the :attr:`NodeIterator.magic` string: Two
|
distinguish iterators that are saved e.g. in files, there is the :attr:`NodeIterator.magic` string: Two
|
||||||
NodeIterators are matching if they have the same magic.
|
NodeIterators are matching if and only if they have the same magic.
|
||||||
|
|
||||||
See also :func:`resumable_iteration` for a high-level context manager that handles a resumable iteration.
|
See also :func:`resumable_iteration` for a high-level context manager that handles a resumable iteration.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_graphql_page_length = 50
|
_graphql_page_length = 50
|
||||||
shelf_life = timedelta(days=29)
|
_shelf_life = timedelta(days=29)
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
context: InstaloaderContext,
|
context: InstaloaderContext,
|
||||||
@ -85,7 +85,7 @@ class NodeIterator(Iterator[T]):
|
|||||||
self._page_index = 0
|
self._page_index = 0
|
||||||
self._total_index = 0
|
self._total_index = 0
|
||||||
self._best_before = (None if first_data is None else
|
self._best_before = (None if first_data is None else
|
||||||
datetime.now() + NodeIterator.shelf_life)
|
datetime.now() + NodeIterator._shelf_life)
|
||||||
|
|
||||||
def _query(self, after: Optional[str] = None) -> Dict:
|
def _query(self, after: Optional[str] = None) -> Dict:
|
||||||
pagination_variables = {'first': NodeIterator._graphql_page_length} # type: Dict[str, Any]
|
pagination_variables = {'first': NodeIterator._graphql_page_length} # type: Dict[str, Any]
|
||||||
@ -97,7 +97,7 @@ class NodeIterator(Iterator[T]):
|
|||||||
self._query_hash, {**self._query_variables, **pagination_variables}, self._query_referer
|
self._query_hash, {**self._query_variables, **pagination_variables}, self._query_referer
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
self._best_before = datetime.now() + NodeIterator.shelf_life
|
self._best_before = datetime.now() + NodeIterator._shelf_life
|
||||||
return data
|
return data
|
||||||
except QueryReturnedBadRequestException:
|
except QueryReturnedBadRequestException:
|
||||||
new_page_length = int(NodeIterator._graphql_page_length / 2)
|
new_page_length = int(NodeIterator._graphql_page_length / 2)
|
||||||
@ -112,7 +112,7 @@ class NodeIterator(Iterator[T]):
|
|||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self) -> T:
|
||||||
if self._data is None:
|
if self._data is None:
|
||||||
self._data = self._query()
|
self._data = self._query()
|
||||||
if self._page_index < len(self._data['edges']):
|
if self._page_index < len(self._data['edges']):
|
||||||
@ -177,7 +177,15 @@ class NodeIterator(Iterator[T]):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def thaw(self, frozen: FrozenNodeIterator) -> None:
|
def thaw(self, frozen: FrozenNodeIterator) -> None:
|
||||||
"""Use this iterator for resuming from earlier iteration."""
|
"""
|
||||||
|
Use this iterator for resuming from earlier iteration.
|
||||||
|
|
||||||
|
:raises InvalidArgumentException:
|
||||||
|
If
|
||||||
|
|
||||||
|
- the iterator on which this method is called has already been used, or
|
||||||
|
- the given :class:`FrozenNodeIterator` does not match, i.e. belongs to a different iteration.
|
||||||
|
"""
|
||||||
if self._total_index or self._page_index:
|
if self._total_index or self._page_index:
|
||||||
raise InvalidArgumentException("thaw() called on already-used iterator.")
|
raise InvalidArgumentException("thaw() called on already-used iterator.")
|
||||||
if (self._query_hash != frozen.query_hash or
|
if (self._query_hash != frozen.query_hash or
|
||||||
|
Loading…
x
Reference in New Issue
Block a user