Skip to content

Commit c7e9b51

Browse files
committed
chore: Fix sqlite3 deprecation. Ignore pkg_resources deprecation #328
1 parent 9d83ad4 commit c7e9b51

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

.github/workflows/tests.yml

+7-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ jobs:
1616
cache: pip
1717
cache-dependency-path: setup.py
1818
- run: pip install -e .[test]
19-
- run: pytest -W error -W ignore::ResourceWarning tests --cov scrapyd
19+
# Python 3.12 deprecates pkg_resources (also used by py-html-checker).
20+
- run: |
21+
pytest -W error -W ignore::ResourceWarning \
22+
-W ignore::DeprecationWarning:scrapyd.runner \
23+
-W ignore::DeprecationWarning:html_checker \
24+
-W ignore::DeprecationWarning:pkg_resources \
25+
tests --cov scrapyd
2026
# Occasional "ConnectionRefusedError: [Errno 111] Connection refused".
2127
- name: Run integration tests
2228
run: |

scrapyd/launcher.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ def _get_message(self, slot):
5555

5656
def _spawn_process(self, message, slot):
5757
project = message["_project"]
58-
environ = self.app.getComponent(IEnvironment)
58+
environment = self.app.getComponent(IEnvironment)
5959
message.setdefault("settings", {})
60-
message["settings"].update(environ.get_settings(message))
60+
message["settings"].update(environment.get_settings(message))
6161

62-
env = environ.get_environment(message, slot)
62+
env = environment.get_environment(message, slot)
6363
args = [sys.executable, "-m", self.runner, "crawl", *get_crawl_args(message)]
6464

6565
process = ScrapyProcessProtocol(project, message["_spider"], message["_job"], env, args)

scrapyd/sqlite.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import datetime
12
import json
23
import os
34
import sqlite3
4-
from datetime import datetime
55

66

77
# The database argument is "jobs" (in SqliteJobStorage), or a project (in SqliteSpiderQueue) from get_spider_queues(),
@@ -19,6 +19,19 @@ def initialize(cls, config, database, table):
1919
return cls(connection_string, table)
2020

2121

22+
# https://docs.python.org/3/library/sqlite3.html#sqlite3-adapter-converter-recipes
23+
def adapt_datetime(val):
24+
return val.strftime("%Y-%m-%d %H:%M:%S.%f")
25+
26+
27+
def convert_datetime(val):
28+
return datetime.datetime.strptime(val.decode(), "%Y-%m-%d %H:%M:%S.%f")
29+
30+
31+
sqlite3.register_adapter(datetime.datetime, adapt_datetime)
32+
sqlite3.register_converter("datetime", convert_datetime)
33+
34+
2235
class SqliteMixin:
2336
def __init__(self, database, table):
2437
self.database = database or ":memory:"
@@ -139,8 +152,8 @@ def __iter__(self):
139152
project,
140153
spider,
141154
job,
142-
datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S.%f"),
143-
datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S.%f"),
155+
datetime.datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S.%f"),
156+
datetime.datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S.%f"),
144157
)
145158
for project, spider, job, start_time, end_time in self.conn.execute(
146159
f"SELECT project, spider, job, start_time, end_time FROM {self.table} ORDER BY end_time DESC"

0 commit comments

Comments
 (0)