|
3 | 3 | handy getter methods, but otherwise you can just use a .json property to access the |
4 | 4 | raw json passed back by the client. |
5 | 5 | """ |
6 | | -from typing import Any, Dict, Optional |
| 6 | +from typing import Any, Dict, Optional, Callable |
7 | 7 | from urllib.parse import quote_plus |
8 | 8 |
|
9 | 9 | from feedly.protocol import APIClient |
10 | 10 | from feedly.stream import STREAM_SOURCE_USER, StreamOptions, StreamBase, UserStreamId, EnterpriseStreamId, StreamIdBase, STREAM_SOURCE_ENTERPRISE |
11 | | - |
| 11 | +import logging |
12 | 12 |
|
13 | 13 | class FeedlyData: |
14 | 14 | def __init__(self, json:Dict[str,Any], client:APIClient=None): |
@@ -184,30 +184,34 @@ def get_enterprise_tags(self, refresh: bool = False) -> Dict[str, 'EnterpriseTag |
184 | 184 |
|
185 | 185 | return self._enterprise_tags |
186 | 186 |
|
187 | | - def _get_category_or_tag(self, stream_id:StreamIdBase, cache, factory): |
| 187 | + def _get_category_or_tag(self, stream_id:StreamIdBase, cache:Dict[str,Streamable], factory:Callable[[Dict[str,str]], Streamable], auto_create:bool): |
188 | 188 | if cache: |
189 | 189 | data = cache.get(stream_id.content_id) |
190 | 190 | if data: |
191 | 191 | return data |
192 | | - raise ValueError(f'{id_} does not exist') |
| 192 | + |
| 193 | + if not auto_create: |
| 194 | + raise ValueError(f'{stream_id.id} does not exist') |
| 195 | + else: |
| 196 | + cache.clear() |
193 | 197 |
|
194 | 198 | return factory({'id': stream_id.id}, self._client) |
195 | 199 |
|
196 | 200 | def get_category(self, name:str): |
197 | 201 | id_ = UserStreamId(parts=[STREAM_SOURCE_USER, self.id, 'category', name]) |
198 | 202 |
|
199 | | - return self._get_category_or_tag(id_, self._categories, UserCategory) |
| 203 | + return self._get_category_or_tag(id_, self._categories, UserCategory, False) |
200 | 204 |
|
201 | 205 | def get_tag(self, name:str) -> 'UserTag': |
202 | 206 | id_ = UserStreamId(parts=[STREAM_SOURCE_USER, self.id, 'tag', name]) |
203 | 207 |
|
204 | | - return self._get_category_or_tag(id_, self._tags, UserTag) |
| 208 | + return self._get_category_or_tag(id_, self._tags, UserTag, True) |
205 | 209 |
|
206 | 210 | def get_enterprise_category(self, stream_id:EnterpriseStreamId) -> 'EnterpriseCategory': |
207 | | - return self._get_category_or_tag(stream_id, self._tags, EnterpriseCategory) |
| 211 | + return self._get_category_or_tag(stream_id, self._tags, EnterpriseCategory, False) |
208 | 212 |
|
209 | 213 | def get_enterprise_tag(self, stream_id:EnterpriseStreamId) -> 'EnterpriseTag': |
210 | | - return self._get_category_or_tag(stream_id, self._tags, EnterpriseTag) |
| 214 | + return self._get_category_or_tag(stream_id, self._tags, EnterpriseTag, False) |
211 | 215 |
|
212 | 216 |
|
213 | 217 |
|
0 commit comments