Suggestion: Add 'iter_all' as iterator version of 'get_all'
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 38/100
Línea de trabajo
Comienza con la implementación existente de fetch_all en hubspot/utils/objects.py y revisa los puntos de entrada get_all y do_search descritos en el issue. Se considera terminado cuando el cliente proporciona un iterador integrado que gestiona las distintas formas de los argumentos de paginación y funciona con las API de objetos y asociaciones indicadas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
get_all reads all objects in memory before return. In most scenarios, an iterator can be a better fit.
My bypass solution:
This is based on fetch_all
PAGE_MAX_SIZE = 100
def iter_all(get_page_api_client, **kwargs):
after = kwargs.pop('after', None)
while True:
page = get_page_api_client.get_page(after=after, limit=PAGE_MAX_SIZE, **kwargs)
yield from page.results
if page.paging is None:
break
after = page.paging.next.after
It can be used like this
from itertools import islice
list(islice(iter_all(hs_client.crm.companies.basic_api, properties=['custom_field_1']), 2))
It can also be monkeypatched into suitable objects
import hubspot
def patch_iter_all():
def iter_all_for_crm(self, **kw):
yield from iter_all(self.basic_api, **kw)
hubspot.discovery.crm.tickets.discovery.Discovery.iter_all = iter_all_for_crm
hubspot.discovery.crm.products.discovery.Discovery.iter_all = iter_all_for_crm
hubspot.discovery.crm.quotes.discovery.Discovery.iter_all = iter_all_for_crm
hubspot.discovery.crm.contacts.discovery.Discovery.iter_all = iter_all_for_crm
hubspot.discovery.crm.deals.discovery.Discovery.iter_all = iter_all_for_crm
hubspot.discovery.crm.line_items.discovery.Discovery.iter_all = iter_all_for_crm
hubspot.discovery.crm.owners.discovery.Discovery.iter_all = iter_all_for_crm
hubspot.discovery.crm.companies.discovery.Discovery.iter_all = iter_all_for_crm
patch_iter_all()
Then the above example can simpler
list(islice(hs_client.crm.companies.iter_all(properties=['custom_field_1']), 2))
It would be nice if hubspot official api can have a 'iter_all' for every object that has 'get_all' function simply forward to fetch_all.
Just found there is another kind of 'get_all()' that returns forward paging object, like hs_client.crm.companies.associations_api.get_all() (where hs_client is the client object).
To iterate all items, it would be nice to have a common tool like this
def iter_from(f, **kwargs):
after = None
while True:
page = f(after=after, limit=100, **kwargs)
yield from page.results
if page.paging is None:
break
after = page.paging.next.after
Then it can be used as following
for item in iter_from(hs_client.crm.companies.associations_api.get_all, company_id='1234567', to_object_type='contact'):
# item is hubspot.crm.companies.models.associated_id.AssociatedId object
....
Edit: for functions like hs_client.crm.contacts.search_api.do_search the after and limit params are included in *Request object like PublicObjectSearchRequest.
Functions like hs_client.crm.companies.associations_api.get_all() have after and limit in function argument.
It would be nice if hubspot client can have a built-in pagination iterator.
- Lenguaje dominante
- Python
- Estrellas
- 434
- Forks
- 126
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de HubSpot/hubspot-api-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
HubSpot/hubspot-api-python#497 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
HubSpot/hubspot-api-python#498 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
HubSpot/hubspot-api-python#496 ·
-
HubSpot v4 APIs are deprecated Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
HubSpot/hubspot-api-python#495 · 1 comentario · 2 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
HubSpot/hubspot-api-python#494 ·
Todos los issues de HubSpot/hubspot-api-python
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
xinnan-tech/xiaozhi-fde-talk#263 ·
-
rules
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
huggingface/Repo2RLEnv#163 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
huggingface/sentence-transformers#4074 ·
-
comp/dashboard invalid P3
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
NousResearch/hermes-agent#121143 ·