Добавил возможность выбора очереди, в которую будет пушиться RMQItem через ItemProducerPipeline. Предполагается, что очередь будет выбираться на основе подклассов RMQItem-a. Необходимо унаследоваться от ItemProducerPipeline и переопределить метод choose_queue_name. По умолчанию будет использоваться очередь, которая будет возвращена методом get_result_queue_name.
Удалил атрибут result_queue_name, и его валидацию. Добавил вместо него метод get_result_queue_name и валидацию его аутпута. В основном, имя очереди берется из настроек проекта settings.py. Сейчас есть 2 способа в пауке установить имя очереди:
2.1. Импортировать функцию get_project_settings из scrapy.utils.project, вызвать её, и уже после получить доступ к имени очереди. Считаю такой подход не лучшим, из-за неочевидности и из-за возможных потенциальных ошибок, так как settings могут быть перегружены в пауке.
2.2. В класс методе from_crawler, создать экземпляр класса паука, получить доступ к его settings и присвоить этому экземпляру метод result_queue_name из settings. Считаю этот способ слишком грамоздким.
Example usage
Паук должен переопределить метод get_result_queue_name, который должен возвращать имя очереди типа str. В нем сразу доступны настройки паука через экземпляр класса.
TaskToSingleResultSpider - необходим метод get_result_queue_name, который возвращает имя единственной очереди.
TaskToMultipleResultsSpider - метод get_result_queue_name игнорируется(не нуждается в переопределении), вместо него требуется переопределить в пайплайне метод choose_queue_name, и указать в нем несколько очередей как в примере example usage. Сейчас это невозможно, так как при старте PikaSelectConnection декларирует всегда очередь, и get_result_queue_name переопределять все равно необходимо.
если запланируешь вернуться к "Futher features", то сначала надо будет переговорить. Single\Multiple изначально не несколько разных типов Item'ов определяют, за ними другая логика предполагалась.
Changelog:
Example usage
Паук должен переопределить метод get_result_queue_name, который должен возвращать имя очереди типа str. В нем сразу доступны настройки паука через экземпляр класса.
Пример использования pipeline-a для нескольких очередей.
Futher features
В идеале разделить логику для пауков: