Skip to content

Commit ff85878

Browse files
committed
Fixed User corruption
1 parent 5c2f9b1 commit ff85878

File tree

2 files changed

+136
-39
lines changed

2 files changed

+136
-39
lines changed

gitlab_api/gitlab_db_models.py

Lines changed: 136 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from datetime import datetime
44
from typing import List
55

6-
from sqlalchemy import String, DateTime, ForeignKey, Text, Table, Column, Date
6+
from sqlalchemy import String, DateTime, ForeignKey, Text, Table, Column
77
from sqlalchemy.orm import mapped_column
88
from sqlalchemy.orm import (
99
relationship,
@@ -1674,7 +1674,9 @@ def __ne__(self, other):
16741674
id: Mapped[int] = mapped_column(Integer, primary_key=True)
16751675
base_type: Mapped[str] = mapped_column(String, default="User")
16761676
extras: Mapped[JSON] = mapped_column(JSON, nullable=True, default={})
1677+
user: Mapped[str] = mapped_column(String, nullable=True)
16771678
username: Mapped[str] = mapped_column(String, nullable=True)
1679+
email: Mapped[str] = mapped_column(String, nullable=True)
16781680
name: Mapped[str] = mapped_column(String, nullable=True)
16791681
state: Mapped[str] = mapped_column(String, nullable=True)
16801682
locked: Mapped[bool] = mapped_column(Boolean, nullable=True)
@@ -1684,20 +1686,17 @@ def __ne__(self, other):
16841686
is_admin: Mapped[bool] = mapped_column(Boolean, nullable=True)
16851687
bio: Mapped[str] = mapped_column(String, nullable=True)
16861688
location: Mapped[str] = mapped_column(String, nullable=True)
1687-
skype: Mapped[str] = mapped_column(
1688-
String, nullable=True
1689-
) # From Pydantic, though not in docs
1689+
skype: Mapped[str] = mapped_column(String, nullable=True)
16901690
linkedin: Mapped[str] = mapped_column(String, nullable=True)
16911691
twitter: Mapped[str] = mapped_column(String, nullable=True)
16921692
discord: Mapped[str] = mapped_column(String, nullable=True)
1693-
github: Mapped[str] = mapped_column(String, nullable=True)
16941693
website_url: Mapped[str] = mapped_column(String, nullable=True)
16951694
organization: Mapped[str] = mapped_column(String, nullable=True)
16961695
job_title: Mapped[str] = mapped_column(String, nullable=True)
16971696
last_sign_in_at: Mapped[datetime] = mapped_column(DateTime, nullable=True)
16981697
confirmed_at: Mapped[datetime] = mapped_column(DateTime, nullable=True)
16991698
theme_id: Mapped[int] = mapped_column(Integer, nullable=True)
1700-
last_activity_on: Mapped[datetime] = mapped_column(Date, nullable=True)
1699+
last_activity_on: Mapped[datetime] = mapped_column(DateTime, nullable=True)
17011700
color_scheme_id: Mapped[int] = mapped_column(Integer, nullable=True)
17021701
projects_limit: Mapped[int] = mapped_column(Integer, nullable=True)
17031702
current_sign_in_at: Mapped[datetime] = mapped_column(DateTime, nullable=True)
@@ -1709,10 +1708,6 @@ def __ne__(self, other):
17091708
private_profile: Mapped[bool] = mapped_column(Boolean, nullable=True)
17101709
current_sign_in_ip: Mapped[str] = mapped_column(String, nullable=True)
17111710
last_sign_in_ip: Mapped[str] = mapped_column(String, nullable=True)
1712-
namespace_id: Mapped[int] = mapped_column(Integer, nullable=True)
1713-
created_by_id: Mapped[int] = mapped_column(
1714-
Integer, ForeignKey("users.id"), nullable=True
1715-
)
17161711
email_reset_offered_at: Mapped[datetime] = mapped_column(DateTime, nullable=True)
17171712
expires_at: Mapped[datetime] = mapped_column(DateTime, nullable=True)
17181713
access_level: Mapped[int] = mapped_column(Integer, nullable=True)
@@ -1730,52 +1725,128 @@ def __ne__(self, other):
17301725
extra_shared_runners_minutes_limit: Mapped[int] = mapped_column(
17311726
Integer, nullable=True
17321727
)
1733-
is_auditor: Mapped[bool] = mapped_column(Boolean, nullable=True)
1734-
using_license_seat: Mapped[bool] = mapped_column(Boolean, nullable=True)
1735-
provisioned_by_group_id: Mapped[int] = mapped_column(Integer, nullable=True)
1736-
is_followed: Mapped[bool] = mapped_column(Boolean, nullable=True)
1737-
plan: Mapped[str] = mapped_column(String, nullable=True)
1738-
trial: Mapped[bool] = mapped_column(Boolean, nullable=True)
1739-
sign_in_count: Mapped[int] = mapped_column(Integer, nullable=True)
1740-
scim_identities = mapped_column(ARRAY(JSON), nullable=True)
1741-
# Relationships
1742-
created_by: Mapped["UserDBModel"] = relationship(remote_side=[id])
1743-
identities: Mapped[List["IdentityDBModel"]] = relationship(back_populates="user")
1744-
group_saml_identity: Mapped["GroupSamlIdentityDBModel"] = relationship(
1745-
back_populates="user"
1728+
membership_type: Mapped[str] = mapped_column(String, nullable=True)
1729+
removable: Mapped[bool] = mapped_column(Boolean, nullable=True)
1730+
last_login_at: Mapped[datetime] = mapped_column(DateTime, nullable=True)
1731+
1732+
created_by_id: Mapped[int] = mapped_column(
1733+
Integer,
1734+
ForeignKey("users.id"),
1735+
nullable=True,
1736+
)
1737+
created_by: Mapped["UserDBModel"] = relationship(
1738+
"UserDBModel", remote_side=[id], back_populates="created_users"
1739+
)
1740+
1741+
created_users: Mapped[List["UserDBModel"]] = relationship(
1742+
"UserDBModel", back_populates="created_by"
17461743
)
1744+
group_saml_identity: Mapped[List["GroupSamlIdentityDBModel"]] = relationship(
1745+
"GroupSamlIdentityDBModel", back_populates="user"
1746+
)
1747+
1748+
namespace_id: Mapped[int] = mapped_column(
1749+
Integer,
1750+
ForeignKey(
1751+
column="namespaces.id",
1752+
name="fk_user_namespace_id",
1753+
),
1754+
nullable=True,
1755+
)
1756+
namespace: Mapped["NamespaceDBModel"] = relationship(
1757+
"NamespaceDBModel",
1758+
back_populates="user",
1759+
foreign_keys=[namespace_id],
1760+
remote_side="[NamespaceDBModel.id]", # Specify the remote side of the relationship
1761+
)
1762+
17471763
deploy_tokens: Mapped[List["DeployTokenDBModel"]] = relationship(
17481764
back_populates="user"
17491765
)
1766+
17501767
todos: Mapped[List["ToDoDBModel"]] = relationship(back_populates="author")
1751-
merge_request_approvers: Mapped[List["MergeApprovalsDBModel"]] = relationship(
1752-
back_populates="approvers"
1768+
agents = relationship("AgentsDBModel", back_populates="user")
1769+
releases: Mapped[List["ReleaseDBModel"]] = relationship(back_populates="author")
1770+
access_levels: Mapped[List["AccessLevelDBModel"]] = relationship(
1771+
back_populates="user"
1772+
)
1773+
approval_rules: Mapped[List["ApprovalRuleDBModel"]] = relationship(
1774+
"ApprovalRuleDBModel",
1775+
back_populates="eligible_approvers",
1776+
foreign_keys="[ApprovalRuleDBModel.eligible_approvers_id]",
17531777
)
1778+
# Relationships with MergeRequestDBModel
17541779
authored_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1755-
back_populates="author"
1780+
"MergeRequestDBModel",
1781+
back_populates="author",
1782+
primaryjoin="foreign(MergeRequestDBModel.author_id) == UserDBModel.id",
17561783
)
1757-
assigned_merge_requests: Mapped["MergeRequestDBModel"] = relationship(
1758-
back_populates="assignee"
1759-
) # For single assignee
1760-
assigned_merge_requests_list: Mapped[List["MergeRequestDBModel"]] = relationship(
1761-
secondary="merge_request_assignees", back_populates="assignees"
1784+
1785+
assigned_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1786+
"MergeRequestDBModel",
1787+
back_populates="assignee",
1788+
primaryjoin="foreign(MergeRequestDBModel.assignee_id) == UserDBModel.id",
17621789
)
1790+
1791+
assignee_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1792+
"MergeRequestDBModel",
1793+
secondary=merge_request_assignees, # Use the association table
1794+
back_populates="assignees",
1795+
)
1796+
17631797
reviewed_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1764-
secondary="merge_request_reviewers", back_populates="reviewers"
1798+
"MergeRequestDBModel",
1799+
back_populates="reviewer",
1800+
primaryjoin="foreign(MergeRequestDBModel.reviewer_id) == UserDBModel.id",
1801+
)
1802+
1803+
reviewers_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1804+
"MergeRequestDBModel",
1805+
secondary=merge_request_reviewers, # Use the association table
1806+
back_populates="reviewers",
17651807
)
1808+
17661809
merged_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1767-
back_populates="merged_by"
1810+
"MergeRequestDBModel",
1811+
back_populates="merged_by",
1812+
primaryjoin="foreign(MergeRequestDBModel.merged_by_id) == UserDBModel.id",
17681813
)
1814+
17691815
merge_user_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1770-
back_populates="merge_user"
1816+
"MergeRequestDBModel",
1817+
back_populates="merge_user",
1818+
primaryjoin="foreign(MergeRequestDBModel.merge_user_id) == UserDBModel.id",
1819+
)
1820+
1821+
approved_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1822+
"MergeRequestDBModel",
1823+
back_populates="approved_by",
1824+
primaryjoin="foreign(MergeRequestDBModel.approved_by_id) == UserDBModel.id",
17711825
)
1826+
17721827
closed_merge_requests: Mapped[List["MergeRequestDBModel"]] = relationship(
1773-
back_populates="closed_by"
1828+
"MergeRequestDBModel",
1829+
back_populates="closed_by",
1830+
primaryjoin="foreign(MergeRequestDBModel.closed_by_id) == UserDBModel.id",
17741831
)
1775-
owned_projects: Mapped[List["ProjectDBModel"]] = relationship(
1776-
back_populates="owner"
1832+
1833+
project_owner: Mapped[List["ProjectDBModel"]] = relationship(
1834+
"ProjectDBModel",
1835+
back_populates="owner",
1836+
primaryjoin="foreign(ProjectDBModel.owner_id) == UserDBModel.id",
1837+
)
1838+
1839+
project_creator: Mapped[List["ProjectDBModel"]] = relationship(
1840+
"ProjectDBModel",
1841+
back_populates="creator",
1842+
primaryjoin="foreign(ProjectDBModel.creator_id) == UserDBModel.id",
17771843
)
1778-
jobs: Mapped[List["JobDBModel"]] = relationship(back_populates="user")
1844+
pipeline_schedules: Mapped[list["PipelineScheduleDBModel"]] = relationship(
1845+
"PipelineScheduleDBModel",
1846+
back_populates="owner",
1847+
primaryjoin="foreign(PipelineScheduleDBModel.owner_id) == UserDBModel.id",
1848+
)
1849+
jobs = relationship("JobDBModel", back_populates="user")
17791850
pipelines: Mapped[List["PipelineDBModel"]] = relationship(back_populates="user")
17801851
comments: Mapped[List["CommentDBModel"]] = relationship(back_populates="author")
17811852
commits: Mapped[List["CommitDBModel"]] = relationship(back_populates="author")
@@ -1788,13 +1859,40 @@ def __ne__(self, other):
17881859
closed_issues: Mapped[List["IssueDBModel"]] = relationship(
17891860
back_populates="closed_by", foreign_keys="[IssueDBModel.closed_by_id]"
17901861
)
1862+
identities: Mapped[List["IdentityDBModel"]] = relationship(
1863+
back_populates="user", foreign_keys="[IdentityDBModel.user_id]"
1864+
)
1865+
merge_request_approvers: Mapped[List["MergeApprovalsDBModel"]] = relationship(
1866+
"MergeApprovalsDBModel",
1867+
primaryjoin="UserDBModel.id == foreign(MergeApprovalsDBModel.approvers_id)",
1868+
back_populates="approvers",
1869+
)
17911870
deployments: Mapped[List["LastDeploymentDBModel"]] = relationship(
17921871
back_populates="user"
17931872
)
17941873
deployables: Mapped[List["DeployableDBModel"]] = relationship(back_populates="user")
17951874
cluster_agents_created: Mapped[List["ClusterAgentDBModel"]] = relationship(
17961875
back_populates="created_by_user"
17971876
)
1877+
github: Mapped[str] = mapped_column(String, nullable=True)
1878+
1879+
namespace_id: Mapped[int] = mapped_column(Integer, nullable=True)
1880+
is_auditor: Mapped[bool] = mapped_column(Boolean, nullable=True)
1881+
using_license_seat: Mapped[bool] = mapped_column(Boolean, nullable=True)
1882+
provisioned_by_group_id: Mapped[int] = mapped_column(Integer, nullable=True)
1883+
is_followed: Mapped[bool] = mapped_column(Boolean, nullable=True)
1884+
plan: Mapped[str] = mapped_column(String, nullable=True)
1885+
trial: Mapped[bool] = mapped_column(Boolean, nullable=True)
1886+
sign_in_count: Mapped[int] = mapped_column(Integer, nullable=True)
1887+
scim_identities = mapped_column(ARRAY(JSON), nullable=True)
1888+
# Relationships
1889+
assigned_merge_requests_list: Mapped[List["MergeRequestDBModel"]] = relationship(
1890+
secondary="merge_request_assignees", back_populates="assignees"
1891+
)
1892+
1893+
owned_projects: Mapped[List["ProjectDBModel"]] = relationship(
1894+
back_populates="owner"
1895+
)
17981896

17991897

18001898
# Namespace Model

gitlab_api/gitlab_response_models.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2115,7 +2115,6 @@ def validate_groups(cls, v):
21152115
return v
21162116

21172117

2118-
21192118
class Runner(BaseModel):
21202119
class Meta:
21212120
orm_model = RunnerDBModel

0 commit comments

Comments
 (0)