Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. # Сама фабрика:
  2. def predicate_maker(only_ids: Optional[List[str]], without_ids: Optional[List[str]],
  3. start_date: Optional[date], end_date: Optional[date]) -> Callable:
  4. """
  5. Фабрика замыканий, чтобы не тащить гору проверок в основной цикл.
  6. Предназначена для быстрой проверки id сущности и даты за которые мы получили показания
  7. """
  8. today = datetime.now().date()
  9.  
  10. def predicate(current_id: Optional[str], check_date: Optional[date]) -> bool:
  11. """
  12. Функция для проверки условий. Сохраняет в себе даты и списки, что
  13. позволяет легко и быстро их проверять и пропускать ненужные итерации обработки
  14. """
  15. result = False
  16.  
  17. if only_ids and current_id and current_id not in only_ids:
  18. # паука/станок нельзя обрабатывать, он не входит в список нужных
  19. result = True
  20.  
  21. if without_ids and current_id and current_id in without_ids:
  22. # паука/станок нельзя обрабатывать, он один из игнорируемых
  23. result = True
  24.  
  25. if start_date and check_date and check_date < start_date:
  26. # слишком ранние данные
  27. result = True
  28.  
  29. if end_date and check_date and check_date > end_date:
  30. # слишком поздние данные
  31. result = True
  32.  
  33. if check_date and check_date == today:
  34. # сегодняшние данные ещё не записаны
  35. result = True
  36.  
  37. return result
  38.  
  39. return predicate
  40.  
  41. # Создаём предикат:
  42. predicate = predicate_maker(conf.only_spiders, conf.without_spiders, conf.start_date, conf.end_date)
  43.  
  44. # Используем:
  45. for spider_id, spider_files in filenames_gen(get_folder_path(key=conf.csv_key)):
  46.  
  47. if predicate(spider_id, None):
  48. continue
  49.  
  50. # тут наш код
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement