From a9a3247d661f151cb7b50e36d8f092b4dd8e7960 Mon Sep 17 00:00:00 2001 From: Stephan Kulow Date: Tue, 30 Mar 2021 09:03:16 +0200 Subject: [PATCH] legal: Only wait 2 hours for legal reviews for openSUSE:Factory The churn rate of openSUSE:Factory is too high for legal to catch up these days, so we turn the default. Legal reviews for Factory are no longer blocking, but if we need the same package for another project or product, the lawyers had some time to look at it. And if we find a package not acceptable, we'll delete it from Factory later on. This may get painful, but the current legal situation is painful too. --- legal-auto.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/legal-auto.py b/legal-auto.py index 6e2ac991..836f0aab 100755 --- a/legal-auto.py +++ b/legal-auto.py @@ -9,17 +9,15 @@ import re import logging from optparse import OptionParser import cmdln +from dateutil.parser import parse +from datetime import timezone, timedelta import requests as REQ import json import time import yaml from urllib.error import HTTPError - -try: - from xml.etree import cElementTree as ET -except ImportError: - import cElementTree as ET +from lxml import etree as ET import osc.conf import osc.core @@ -30,7 +28,6 @@ from osclib.comments import CommentAPI http_GET = osc.core.http_GET - class LegalAuto(ReviewBot.ReviewBot): def __init__(self, *args, **kwargs): @@ -87,6 +84,18 @@ class LegalAuto(ReviewBot.ReviewBot): request = REQ.post(url, headers=self.legaldb_headers).json() return [package['id']] + def valid_for_opensuse(self, target_project, report): + if target_project != "openSUSE:Factory": + return False + indexed = report.get('indexed', None) + if not indexed: + return False + datetime = parse(indexed) + # give the legaldb 2 hours to find a match (so we prefer acceptable/correct over preliminary) + if datetime.now(timezone.utc) - datetime < timedelta(hours=2): + return False + return True + def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package): self.logger.info("%s/%s@%s -> %s/%s" % (src_project, src_package, src_rev, target_project, target_package)) @@ -97,6 +106,7 @@ class LegalAuto(ReviewBot.ReviewBot): src_project, src_package, src_rev) if not to_review: return None + self.message = None for pack in to_review: url = osc.core.makeurl(self.legaldb, ['package', str(pack)]) report = REQ.get(url, headers=self.legaldb_headers).json() @@ -112,6 +122,14 @@ class LegalAuto(ReviewBot.ReviewBot): package = REQ.post(url, headers=self.legaldb_headers).json() # reopen return None + if state == 'new' and self.valid_for_opensuse(target_project, report): + self.message = 'The legal review is accepted preliminary. The package may require actions later on.' + # reduce legal review priority - we're no longer waiting + url = osc.core.makeurl( + self.legaldb, ['package', str(pack)], {'priority': 1}) + if not self.dryrun: + REQ.patch(url, headers=self.legaldb_headers) + continue if not state in ['acceptable', 'correct', 'unacceptable']: return None if state == 'unacceptable': @@ -129,7 +147,8 @@ class LegalAuto(ReviewBot.ReviewBot): return None return False # print url, json.dumps(report) - self.message = 'ok' + if not self.message: + self.message = 'ok' return True def check_one_request(self, req):