Desktop version Jobs
  • Analysis
  • Categories
  • Logs
  • Crawler.stats
  • projectevent_scrapers
    spidereco_evolution
    job78ee1566901211f1a35c0050565fa5d9
    first_log_time2026-08-04 16:40:48
    latest_log_time2026-08-04 16:40:49
    runtime0:00:01
    crawled_pages 1
    scraped_items 0
    shutdown_reasonN/A
    finish_reasonfinished
    log_critical_count0
    log_error_count1
    log_warning_count3
    log_redirect_count0
    log_retry_count2
    log_ignore_count1
    latest_crawl
    latest_scrape
    latest_log
    current_time
    latest_itemN/A
    • WARNING+

    • error_logs
      1 in total

      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 3 times): 429 Unknown Status
    • warning_logs
      3 in total

      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:41: ScrapyDeprecationWarning: EventScrapersPipeline.open_spider() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
        self._check_mw_method_spider_arg(pipe.open_spider)
      
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: EventScrapersPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
        self._check_mw_method_spider_arg(pipe.process_item)
      
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/core/spidermw.py:490: ScrapyDeprecationWarning: event_scrapers.spiders.eco_evolution.ListingSpider defines the deprecated start_requests() method. start_requests() has been deprecated in favor of a new method, start(), to support asynchronous code execution. start_requests() will stop being called in a future version of Scrapy. If you use Scrapy 2.13 or higher only, replace start_requests() with start(); note that start() is a coroutine (async def). If you need to maintain compatibility with lower Scrapy versions, when overriding start_requests() in a spider class, override start() as well; you can use super() to reuse the inherited start() implementation without copy-pasting. See the release notes of Scrapy 2.13 for details: https://docs.scrapy.org/en/2.13/news.html
        warn(
      

      INFO

    • retry_logs
      2 in total

      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 1 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 2 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 3 times): 429 Unknown Status
    • ignore_logs
      1 in total

      2026-08-04 16:40:49 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://www.ecoevolution.co/collections/events-in-the-green-room>: HTTP status code is not handled or not allowed

      DEBUG

    • scrapy_version

      2.14.1
    • telnet_console

      127.0.0.1:6023
    • telnet_password

      29c0900f9fe11208
    • latest_crawl

      2026-08-04 16:40:49 [scrapy.core.engine] DEBUG: Crawled (429) <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (referer: None)
    • latest_stat

      2026-08-04 16:40:49 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
    • Head

      2026-08-04 16:40:48 [scrapy.utils.log] INFO: Scrapy 2.14.1 started (bot: event_scrapers)
      2026-08-04 16:40:48 [scrapy.utils.log] INFO: Versions:
      {'lxml': '6.0.2',
       'libxml2': '2.14.6',
       'cssselect': '1.3.0',
       'parsel': '1.10.0',
       'w3lib': '2.0.0',
       'Twisted': '25.5.0',
       'Python': '3.12.3 (main, Jun 19 2026, 12:46:00) [GCC 13.3.0]',
       'pyOpenSSL': '25.3.0 (OpenSSL 3.5.4 30 Sep 2025)',
       'cryptography': '46.0.3',
       'Platform': 'Linux-6.8.0-90-generic-x86_64-with-glibc2.39'}
      2026-08-04 16:40:48 [scrapy.crawler] DEBUG: Using AsyncCrawlerProcess
      2026-08-04 16:40:48 [asyncio] DEBUG: Using selector: EpollSelector
      2026-08-04 16:40:48 [scrapy.addons] INFO: Enabled addons:
      []
      2026-08-04 16:40:49 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor
      2026-08-04 16:40:49 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.unix_events._UnixSelectorEventLoop
      2026-08-04 16:40:49 [scrapy.extensions.telnet] INFO: Telnet Password: 29c0900f9fe11208
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled extensions:
      ['scrapy.extensions.corestats.CoreStats',
       'scrapy.extensions.logcount.LogCount',
       'scrapy.extensions.telnet.TelnetConsole',
       'scrapy.extensions.memusage.MemoryUsage',
       'scrapy.extensions.feedexport.FeedExporter',
       'scrapy.extensions.logstats.LogStats']
      2026-08-04 16:40:49 [scrapy.crawler] INFO: Overridden settings:
      {'BOT_NAME': 'event_scrapers',
       'FEED_EXPORT_ENCODING': 'utf-8',
       'FEED_URI_PARAMS': <function _feed_uri_params at 0x71d249fef4c0>,
       'LOG_FILE': '/root/event-list-scraping/logs/event_scrapers/eco_evolution/78ee1566901211f1a35c0050565fa5d9.log',
       'NEWSPIDER_MODULE': 'event_scrapers.spiders',
       'REQUEST_FINGERPRINTER_CLASS': 'scrapy_zyte_api.ScrapyZyteAPIRequestFingerprinter',
       'SPIDER_MODULES': ['event_scrapers.spiders']}
      2026-08-04 16:40:49 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with 'ff9baec'
      2026-08-04 16:40:49 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with 'ff9baec'
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled downloader middlewares:
      ['scrapy.downloadermiddlewares.offsite.OffsiteMiddleware',
       'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
       'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
       'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
       'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
       'scrapy.downloadermiddlewares.retry.RetryMiddleware',
       'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
       'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
       'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPIDownloaderMiddleware',
       'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
       'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
       'scrapy.downloadermiddlewares.stats.DownloaderStats']
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled spider middlewares:
      ['scrapy.spidermiddlewares.start.StartSpiderMiddleware',
       'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPISpiderMiddleware',
       'scrapy.spidermiddlewares.referer.RefererMiddleware',
       'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
       'scrapy.spidermiddlewares.depth.DepthMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPIRefererSpiderMiddleware']
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled item pipelines:
      ['event_scrapers.pipelines.EventScrapersPipeline']
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:41: ScrapyDeprecationWarning: EventScrapersPipeline.open_spider() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
        self._check_mw_method_spider_arg(pipe.open_spider)
      
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: EventScrapersPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
        self._check_mw_method_spider_arg(pipe.process_item)
      
      2026-08-04 16:40:49 [scrapy.core.engine] INFO: Spider opened
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/core/spidermw.py:490: ScrapyDeprecationWarning: event_scrapers.spiders.eco_evolution.ListingSpider defines the deprecated start_requests() method. start_requests() has been deprecated in favor of a new method, start(), to support asynchronous code execution. start_requests() will stop being called in a future version of Scrapy. If you use Scrapy 2.13 or higher only, replace start_requests() with start(); note that start() is a coroutine (async def). If you need to maintain compatibility with lower Scrapy versions, when overriding start_requests() in a spider class, override start() as well; you can use super() to reuse the inherited start() implementation without copy-pasting. See the release notes of Scrapy 2.13 for details: https://docs.scrapy.org/en/2.13/news.html
        warn(
      
      2026-08-04 16:40:49 [eco_evolution] INFO: Sending scraped events to prod API
      2026-08-04 16:40:49 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
      2026-08-04 16:40:49 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 1 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 2 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 3 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.core.engine] DEBUG: Crawled (429) <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (referer: None)
      2026-08-04 16:40:49 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://www.ecoevolution.co/collections/events-in-the-green-room>: HTTP status code is not handled or not allowed
      2026-08-04 16:40:49 [scrapy.core.engine] INFO: Closing spider (finished)
      2026-08-04 16:40:49 [scrapy.extensions.feedexport] INFO: Stored csv feed (0 items) in: output/2026/08/04/eco_evolution.csv
      2026-08-04 16:40:49 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
      {'downloader/request_bytes': 780,
       'downloader/request_count': 3,
       'downloader/request_method_count/GET': 3,
       'downloader/response_bytes': 2389,
       'downloader/response_count': 3,
       'downloader/response_status_count/429': 3,
       'elapsed_time_seconds': 0.541026,
       'feedexport/success_count/FileFeedStorage': 1,
       'finish_reason': 'finished',
       'finish_time': datetime.datetime(2026, 8, 4, 14, 40, 49, 845509, tzinfo=datetime.timezone.utc),
       'httperror/response_ignored_count': 1,
       'httperror/response_ignored_status_count/429': 1,
       'items_per_minute': None,
       'log_count/DEBUG': 3,
       'log_count/ERROR': 1,
       'log_count/INFO': 4,
       'memusage/max': 99930112,
       'memusage/startup': 99930112,
       'response_received_count': 1,
    • Tail

      2026-08-04 16:40:48 [scrapy.utils.log] INFO: Scrapy 2.14.1 started (bot: event_scrapers)
      2026-08-04 16:40:48 [scrapy.utils.log] INFO: Versions:
      {'lxml': '6.0.2',
       'libxml2': '2.14.6',
       'cssselect': '1.3.0',
       'parsel': '1.10.0',
       'w3lib': '2.0.0',
       'Twisted': '25.5.0',
       'Python': '3.12.3 (main, Jun 19 2026, 12:46:00) [GCC 13.3.0]',
       'pyOpenSSL': '25.3.0 (OpenSSL 3.5.4 30 Sep 2025)',
       'cryptography': '46.0.3',
       'Platform': 'Linux-6.8.0-90-generic-x86_64-with-glibc2.39'}
      2026-08-04 16:40:48 [scrapy.crawler] DEBUG: Using AsyncCrawlerProcess
      2026-08-04 16:40:48 [asyncio] DEBUG: Using selector: EpollSelector
      2026-08-04 16:40:48 [scrapy.addons] INFO: Enabled addons:
      []
      2026-08-04 16:40:49 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor
      2026-08-04 16:40:49 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.unix_events._UnixSelectorEventLoop
      2026-08-04 16:40:49 [scrapy.extensions.telnet] INFO: Telnet Password: 29c0900f9fe11208
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled extensions:
      ['scrapy.extensions.corestats.CoreStats',
       'scrapy.extensions.logcount.LogCount',
       'scrapy.extensions.telnet.TelnetConsole',
       'scrapy.extensions.memusage.MemoryUsage',
       'scrapy.extensions.feedexport.FeedExporter',
       'scrapy.extensions.logstats.LogStats']
      2026-08-04 16:40:49 [scrapy.crawler] INFO: Overridden settings:
      {'BOT_NAME': 'event_scrapers',
       'FEED_EXPORT_ENCODING': 'utf-8',
       'FEED_URI_PARAMS': <function _feed_uri_params at 0x71d249fef4c0>,
       'LOG_FILE': '/root/event-list-scraping/logs/event_scrapers/eco_evolution/78ee1566901211f1a35c0050565fa5d9.log',
       'NEWSPIDER_MODULE': 'event_scrapers.spiders',
       'REQUEST_FINGERPRINTER_CLASS': 'scrapy_zyte_api.ScrapyZyteAPIRequestFingerprinter',
       'SPIDER_MODULES': ['event_scrapers.spiders']}
      2026-08-04 16:40:49 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with 'ff9baec'
      2026-08-04 16:40:49 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with 'ff9baec'
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled downloader middlewares:
      ['scrapy.downloadermiddlewares.offsite.OffsiteMiddleware',
       'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
       'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
       'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
       'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
       'scrapy.downloadermiddlewares.retry.RetryMiddleware',
       'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
       'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
       'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPIDownloaderMiddleware',
       'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
       'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
       'scrapy.downloadermiddlewares.stats.DownloaderStats']
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled spider middlewares:
      ['scrapy.spidermiddlewares.start.StartSpiderMiddleware',
       'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPISpiderMiddleware',
       'scrapy.spidermiddlewares.referer.RefererMiddleware',
       'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
       'scrapy.spidermiddlewares.depth.DepthMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPIRefererSpiderMiddleware']
      2026-08-04 16:40:49 [scrapy.middleware] INFO: Enabled item pipelines:
      ['event_scrapers.pipelines.EventScrapersPipeline']
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:41: ScrapyDeprecationWarning: EventScrapersPipeline.open_spider() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
        self._check_mw_method_spider_arg(pipe.open_spider)
      
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: EventScrapersPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
        self._check_mw_method_spider_arg(pipe.process_item)
      
      2026-08-04 16:40:49 [scrapy.core.engine] INFO: Spider opened
      2026-08-04 16:40:49 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/core/spidermw.py:490: ScrapyDeprecationWarning: event_scrapers.spiders.eco_evolution.ListingSpider defines the deprecated start_requests() method. start_requests() has been deprecated in favor of a new method, start(), to support asynchronous code execution. start_requests() will stop being called in a future version of Scrapy. If you use Scrapy 2.13 or higher only, replace start_requests() with start(); note that start() is a coroutine (async def). If you need to maintain compatibility with lower Scrapy versions, when overriding start_requests() in a spider class, override start() as well; you can use super() to reuse the inherited start() implementation without copy-pasting. See the release notes of Scrapy 2.13 for details: https://docs.scrapy.org/en/2.13/news.html
        warn(
      
      2026-08-04 16:40:49 [eco_evolution] INFO: Sending scraped events to prod API
      2026-08-04 16:40:49 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
      2026-08-04 16:40:49 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 1 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 2 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (failed 3 times): 429 Unknown Status
      2026-08-04 16:40:49 [scrapy.core.engine] DEBUG: Crawled (429) <GET https://www.ecoevolution.co/collections/events-in-the-green-room> (referer: None)
      2026-08-04 16:40:49 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://www.ecoevolution.co/collections/events-in-the-green-room>: HTTP status code is not handled or not allowed
      2026-08-04 16:40:49 [scrapy.core.engine] INFO: Closing spider (finished)
      2026-08-04 16:40:49 [scrapy.extensions.feedexport] INFO: Stored csv feed (0 items) in: output/2026/08/04/eco_evolution.csv
      2026-08-04 16:40:49 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
      {'downloader/request_bytes': 780,
       'downloader/request_count': 3,
       'downloader/request_method_count/GET': 3,
       'downloader/response_bytes': 2389,
       'downloader/response_count': 3,
       'downloader/response_status_count/429': 3,
       'elapsed_time_seconds': 0.541026,
       'feedexport/success_count/FileFeedStorage': 1,
       'finish_reason': 'finished',
       'finish_time': datetime.datetime(2026, 8, 4, 14, 40, 49, 845509, tzinfo=datetime.timezone.utc),
       'httperror/response_ignored_count': 1,
       'httperror/response_ignored_status_count/429': 1,
       'items_per_minute': None,
       'log_count/DEBUG': 3,
       'log_count/ERROR': 1,
       'log_count/INFO': 4,
       'memusage/max': 99930112,
       'memusage/startup': 99930112,
       'response_received_count': 1,
       'responses_per_minute': None,
       'retry/count': 2,
       'retry/max_reached': 1,
       'retry/reason_count/429 Unknown Status': 2,
       'scheduler/dequeued': 3,
       'scheduler/dequeued/memory': 3,
       'scheduler/enqueued': 3,
       'scheduler/enqueued/memory': 3,
       'start_time': datetime.datetime(2026, 8, 4, 14, 40, 49, 304483, tzinfo=datetime.timezone.utc)}
      2026-08-04 16:40:49 [scrapy.core.engine] INFO: Spider closed (finished)
    • Log

      /1/log/utf8/event_scrapers/eco_evolution/78ee1566901211f1a35c0050565fa5d9/?job_finished=True&ui=mobile

    • Source

      http://127.0.0.1:6800/logs/event_scrapers/eco_evolution/78ee1566901211f1a35c0050565fa5d9.log

  • sourcelog
    last update time2026-08-04 16:40:49
    last update timestamp1785854449
    downloader / request bytes780
    downloader / request count3
    downloader / request method count / GET3
    downloader / response bytes2389
    downloader / response count3
    downloader / response status count / 4293
    elapsed time seconds0.541026
    feedexport / success count / FileFeedStorage1
    finish reasonfinished
    finish timedatetime.datetime(2026, 8, 4, 14, 40, 49, 845509, tzinfo=datetime.timezone.utc)
    httperror / response ignored count1
    httperror / response ignored status count / 4291
    items per minuteNone
    log count / DEBUG3
    log count / ERROR1
    log count / INFO4
    memusage / max99930112
    memusage / startup99930112
    response received count1
    responses per minuteNone
    retry / count2
    retry / max reached1
    retry / reason count / 429 Unknown Status2
    scheduler / dequeued3
    scheduler / dequeued / memory3
    scheduler / enqueued3
    scheduler / enqueued / memory3
    start timedatetime.datetime(2026, 8, 4, 14, 40, 49, 304483, tzinfo=datetime.timezone.utc)