Skip to content

Commit 77896a1

Browse files
Add a new usage function to get the onboarded projects (#2330)
Add a new usage function to get the onboarded projects I re-ran it with the production db locally and I got this: Merge before packit/dashboard#373 { "onboarded": { "31087": "https://src.fedoraproject.org/rpms/dnf5", "31092": "https://src.fedoraproject.org/rpms/libreport", "31094": "https://src.fedoraproject.org/rpms/osbuild", "31096": "https://src.fedoraproject.org/rpms/linux-system-roles", "31098": "https://src.fedoraproject.org/rpms/packit", "31099": "https://src.fedoraproject.org/rpms/python-scikit-build-core", "31107": "https://src.fedoraproject.org/rpms/container-selinux", "31108": "https://src.fedoraproject.org/rpms/fedora-messaging", "31109": "https://src.fedoraproject.org/rpms/python-noggin-messages", "31111": "https://src.fedoraproject.org/rpms/cockpit-podman", "31112": "https://src.fedoraproject.org/rpms/cockpit", "31113": "https://src.fedoraproject.org/rpms/python-awscrt", "31116": "https://src.fedoraproject.org/rpms/nmstate", "31117": "https://src.fedoraproject.org/rpms/cockpit-machines", "31118": "https://src.fedoraproject.org/rpms/anaconda", "31129": "https://src.fedoraproject.org/rpms/podman", "31139": "https://src.fedoraproject.org/rpms/awscli2", "31142": "https://src.fedoraproject.org/rpms/python-specfile", "31153": "https://src.fedoraproject.org/rpms/gpxsee", "31154": "https://src.fedoraproject.org/rpms/cockpit-ostree", "31155": "https://src.fedoraproject.org/rpms/subscription-manager", "31157": "https://src.fedoraproject.org/rpms/qm", "31311": "https://src.fedoraproject.org/rpms/osbuild-composer", "31312": "https://src.fedoraproject.org/rpms/cockpit-session-recording", "31356": "https://src.fedoraproject.org/rpms/abrt-java-connector", "31359": "https://src.fedoraproject.org/rpms/man-pages-l10n", "31365": "https://src.fedoraproject.org/rpms/python-deprecated", "31372": "https://src.fedoraproject.org/rpms/fasterxml-oss-parent", "31392": "https://src.fedoraproject.org/rpms/python-ogr", "31394": "https://src.fedoraproject.org/rpms/python-fasjson-client", "31395": "https://src.fedoraproject.org/rpms/tmt", "31404": "https://src.fedoraproject.org/rpms/mrack", "31405": "https://src.fedoraproject.org/rpms/blivet-gui", "31406": "https://src.fedoraproject.org/rpms/koji-osbuild", "31409": "https://src.fedoraproject.org/rpms/python-unidiff", "31412": "https://src.fedoraproject.org/rpms/perl-Date-Manip", "31413": "https://src.fedoraproject.org/rpms/libbytesize", "31414": "https://src.fedoraproject.org/rpms/python-requre", "31416": "https://src.fedoraproject.org/rpms/openscap-report", "31417": "https://src.fedoraproject.org/rpms/retrace-server", "31420": "https://src.fedoraproject.org/rpms/python-simpleline", "31421": "https://src.fedoraproject.org/rpms/python-dbusmock", "31423": "https://src.fedoraproject.org/rpms/jss", "31424": "https://src.fedoraproject.org/rpms/ldapjdk", "31425": "https://src.fedoraproject.org/rpms/tomcatjss", "31432": "https://src.fedoraproject.org/rpms/rakudo", "31497": "https://src.fedoraproject.org/rpms/sscg", "31521": "https://src.fedoraproject.org/rpms/contour-terminal", "31522": "https://src.fedoraproject.org/rpms/sen", "31524": "https://src.fedoraproject.org/rpms/man-pages", "31525": "https://src.fedoraproject.org/rpms/netavark", "31526": "https://src.fedoraproject.org/rpms/aardvark-dns", "31570": "https://src.fedoraproject.org/rpms/gnome-abrt", "31584": "https://src.fedoraproject.org/rpms/golang", "31585": "https://src.fedoraproject.org/rpms/rebase-helper", "31586": "https://src.fedoraproject.org/rpms/python-oci", "31587": "https://src.fedoraproject.org/rpms/google-guest-agent", "31590": "https://src.fedoraproject.org/rpms/oci-cli", "31592": "https://src.fedoraproject.org/rpms/golang-github-vultr-govultr-3", "31597": "https://src.fedoraproject.org/rpms/golang-github-google-dap", "31598": "https://src.fedoraproject.org/rpms/git-credential-oauth", "31602": "https://src.fedoraproject.org/rpms/cockpit-composer", "31609": "https://src.fedoraproject.org/rpms/greenboot", "31611": "https://src.fedoraproject.org/rpms/liboauth2", "31613": "https://src.fedoraproject.org/rpms/python-google-cloud-bigquery", "31618": "https://src.fedoraproject.org/rpms/umockdev", "31620": "https://src.fedoraproject.org/rpms/will-crash", "31622": "https://src.fedoraproject.org/rpms/p11-kit", "31624": "https://src.fedoraproject.org/rpms/python-google-cloud-spanner", "31628": "https://src.fedoraproject.org/rpms/python-google-cloud-container", "31629": "https://src.fedoraproject.org/rpms/google-compute-engine-guest-configs", "31632": "https://src.fedoraproject.org/rpms/python-google-cloud-kms", "31633": "https://src.fedoraproject.org/rpms/python-google-cloud-firestore", "31634": "https://src.fedoraproject.org/rpms/python-awsiotsdk", "31693": "https://src.fedoraproject.org/rpms/python-google-cloud-billing", "31694": "https://src.fedoraproject.org/rpms/python-google-cloud-functions", "31695": "https://src.fedoraproject.org/rpms/python-google-cloud-deploy", "31696": "https://src.fedoraproject.org/rpms/python-google-cloud-dataproc", "31698": "https://src.fedoraproject.org/rpms/git-credential-azure", "31715": "https://src.fedoraproject.org/rpms/python-google-cloud-bigtable", "31717": "https://src.fedoraproject.org/rpms/snakemake", "31789": "https://src.fedoraproject.org/rpms/python-setuptools-git-versioning", "31792": "https://src.fedoraproject.org/rpms/python-datalad", "31793": "https://src.fedoraproject.org/rpms/buildah", "31794": "https://src.fedoraproject.org/rpms/skopeo", "31795": "https://src.fedoraproject.org/rpms/python-pymatreader", "31798": "https://src.fedoraproject.org/rpms/python-yfinance", "31799": "https://src.fedoraproject.org/rpms/python-looseversion", "31800": "https://src.fedoraproject.org/rpms/python-formulaic", "31801": "https://src.fedoraproject.org/rpms/python-pandas-flavor", "31802": "https://src.fedoraproject.org/rpms/python-dunamai", "31804": "https://src.fedoraproject.org/rpms/python-matrix-nio", "31805": "https://src.fedoraproject.org/rpms/ocserv", "31814": "https://src.fedoraproject.org/rpms/python-pydicom", "31819": "https://src.fedoraproject.org/rpms/crun", "31820": "https://src.fedoraproject.org/rpms/golang-github-hetznercloud-hcloud", "31821": "https://src.fedoraproject.org/rpms/hcloud", "31826": "https://src.fedoraproject.org/rpms/python-flask-oidc", "31830": "https://src.fedoraproject.org/rpms/vultr-cli", "31838": "https://src.fedoraproject.org/rpms/python-mne", "31839": "https://src.fedoraproject.org/rpms/python-mne-bids", "31840": "https://src.fedoraproject.org/rpms/python-urwid", "31841": "https://src.fedoraproject.org/rpms/python-pybids", "31847": "https://src.fedoraproject.org/rpms/python-geopy", "31848": "https://src.fedoraproject.org/rpms/python-linuxdoc", "31870": "https://src.fedoraproject.org/rpms/python-poetry-dynamic-versioning", "31872": "https://src.fedoraproject.org/rpms/python-google-cloud-billing-budgets", "31922": "https://src.fedoraproject.org/rpms/distribution-gpg-keys", "31952": "https://src.fedoraproject.org/rpms/fedora-license-data", "31953": "https://src.fedoraproject.org/rpms/libmks", "31956": "https://src.fedoraproject.org/rpms/mysql-selinux", "31958": "https://src.fedoraproject.org/rpms/google-osconfig-agent", "31960": "https://src.fedoraproject.org/rpms/timew", "32022": "https://src.fedoraproject.org/rpms/python-google-cloud-data-fusion", "32023": "https://src.fedoraproject.org/rpms/python-google-cloud-storage", "32024": "https://src.fedoraproject.org/rpms/python-google-cloud-iam", "32026": "https://src.fedoraproject.org/rpms/morphio", "32038": "https://src.fedoraproject.org/rpms/python-twilio", "32040": "https://src.fedoraproject.org/rpms/gvisor-tap-vsock", "32041": "https://src.fedoraproject.org/rpms/python-podman", "32044": "https://src.fedoraproject.org/rpms/rpmdeplint", "32046": "https://src.fedoraproject.org/rpms/datagrepper", "32047": "https://src.fedoraproject.org/rpms/autorestic", "32050": "https://src.fedoraproject.org/rpms/python-google-cloud-os-config", "32052": "https://src.fedoraproject.org/rpms/python-google-cloud-dataproc-metastore", "32053": "https://src.fedoraproject.org/rpms/python-google-cloud-bigquery-reservation", "32054": "https://src.fedoraproject.org/rpms/python-google-cloud-bigquery-datatransfer", "32055": "https://src.fedoraproject.org/rpms/python-google-cloud-bigquery-connection", "32056": "https://src.fedoraproject.org/rpms/python-google-cloud-api-gateway", "32058": "https://src.fedoraproject.org/rpms/python-ibm-cloud-sdk-core", "32063": "https://src.fedoraproject.org/rpms/python-msal", "32066": "https://src.fedoraproject.org/rpms/labwc", "32067": "https://src.fedoraproject.org/rpms/vokoscreenNG", "32076": "https://src.fedoraproject.org/rpms/python-ibm-vpc", "32077": "https://src.fedoraproject.org/rpms/xaos", "32078": "https://src.fedoraproject.org/rpms/icewm", "32079": "https://src.fedoraproject.org/rpms/python-neurom", "32086": "https://src.fedoraproject.org/rpms/speedtest", "32087": "https://src.fedoraproject.org/rpms/qownnotes", "32100": "https://src.fedoraproject.org/rpms/python-lsp-server", "32104": "https://src.fedoraproject.org/rpms/nwg-panel", "32107": "https://src.fedoraproject.org/rpms/python-googleapis-common-protos", "32110": "https://src.fedoraproject.org/rpms/cpu-x", "32111": "https://src.fedoraproject.org/rpms/komikku", "32114": "https://src.fedoraproject.org/rpms/python-bids-validator", "32116": "https://src.fedoraproject.org/rpms/corectrl", "32120": "https://src.fedoraproject.org/rpms/profile-sync-daemon", "32132": "https://src.fedoraproject.org/rpms/libunarr", "32135": "https://src.fedoraproject.org/rpms/python-google-cloud-build", "32136": "https://src.fedoraproject.org/rpms/python-google-cloud-automl", "32138": "https://src.fedoraproject.org/rpms/python-google-cloud-asset", "32182": "https://src.fedoraproject.org/rpms/python-qcengine", "32184": "https://src.fedoraproject.org/rpms/console-setup", "32185": "https://src.fedoraproject.org/rpms/blosc2", "32186": "https://src.fedoraproject.org/rpms/rpm-head-signing", "32189": "https://src.fedoraproject.org/rpms/imapfilter", "32190": "https://src.fedoraproject.org/rpms/nghttp2", "32199": "https://src.fedoraproject.org/rpms/python-google-cloud-dlp", "32200": "https://src.fedoraproject.org/rpms/python-APScheduler", "32203": "https://src.fedoraproject.org/rpms/gedit-control-your-tabs", "32205": "https://src.fedoraproject.org/rpms/python-adjustText", "32206": "https://src.fedoraproject.org/rpms/python-license-expression", "32208": "https://src.fedoraproject.org/rpms/python-libNeuroML", "32219": "https://src.fedoraproject.org/rpms/polybar", "32220": "https://src.fedoraproject.org/rpms/jackson-annotations", "32221": "https://src.fedoraproject.org/rpms/jackson-core", "32222": "https://src.fedoraproject.org/rpms/jackson-jaxrs-providers", "32223": "https://src.fedoraproject.org/rpms/jackson-modules-base", "32224": "https://src.fedoraproject.org/rpms/jackson-bom", "32230": "https://src.fedoraproject.org/rpms/micropipenv", "32234": "https://src.fedoraproject.org/rpms/video-downloader", "32237": "https://src.fedoraproject.org/rpms/efs-utils", "32239": "https://src.fedoraproject.org/rpms/python-imapclient", "32247": "https://src.fedoraproject.org/rpms/python-grpc-google-iam-v1", "32267": "https://src.fedoraproject.org/rpms/delve", "32272": "https://src.fedoraproject.org/rpms/foliate", "32314": "https://src.fedoraproject.org/rpms/groonga", "32326": "https://src.fedoraproject.org/rpms/anaconda-webui", "32364": "https://src.fedoraproject.org/rpms/python-google-cloud-bigquery-storage", "32365": "https://src.fedoraproject.org/rpms/python-google-cloud-org-policy", "32367": "https://src.fedoraproject.org/rpms/legendary", "32378": "https://src.fedoraproject.org/rpms/python-damo", "32382": "https://src.fedoraproject.org/rpms/python-google-cloud-source-context", "32383": "https://src.fedoraproject.org/rpms/python-google-cloud-redis", "32384": "https://src.fedoraproject.org/rpms/python-google-cloud-dms", "32385": "https://src.fedoraproject.org/rpms/python-google-cloud-private-ca", "32387": "https://src.fedoraproject.org/rpms/nispor", "32389": "https://src.fedoraproject.org/rpms/boxed-cpp", "32391": "https://src.fedoraproject.org/rpms/qt5-qtpbfimageformat", "32394": "https://src.fedoraproject.org/rpms/croaring", "32395": "https://src.fedoraproject.org/rpms/ddnet", "32396": "https://src.fedoraproject.org/rpms/libphonenumber", "32397": "https://src.fedoraproject.org/rpms/python-trimesh", "32400": "https://src.fedoraproject.org/rpms/rust-coreos-installer", "32405": "https://src.fedoraproject.org/rpms/moarvm", "32406": "https://src.fedoraproject.org/rpms/nqp", "32419": "https://src.fedoraproject.org/rpms/python-snakemake-interface-common", "32425": "https://src.fedoraproject.org/rpms/python-pyspellchecker", "32428": "https://src.fedoraproject.org/rpms/python-textdistance", "32435": "https://src.fedoraproject.org/rpms/protontricks", "32439": "https://src.fedoraproject.org/rpms/python-engineio", "32440": "https://src.fedoraproject.org/rpms/pipx", "32441": "https://src.fedoraproject.org/rpms/texworks", "32446": "https://src.fedoraproject.org/rpms/zydis", "32449": "https://src.fedoraproject.org/rpms/python-fsleyes", "32451": "https://src.fedoraproject.org/rpms/python-nihtest", "32452": "https://src.fedoraproject.org/rpms/brewtarget", "32454": "https://src.fedoraproject.org/rpms/python-fslpy", "32545": "https://src.fedoraproject.org/rpms/gtk-layer-shell", "32546": "https://src.fedoraproject.org/rpms/python-h5io", "32548": "https://src.fedoraproject.org/rpms/python-gsd", "32842": "https://src.fedoraproject.org/rpms/golang-x-term", "32844": "https://src.fedoraproject.org/rpms/python-distro", "32846": "https://src.fedoraproject.org/rpms/minder", "32860": "https://src.fedoraproject.org/rpms/python-esbonio", "32865": "https://src.fedoraproject.org/rpms/golang-github-opencontainers-runc", "32869": "https://src.fedoraproject.org/rpms/paho-cpp", "32876": "https://src.fedoraproject.org/rpms/python-pyroaring", "32893": "https://src.fedoraproject.org/rpms/minigalaxy", "32895": "https://src.fedoraproject.org/rpms/picom", "32986": "https://src.fedoraproject.org/rpms/gwe", "32987": "https://src.fedoraproject.org/rpms/s-tui" }, "almost_onboarded": { "31104": "https://src.fedoraproject.org/rpms/python-scikit-build", "31371": "https://src.fedoraproject.org/rpms/libxcrypt", "31408": "https://src.fedoraproject.org/rpms/python-docker", "31508": "https://src.fedoraproject.org/rpms/mfem", "31574": "https://src.fedoraproject.org/rpms/golang-github-docker-distribution", "31691": "https://src.fedoraproject.org/rpms/python-dockerfile-parse", "31700": "https://src.fedoraproject.org/rpms/python-fabric", "31803": "https://src.fedoraproject.org/rpms/python-pyspike", "31822": "https://src.fedoraproject.org/rpms/jowl", "31871": "https://src.fedoraproject.org/rpms/spglib", "31951": "https://src.fedoraproject.org/rpms/pyodbc", "31954": "https://src.fedoraproject.org/rpms/alot", "31957": "https://src.fedoraproject.org/rpms/unixODBC", "32057": "https://src.fedoraproject.org/rpms/python-google-cloud-access-approval", "32098": "https://src.fedoraproject.org/rpms/adw-gtk3-theme", "32112": "https://src.fedoraproject.org/rpms/golang-x-oauth2", "32113": "https://src.fedoraproject.org/rpms/python-nilearn", "32126": "https://src.fedoraproject.org/rpms/license-validate", "32183": "https://src.fedoraproject.org/rpms/python-jupyter-server", "32232": "https://src.fedoraproject.org/rpms/python-fastavro", "32252": "https://src.fedoraproject.org/rpms/python-apypie", "32422": "https://src.fedoraproject.org/rpms/python-fastapi", "32849": "https://src.fedoraproject.org/rpms/pcs", "32854": "https://src.fedoraproject.org/rpms/distrobox", "32866": "https://src.fedoraproject.org/rpms/golang-x-arch", "32880": "https://src.fedoraproject.org/rpms/python-jaraco-envs", "32881": "https://src.fedoraproject.org/rpms/ini2toml", "32906": "https://src.fedoraproject.org/rpms/python-marshmallow", "32970": "https://src.fedoraproject.org/rpms/rubygem-cucumber-gherkin", "32983": "https://src.fedoraproject.org/rpms/rubygem-cucumber-cucumber-expressions", "32984": "https://src.fedoraproject.org/rpms/rubygem-cucumber-messages", "32985": "https://src.fedoraproject.org/rpms/python-fastjsonschema" } } Fixes #2304 Reviewed-by: Laura Barcziová Reviewed-by: Maja Massarini Reviewed-by: František Lachman <[email protected]>
2 parents 2d6a08f + 48e8208 commit 77896a1

19 files changed

+780
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
"""Add onboarded check in GitProjectModel table
2+
3+
Revision ID: 31111f804dec
4+
Revises: a3a17014c282
5+
Create Date: 2024-02-02 09:18:57.399510
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
11+
12+
# revision identifiers, used by Alembic.
13+
revision = "31111f804dec"
14+
down_revision = "a3a17014c282"
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
op.add_column(
22+
"git_projects", sa.Column("onboarded_downstream", sa.Boolean(), nullable=True)
23+
)
24+
# ### end Alembic commands ###
25+
26+
27+
def downgrade():
28+
# ### commands auto generated by Alembic - please adjust! ###
29+
op.drop_column("git_projects", "onboarded_downstream")
30+
# ### end Alembic commands ###
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
"""Add sync_release_pull_request table
2+
3+
Revision ID: 7d2b9fb924fa
4+
Revises: 31111f804dec
5+
Create Date: 2024-02-07 09:53:51.363885
6+
7+
"""
8+
import sqlalchemy as sa
9+
10+
from alembic import op
11+
from typing import TYPE_CHECKING
12+
13+
from sqlalchemy import (
14+
Column,
15+
ForeignKey,
16+
Integer,
17+
String,
18+
)
19+
from sqlalchemy.ext.declarative import declarative_base
20+
from sqlalchemy.orm import relationship
21+
22+
if TYPE_CHECKING:
23+
Base = object
24+
else:
25+
Base = declarative_base()
26+
27+
28+
# revision identifiers, used by Alembic.
29+
revision = "7d2b9fb924fa"
30+
down_revision = "31111f804dec"
31+
branch_labels = None
32+
depends_on = None
33+
34+
35+
class SyncReleaseTargetModel(Base):
36+
__tablename__ = "sync_release_run_targets"
37+
id = Column(Integer, primary_key=True)
38+
downstream_pr_url = Column(String)
39+
downstream_pr_id = Column(Integer, ForeignKey("sync_release_pull_request.id"))
40+
41+
pull_request = relationship(
42+
"SyncReleasePullRequestModel", back_populates="sync_release_targets"
43+
)
44+
45+
46+
class GitProjectModel(Base):
47+
__tablename__ = "git_projects"
48+
id = Column(Integer, primary_key=True)
49+
namespace = Column(String, index=True)
50+
repo_name = Column(String, index=True)
51+
sync_release_pull_requests = relationship(
52+
"SyncReleasePullRequestModel", back_populates="project"
53+
)
54+
project_url = Column(String)
55+
instance_url = Column(String, nullable=False)
56+
57+
@classmethod
58+
def get_or_create(
59+
cls, namespace: str, repo_name: str, project_url: str, session: sa.orm.Session
60+
) -> "GitProjectModel":
61+
project = (
62+
session.query(GitProjectModel)
63+
.filter_by(
64+
namespace=namespace, repo_name=repo_name, project_url=project_url
65+
)
66+
.first()
67+
)
68+
if not project:
69+
project = cls()
70+
project.repo_name = repo_name
71+
project.namespace = namespace
72+
project.project_url = project_url
73+
project.instance_url = "https://src.fedoraproject.org/"
74+
session.add(project)
75+
return project
76+
77+
78+
class SyncReleasePullRequestModel(Base):
79+
__tablename__ = "sync_release_pull_request"
80+
81+
id = Column(Integer, primary_key=True)
82+
pr_id = Column(Integer, index=True)
83+
project_id = Column(Integer, ForeignKey("git_projects.id"), index=True)
84+
project = relationship(
85+
"GitProjectModel", back_populates="sync_release_pull_requests"
86+
)
87+
sync_release_targets = relationship(
88+
"SyncReleaseTargetModel", back_populates="pull_request"
89+
)
90+
91+
@classmethod
92+
def get_or_create(
93+
cls,
94+
pr_id: int,
95+
namespace: str,
96+
repo_name: str,
97+
project_url: str,
98+
session: sa.orm.Session,
99+
) -> "SyncReleasePullRequestModel":
100+
project = GitProjectModel.get_or_create(
101+
namespace=namespace,
102+
repo_name=repo_name,
103+
project_url=project_url,
104+
session=session,
105+
)
106+
pr = (
107+
session.query(SyncReleasePullRequestModel)
108+
.filter_by(pr_id=pr_id, project_id=project.id)
109+
.first()
110+
)
111+
if not pr:
112+
pr = SyncReleasePullRequestModel()
113+
pr.pr_id = pr_id
114+
pr.project_id = project.id
115+
session.add(pr)
116+
return pr
117+
118+
119+
def upgrade():
120+
# ### commands auto generated by Alembic - please adjust! ###
121+
op.create_table(
122+
"sync_release_pull_request",
123+
sa.Column("id", sa.Integer(), nullable=False),
124+
sa.Column("pr_id", sa.Integer(), nullable=True),
125+
sa.Column("project_id", sa.Integer(), nullable=True),
126+
sa.ForeignKeyConstraint(
127+
["project_id"],
128+
["git_projects.id"],
129+
),
130+
sa.PrimaryKeyConstraint("id"),
131+
)
132+
op.create_index(
133+
op.f("ix_sync_release_pull_request_pr_id"),
134+
"sync_release_pull_request",
135+
["pr_id"],
136+
unique=False,
137+
)
138+
op.create_index(
139+
op.f("ix_sync_release_pull_request_project_id"),
140+
"sync_release_pull_request",
141+
["project_id"],
142+
unique=False,
143+
)
144+
op.add_column(
145+
"sync_release_run_targets",
146+
sa.Column("downstream_pr_id", sa.Integer(), nullable=True),
147+
)
148+
op.create_foreign_key(
149+
None,
150+
"sync_release_run_targets",
151+
"sync_release_pull_request",
152+
["downstream_pr_id"],
153+
["id"],
154+
)
155+
156+
# ### end Alembic commands ###
157+
bind = op.get_bind()
158+
session = sa.orm.Session(bind=bind)
159+
160+
# Create Packit downstream pull request models
161+
# and missing git projects.
162+
163+
# Split the groups back, this may not fully produce the same thing.
164+
for sync_release in session.query(SyncReleaseTargetModel):
165+
if sync_release.downstream_pr_url and not sync_release.pull_request:
166+
try:
167+
url = sync_release.downstream_pr_url
168+
# noqa[203]: prettier like it this way
169+
project_url = url[0 : (url.rfind("/pull-request/"))] # noqa[203]
170+
pr_id = int(url[(url.rfind("/pull-request/") + 14) :]) # noqa[203]
171+
namespace = "rpms"
172+
repo = url[
173+
(url.rfind("rpms/") + 5) : url.rfind("/pull-request") # noqa[203]
174+
]
175+
pull_request = SyncReleasePullRequestModel.get_or_create(
176+
pr_id, namespace, repo, project_url, session
177+
)
178+
sync_release.pull_request = pull_request
179+
session.add(pull_request)
180+
except Exception as e:
181+
print(
182+
f"Error creating SyncReleasePullRequestModel during migration {e}"
183+
)
184+
185+
186+
def downgrade():
187+
# ### commands auto generated by Alembic - please adjust! ###
188+
op.drop_constraint(None, "sync_release_run_targets", type_="foreignkey")
189+
op.drop_column("sync_release_run_targets", "downstream_pr_id")
190+
op.drop_index(
191+
op.f("ix_sync_release_pull_request_project_id"),
192+
table_name="sync_release_pull_request",
193+
)
194+
op.drop_index(
195+
op.f("ix_sync_release_pull_request_pr_id"),
196+
table_name="sync_release_pull_request",
197+
)
198+
op.drop_table("sync_release_pull_request")
199+
# ### end Alembic commands ###

alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,19 @@
55
Create Date: 2021-08-26 15:19:49.615046
66
77
"""
8+
9+
from typing import TYPE_CHECKING
10+
811
from alembic import op
912
import sqlalchemy as sa
10-
from packit_service.models import GitProjectModel
13+
from sqlalchemy import Column, Integer, String
14+
from sqlalchemy.ext.declarative import declarative_base
15+
16+
# https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^
17+
if TYPE_CHECKING:
18+
Base = object
19+
else:
20+
Base = declarative_base()
1121

1222
# revision identifiers, used by Alembic.
1323
revision = "8fee25b27402"
@@ -16,6 +26,14 @@
1626
depends_on = None
1727

1828

29+
class GitProjectModel(Base):
30+
__tablename__ = "git_projects"
31+
id = Column(Integer, primary_key=True)
32+
33+
project_url = Column(String)
34+
instance_url = Column(String, nullable=False)
35+
36+
1937
def upgrade():
2038
bind = op.get_bind()
2139
session = sa.orm.Session(bind=bind)

alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,22 @@
55
Create Date: 2020-11-05 11:33:02.769607
66
77
"""
8+
from typing import TYPE_CHECKING
9+
810
from urllib.parse import urlparse
911

1012
from alembic import op
1113
import sqlalchemy as sa
1214
from sqlalchemy import orm
1315

14-
from packit_service.models import GitProjectModel
16+
from sqlalchemy import Column, Integer, String
17+
from sqlalchemy.ext.declarative import declarative_base
18+
19+
# https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^
20+
if TYPE_CHECKING:
21+
Base = object
22+
else:
23+
Base = declarative_base()
1524

1625
# revision identifiers, used by Alembic.
1726
revision = "e35bb9ce7313"
@@ -20,6 +29,14 @@
2029
depends_on = None
2130

2231

32+
class GitProjectModel(Base):
33+
__tablename__ = "git_projects"
34+
id = Column(Integer, primary_key=True)
35+
36+
project_url = Column(String)
37+
instance_url = Column(String, nullable=False)
38+
39+
2340
def upgrade():
2441
bind = op.get_bind()
2542
session = orm.Session(bind=bind)

0 commit comments

Comments
 (0)