@@ -1865,6 +1865,12 @@ class PipelineModel(Base):
18651865 index = True ,
18661866 )
18671867 koji_build_group = relationship ("KojiBuildGroupModel" , back_populates = "runs" )
1868+ koji_tag_request_group_id = Column (
1869+ Integer ,
1870+ ForeignKey ("koji_tag_request_groups.id" ),
1871+ index = True ,
1872+ )
1873+ koji_tag_request_group = relationship ("KojiTagRequestGroupModel" , back_populates = "runs" )
18681874 vm_image_build_id = Column (
18691875 Integer ,
18701876 ForeignKey ("vm_image_build_targets.id" ),
@@ -2822,6 +2828,143 @@ def get_all_projects(cls) -> set["GitProjectModel"]:
28222828 return set (projects )
28232829
28242830
2831+ class KojiTagRequestGroupModel (ProjectAndEventsConnector , GroupModel , Base ):
2832+ __tablename__ = "koji_tag_request_groups"
2833+ id = Column (Integer , primary_key = True )
2834+ submitted_time = Column (DateTime , default = datetime .utcnow )
2835+
2836+ runs = relationship ("PipelineModel" , back_populates = "koji_tag_request_group" )
2837+ koji_tag_request_targets = relationship (
2838+ "KojiTagRequestTargetModel" ,
2839+ back_populates = "group_of_targets" ,
2840+ )
2841+
2842+ @property
2843+ def grouped_targets (self ):
2844+ return self .koji_tag_request_targets
2845+
2846+ def __repr__ (self ) -> str :
2847+ return f"KojiTagRequestGroupModel(id={ self .id } , submitted_time={ self .submitted_time } )"
2848+
2849+ @classmethod
2850+ def get_by_id (cls , id_ : int ) -> Optional ["KojiTagRequestGroupModel" ]:
2851+ with sa_session_transaction () as session :
2852+ return session .query (KojiTagRequestGroupModel ).filter_by (id = id_ ).first ()
2853+
2854+ @classmethod
2855+ def create (cls , run_model : "PipelineModel" ) -> "KojiTagRequestGroupModel" :
2856+ with sa_session_transaction (commit = True ) as session :
2857+ tag_request_group = cls ()
2858+ session .add (tag_request_group )
2859+ if run_model .koji_tag_request_group :
2860+ # Clone run model
2861+ new_run_model = PipelineModel .create (
2862+ project_event = run_model .project_event ,
2863+ package_name = run_model .package_name ,
2864+ )
2865+ new_run_model .srpm_build = run_model .srpm_build
2866+ new_run_model .koji_tag_request_group = tag_request_group
2867+ session .add (new_run_model )
2868+ else :
2869+ run_model .koji_tag_request_group = tag_request_group
2870+ session .add (run_model )
2871+ return tag_request_group
2872+
2873+
2874+ class KojiTagRequestTargetModel (GroupAndTargetModelConnector , Base ):
2875+ """we create an entry for every target"""
2876+
2877+ __tablename__ = "koji_tag_request_targets"
2878+ id = Column (Integer , primary_key = True )
2879+ task_id = Column (String , index = True ) # ID of the Koji tag task
2880+
2881+ # chroot, but we use the word target in our docs
2882+ target = Column (String )
2883+ # URL to koji web ui for the particular build
2884+ web_url = Column (String )
2885+ # datetime.utcnow instead of datetime.utcnow() because its an argument to the function
2886+ # so it will run when the koji build is initiated, not when the table is made
2887+ tag_request_submitted_time = Column (DateTime , default = datetime .utcnow )
2888+
2889+ sidetag = Column (String )
2890+ nvr = Column (String )
2891+
2892+ koji_tag_request_group_id = Column (Integer , ForeignKey ("koji_tag_request_groups.id" ))
2893+
2894+ group_of_targets = relationship (
2895+ "KojiTagRequestGroupModel" ,
2896+ back_populates = "koji_tag_request_targets" ,
2897+ )
2898+
2899+ def set_web_url (self , web_url : str ):
2900+ with sa_session_transaction (commit = True ) as session :
2901+ self .web_url = web_url
2902+ session .add (self )
2903+
2904+ def set_task_id (self , task_id : str ):
2905+ with sa_session_transaction (commit = True ) as session :
2906+ self .task_id = task_id
2907+ session .add (self )
2908+
2909+ def set_tag_request_submitted_time (self , tag_request_submitted_time : Optional [DateTime ]):
2910+ with sa_session_transaction (commit = True ) as session :
2911+ self .tag_request_submitted_time = tag_request_submitted_time
2912+ session .add (self )
2913+
2914+ @classmethod
2915+ def get_by_id (cls , id_ : int ) -> Optional ["KojiTagRequestTargetModel" ]:
2916+ with sa_session_transaction () as session :
2917+ return session .query (KojiTagRequestTargetModel ).filter_by (id = id_ ).first ()
2918+
2919+ @classmethod
2920+ def get_all (cls ) -> Iterable ["KojiTagRequestTargetModel" ]:
2921+ with sa_session_transaction () as session :
2922+ return session .query (KojiTagRequestTargetModel )
2923+
2924+ @classmethod
2925+ def get_range (
2926+ cls ,
2927+ first : int ,
2928+ last : int ,
2929+ ) -> Iterable ["KojiTagRequestTargetModel" ]:
2930+ with sa_session_transaction () as session :
2931+ query = session .query (KojiTagRequestTargetModel ).order_by (
2932+ desc (KojiTagRequestTargetModel .id ),
2933+ )
2934+
2935+ return query .slice (first , last )
2936+
2937+ @classmethod
2938+ def create (
2939+ cls ,
2940+ task_id : Optional [str ],
2941+ web_url : Optional [str ],
2942+ target : str ,
2943+ koji_tag_request_group : "KojiTagRequestGroupModel" ,
2944+ sidetag : Optional [str ] = None ,
2945+ nvr : Optional [str ] = None ,
2946+ ) -> "KojiTagRequestTargetModel" :
2947+ with sa_session_transaction (commit = True ) as session :
2948+ tag_request = cls ()
2949+ tag_request .task_id = task_id
2950+ tag_request .web_url = web_url
2951+ tag_request .target = target
2952+ tag_request .sidetag = sidetag
2953+ tag_request .nvr = nvr
2954+ session .add (tag_request )
2955+
2956+ koji_tag_request_group .koji_tag_request_targets .append (tag_request )
2957+ session .add (koji_tag_request_group )
2958+
2959+ return tag_request
2960+
2961+ def __repr__ (self ):
2962+ return (
2963+ f"KojiTagRequestTargetModel(id={ self .id } , "
2964+ f"tag_submitted_time={ self .tag_request_submitted_time } )"
2965+ )
2966+
2967+
28252968class SRPMBuildModel (ProjectAndEventsConnector , Base ):
28262969 __tablename__ = "srpm_builds"
28272970 id = Column (Integer , primary_key = True )
0 commit comments