Size: a a a

2020 May 26

СС

Сказочный Сникерс... in Rude QA
yield from?
источник

СС

Сказочный Сникерс... in Rude QA
или res = yield
источник

b

betzy in Rude QA
о внатуре
источник

b

betzy in Rude QA
нахуевертил пиздец. работает, но хуй мне кажется потом разберусь

def search_track(
   self,
   query: str = None,
   limit: int = 50,
   offset: int = 0,
   market: str = None,
   include_external: str = None,
) -> Generator:

   response = self.__search(
       q=query,
       search_type=SEARCH_TYPE.TRACK,
       market=market,
       limit=limit,
       offset=offset,
       include_external=include_external,
   )

   total_results = (
       Track(_track) for _track in response.tracks.get("items", [])
   )

   if limit == 0:
       yield from self.__next(
           response, total_results, search_type=SEARCH_TYPE.TRACK
       )

   for item in total_results:
       yield item

def __next(
   self,
   response: aDict = None,
   total_results: Generator = None,
   search_type: SEARCH_TYPE = None,
):
   search_map = {
       SEARCH_TYPE.TRACK: Track,
       SEARCH_TYPE.ALBUM: Album,
       SEARCH_TYPE.ARTIST: Artist,
   }

   _attrs = {
       SEARCH_TYPE.TRACK: "tracks",
       SEARCH_TYPE.ALBUM: "albums",
       SEARCH_TYPE.ARTIST: "artists",
   }

   while True:
       next_res = response.get(_attrs[search_type]).next

       for item in total_results:
           yield item

       if next_res:

           response = self.get(next_res, raw=True)

           total_results = (
               search_map.get(search_type)(_item)
               for _item in response.get(_attrs[search_type]).get(
                   "items", []
               )
           )
           continue
       else:
           break
источник

b

betzy in Rude QA
зато не будет копипаста
источник

СС

Сказочный Сникерс... in Rude QA
кажется тебе придется обложить это  комментами
источник

СС

Сказочный Сникерс... in Rude QA
два пробела между "это" и "комментами" не просто так, там было слово)
источник

СС

Сказочный Сникерс... in Rude QA
источник

b

betzy in Rude QA
ага
источник

b

betzy in Rude QA
сократил до двух методов и стало прям ваще заебись

def search(
   self,
   q: str = None,
   search_type: SEARCH_TYPE = SEARCH_TYPE.TRACK,
   market: Optional[str] = None,
   limit: int = 20,
   offset: int = 0,
   include_external: str = None,
) -> aDict:
   if limit > 50 or limit < 0:
       raise ValueError("Limit should be less or equal 50")

   query = {
       "q": q,
       "type": search_type,
       "limit": 50 if limit == 0 else limit,
       "offset": offset,
       "market": market,
       "include_external": include_external,
   }

   response = self.get("/search", params=query)

   total_results = (
       SEARCH_TYPE_MODEL.get(search_type)(_item)
       for _item in response.get(SEARCH_TYPE_ATTRS[search_type]).get(
           "items", []
       )
   )

   if limit == 0:
       yield from self.__next(
           response, total_results, search_type=search_type
       )

   for item in total_results:
       yield item

def __next(
   self,
   response: aDict = None,
   total_results: Generator = None,
   search_type: SEARCH_TYPE = None,
):

   while True:
       next_res = response.get(SEARCH_TYPE_ATTRS[search_type]).next

       for item in total_results:
           yield item

       if next_res:

           response = self.get(next_res, raw=True)

           total_results = (
               SEARCH_TYPE_MODEL.get(search_type)(_item)
               for _item in response.get(
                   SEARCH_TYPE_ATTRS[search_type]
               ).get("items", [])
           )
           continue
       else:
           break
источник

b

betzy in Rude QA
осталось решить вопрос, как лимитировать кол-во элементов, которые может вернут генератор
источник

b

betzy in Rude QA
то есть, возвращать не все, а, например 150
источник

b

betzy in Rude QA
можно хуйнуть счетчик, но это колхозно как-то. должно же быть уже готовое решение
источник

А

Алексей in Rude QA
betzy
можно хуйнуть счетчик, но это колхозно как-то. должно же быть уже готовое решение
готовое решение с тем же самым счетчиком под капотом :)
источник

b

betzy in Rude QA
это которое takewhile ?
источник

ИС

Игорь Середа... in Rude QA
Генератор не должен возвращать какое-то конечное количество. Он должен хуярить, пока не кончится.
источник

ИС

Игорь Середа... in Rude QA
В этом его суть.
источник

b

betzy in Rude QA
ога. просто спотик отдает порционно по 50 треков, а я хочу либой решить этот вопрос
источник

b

betzy in Rude QA
а похуй корчое
источник

СС

Сказочный Сникерс... in Rude QA
Игорь Середа
Генератор не должен возвращать какое-то конечное количество. Он должен хуярить, пока не кончится.
я бы поспорил
источник