Package coprs :: Package logic :: Module outdated_chroots_logic
[hide private]
[frames] | no frames]

Source Code for Module coprs.logic.outdated_chroots_logic

 1  import flask 
 2  from datetime import datetime, timedelta 
 3  from coprs import db 
 4  from coprs import app 
 5  from coprs import models 
 6  from coprs.logic.complex_logic import ComplexLogic 
 7  from coprs.logic.coprs_logic import CoprChrootsLogic 
8 9 10 -class OutdatedChrootsLogic:
11 @classmethod
12 - def has_not_reviewed(cls, user):
13 """ 14 Does a user have some projects with newly outdated chroots that he 15 hasn't reviewed yet? 16 """ 17 projects = ComplexLogic.get_coprs_permissible_by_user(user) 18 projects_ids = [p.id for p in projects] 19 period = app.config["EOL_CHROOTS_NOTIFICATION_PERIOD"] 20 now = datetime.now() 21 soon = now + timedelta(days=period) 22 23 reviewed = [x.copr_chroot_id for x in cls.get_all_reviews(user).all()] 24 return bool((models.CoprChroot.query 25 .filter(models.CoprChroot.copr_id.in_(projects_ids)) 26 .filter(models.CoprChroot.delete_after != None) 27 .filter(models.CoprChroot.delete_after <= soon) 28 .filter(models.CoprChroot.delete_after > now) 29 .filter(models.CoprChroot.id.notin_(reviewed)) 30 .first()))
31 32 @classmethod
33 - def get_all_reviews(cls, user):
34 """ 35 Query all outdated chroots that a user has already seen 36 """ 37 return (models.ReviewedOutdatedChroot.query 38 .filter(models.ReviewedOutdatedChroot.user_id == user.id))
39 40 @classmethod
41 - def make_review(cls, user):
42 """ 43 A `user` declares that he has seen and reviewed all outdated chroots in 44 all of his projects (i.e. this method creates `ReviewedOutdatedChroot` 45 results for all of them) 46 """ 47 reviews = {x.copr_chroot_id for x in cls.get_all_reviews(user)} 48 for copr in ComplexLogic.get_coprs_permissible_by_user(user): 49 for chroot in copr.outdated_chroots: 50 if chroot.id in reviews: 51 continue 52 53 period = app.config["EOL_CHROOTS_NOTIFICATION_PERIOD"] 54 if chroot.delete_after_days > period: 55 continue 56 57 review = models.ReviewedOutdatedChroot( 58 user_id=user.id, 59 copr_chroot_id=chroot.id, 60 ) 61 db.session.add(review)
62 63 @classmethod
64 - def extend(cls, copr_chroot):
65 """ 66 A `user` decided to extend the preservation period for some EOL chroot 67 """ 68 delete_after_days = app.config["DELETE_EOL_CHROOTS_AFTER"] + 1 69 cls._update_copr_chroot(copr_chroot, delete_after_days) 70 (models.ReviewedOutdatedChroot.query 71 .filter(models.ReviewedOutdatedChroot.copr_chroot_id 72 == copr_chroot.id)).delete()
73 74 @classmethod
75 - def expire(cls, copr_chroot):
76 """ 77 A `user` decided to expire some EOL chroot, 78 i.e. its data should be deleted ASAP 79 """ 80 delete_after_days = 0 81 cls._update_copr_chroot(copr_chroot, delete_after_days)
82 83 @classmethod
84 - def _update_copr_chroot(cls, copr_chroot, delete_after_days):
85 delete_after_timestamp = ( 86 datetime.now() 87 + timedelta(days=delete_after_days) 88 ) 89 CoprChrootsLogic.update_chroot(flask.g.user, copr_chroot, 90 delete_after=delete_after_timestamp)
91