Do not provide a db session for problem reports

at least, the default handler no longer does that...not sure yet if it would
ever be useful for some handlers to or not
This commit is contained in:
Lance Edgar 2019-10-10 21:32:45 -05:00
parent de0c6a7100
commit f177e8e36e
3 changed files with 11 additions and 15 deletions

View file

@ -120,22 +120,14 @@ class ProblemReportHandler(object):
:param fix: This flag will be passed as-is to :param fix: This flag will be passed as-is to
:meth:`run_problem_report()`. :meth:`run_problem_report()`.
""" """
session = Session()
organized = self.organize_problem_reports(reports) organized = self.organize_problem_reports(reports)
for system_key in sorted(organized): for system_key in sorted(organized):
system = organized[system_key] system = organized[system_key]
for problem_key in sorted(system): for problem_key in sorted(system):
report = system[problem_key] report = system[problem_key]
self.run_problem_report(report, session, fix=fix) self.run_problem_report(report, fix=fix)
if self.dry_run: def run_problem_report(self, problem_report, fix=False, **kwargs):
session.rollback()
else:
session.commit()
session.close()
def run_problem_report(self, problem_report, session, fix=False, **kwargs):
""" """
Run a specific problem report. Run a specific problem report.
""" """
@ -147,7 +139,7 @@ class ProblemReportHandler(object):
dry_run=self.dry_run, dry_run=self.dry_run,
progress=self.progress) progress=self.progress)
problems = report.find_problems(session, **kwargs) problems = report.find_problems(**kwargs)
log.debug("found %s problems", len(problems)) log.debug("found %s problems", len(problems))
if problems: if problems:
self.send_problem_report(report, problems) self.send_problem_report(report, problems)

View file

@ -28,7 +28,7 @@ from __future__ import unicode_literals, absolute_import
from sqlalchemy import orm from sqlalchemy import orm
from rattail.db import model from rattail.db import Session, model
from rattail.problems import ProblemReport from rattail.problems import ProblemReport
@ -46,8 +46,9 @@ class ProductWithoutPrice(RattailProblemReport):
problem_key = 'product_without_price' problem_key = 'product_without_price'
problem_title = "Products with no price" problem_title = "Products with no price"
def find_problems(self, session, **kwargs): def find_problems(self, **kwargs):
problems = [] problems = []
session = Session()
products = session.query(model.Product)\ products = session.query(model.Product)\
.options(orm.joinedload(model.Product.regular_price)) .options(orm.joinedload(model.Product.regular_price))
@ -58,6 +59,7 @@ class ProductWithoutPrice(RattailProblemReport):
self.progress_loop(inspect, products, self.progress_loop(inspect, products,
message="Looking for products with no price") message="Looking for products with no price")
session.close()
return problems return problems
@ -68,8 +70,10 @@ class UpgradePending(RattailProblemReport):
problem_key = 'upgrade_pending' problem_key = 'upgrade_pending'
problem_title = "Pending upgrade" problem_title = "Pending upgrade"
def find_problems(self, session, **kwargs): def find_problems(self, **kwargs):
session = Session()
upgrades = session.query(model.Upgrade)\ upgrades = session.query(model.Upgrade)\
.filter(model.Upgrade.status_code == self.enum.UPGRADE_STATUS_PENDING)\ .filter(model.Upgrade.status_code == self.enum.UPGRADE_STATUS_PENDING)\
.all() .all()
session.close()
return upgrades return upgrades

View file

@ -53,7 +53,7 @@ class ProblemReport(object):
factory = factory or self.progress factory = factory or self.progress
return progress_loop(func, items, factory, **kwargs) return progress_loop(func, items, factory, **kwargs)
def find_problems(self, session, **kwargs): def find_problems(self, **kwargs):
""" """
Find all problems for which this report is responsible. This should Find all problems for which this report is responsible. This should
always return a list, although no constraint is made on what the always return a list, although no constraint is made on what the