periodic_log: Exception handling on init updated

This commit is contained in:
Georgiy Zatserklianyi 2023-06-25 12:16:59 +03:00
parent 6e65eeb07b
commit 2ce4856508
2 changed files with 69 additions and 24 deletions

View File

@ -39,29 +39,16 @@ class PeriodicLog:
interval = crawler.settings.getfloat("LOGSTATS_INTERVAL")
try:
ext_stats = crawler.settings.getdict("PERIODIC_LOG_STATS")
except ValueError:
except (TypeError, ValueError):
ext_stats = (
{"enabled": True}
if crawler.settings.getbool("PERIODIC_LOG_STATS")
else None
)
except TypeError:
ext_stats = (
{"enabled": True}
if crawler.settings.getbool("PERIODIC_LOG_STATS")
else None
)
try:
ext_delta = crawler.settings.getdict("PERIODIC_LOG_DELTA")
except ValueError:
except (TypeError, ValueError):
ext_delta = (
{"enabled": True}
if crawler.settings.getdict("PERIODIC_LOG_DELTA")
else None
)
except TypeError:
ext_stats = (
{"enabled": True}
if crawler.settings.getbool("PERIODIC_LOG_DELTA")
else None

View File

@ -51,20 +51,78 @@ stats_dump_2 = {
}
def extension(settings=None):
return PeriodicLog.from_crawler(
Crawler(
MetaSpider,
settings=settings,
)
)
class TestPeriodicLog(unittest.TestCase):
def test_extension_enabled(self):
extension = PeriodicLog.from_crawler(
Crawler(
MetaSpider,
settings={"PERIODIC_LOG_STATS": True, "LOGSTATS_INTERVAL": 60},
)
)
# Test enabled
assert extension
# Expected that settings for this extension loaded succesfully
# And on certain conditions - extension raising NotConfigured
# "PERIODIC_LOG_STATS": True -> set to {"enabled": True}
# due to TypeError exception from settings.getdict
assert extension({"PERIODIC_LOG_STATS": True, "LOGSTATS_INTERVAL": 60})
# "PERIODIC_LOG_STATS": "True" -> set to {"enabled": True}
# due to JSONDecodeError(ValueError) exception from settings.getdict
assert extension({"PERIODIC_LOG_STATS": "True", "LOGSTATS_INTERVAL": 60})
# The ame for PERIODIC_LOG_DELTA:
assert extension({"PERIODIC_LOG_DELTA": True, "LOGSTATS_INTERVAL": 60})
assert extension({"PERIODIC_LOG_DELTA": "True", "LOGSTATS_INTERVAL": 60})
# Raise not configured if not set by settings
with self.assertRaises(NotConfigured):
PeriodicLog.from_crawler(Crawler(MetaSpider))
extension()
# Regular use cases:
assert extension(
{
"PERIODIC_LOG_STATS": {
"include": [
"downloader/",
"scheduler/",
"log_count/",
"item_scraped_count/",
],
"exclude": ["scheduler/"],
}
}
)
assert extension(
{
"PERIODIC_LOG_DELTA": {"include": ["downloader/"]},
"PERIODIC_LOG_TIMING_ENABLED": True,
}
)
assert extension(
{
"PERIODIC_LOG_TIMING_ENABLED": True,
}
)
assert extension(
{
"PERIODIC_LOG_STATS": {
"include": [
"downloader/",
"scheduler/",
"log_count/",
"item_scraped_count/",
],
"exclude": ["scheduler/"],
},
"PERIODIC_LOG_DELTA": {"include": ["downloader/"]},
}
)
def test_periodic_log_stats(self):
pass