mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
modify schema primary keys to be nullable+defaulted
This fixes SQLAlchemy warnings related to primary keys not having an auto_increment or nullable. We've done this by making all foreign primary keys nullable. In ApiRateLimit's case, we can set a default str to act as a null, which seems a bit more sensible. Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
e5df083d45
commit
d7481b9649
5 changed files with 42 additions and 11 deletions
|
@ -1,4 +1,5 @@
|
||||||
from sqlalchemy.orm import mapper
|
from sqlalchemy.orm import mapper
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb.db import make_relationship
|
from aurweb.db import make_relationship
|
||||||
from aurweb.models.group import Group
|
from aurweb.models.group import Group
|
||||||
|
@ -9,7 +10,18 @@ from aurweb.schema import PackageGroups
|
||||||
class PackageGroup:
|
class PackageGroup:
|
||||||
def __init__(self, Package: Package = None, Group: Group = None):
|
def __init__(self, Package: Package = None, Group: Group = None):
|
||||||
self.Package = Package
|
self.Package = Package
|
||||||
|
if not self.Package:
|
||||||
|
raise IntegrityError(
|
||||||
|
statement="Primary key PackageID cannot be null.",
|
||||||
|
orig="PackageGroups.PackageID",
|
||||||
|
params=("NULL"))
|
||||||
|
|
||||||
self.Group = Group
|
self.Group = Group
|
||||||
|
if not self.Group:
|
||||||
|
raise IntegrityError(
|
||||||
|
statement="Primary key GroupID cannot be null.",
|
||||||
|
orig="PackageGroups.GroupID",
|
||||||
|
params=("NULL"))
|
||||||
|
|
||||||
|
|
||||||
properties = {
|
properties = {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from sqlalchemy.orm import mapper
|
from sqlalchemy.orm import mapper
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb.db import make_relationship
|
from aurweb.db import make_relationship
|
||||||
from aurweb.models.package_base import PackageBase
|
from aurweb.models.package_base import PackageBase
|
||||||
|
@ -10,6 +11,12 @@ class PackageKeyword:
|
||||||
PackageBase: PackageBase = None,
|
PackageBase: PackageBase = None,
|
||||||
Keyword: str = None):
|
Keyword: str = None):
|
||||||
self.PackageBase = PackageBase
|
self.PackageBase = PackageBase
|
||||||
|
if not self.PackageBase:
|
||||||
|
raise IntegrityError(
|
||||||
|
statement="Primary key PackageBaseID cannot be null.",
|
||||||
|
orig="PackageKeywords.PackageBaseID",
|
||||||
|
params=("NULL"))
|
||||||
|
|
||||||
self.Keyword = Keyword
|
self.Keyword = Keyword
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from sqlalchemy.orm import mapper
|
from sqlalchemy.orm import mapper
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb.db import make_relationship
|
from aurweb.db import make_relationship
|
||||||
from aurweb.models.license import License
|
from aurweb.models.license import License
|
||||||
|
@ -9,7 +10,18 @@ from aurweb.schema import PackageLicenses
|
||||||
class PackageLicense:
|
class PackageLicense:
|
||||||
def __init__(self, Package: Package = None, License: License = None):
|
def __init__(self, Package: Package = None, License: License = None):
|
||||||
self.Package = Package
|
self.Package = Package
|
||||||
|
if not self.Package:
|
||||||
|
raise IntegrityError(
|
||||||
|
statement="Primary key PackageID cannot be null.",
|
||||||
|
orig="PackageLicenses.PackageID",
|
||||||
|
params=("NULL"))
|
||||||
|
|
||||||
self.License = License
|
self.License = License
|
||||||
|
if not self.License:
|
||||||
|
raise IntegrityError(
|
||||||
|
statement="Primary key LicenseID cannot be null.",
|
||||||
|
orig="PackageLicenses.LicenseID",
|
||||||
|
params=("NULL"))
|
||||||
|
|
||||||
|
|
||||||
properties = {
|
properties = {
|
||||||
|
@ -21,6 +33,8 @@ properties = {
|
||||||
PackageLicenses.c.LicenseID,
|
PackageLicenses.c.LicenseID,
|
||||||
"package_license",
|
"package_license",
|
||||||
uselist=False)
|
uselist=False)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mapper(PackageLicense, PackageLicenses, properties=properties,
|
mapper(PackageLicense, PackageLicenses, properties=properties,
|
||||||
|
|
|
@ -133,7 +133,7 @@ PackageBases = Table(
|
||||||
# Keywords of package bases
|
# Keywords of package bases
|
||||||
PackageKeywords = Table(
|
PackageKeywords = Table(
|
||||||
'PackageKeywords', metadata,
|
'PackageKeywords', metadata,
|
||||||
Column('PackageBaseID', ForeignKey('PackageBases.ID', ondelete='CASCADE'), primary_key=True, nullable=False),
|
Column('PackageBaseID', ForeignKey('PackageBases.ID', ondelete='CASCADE'), primary_key=True, nullable=True),
|
||||||
Column('Keyword', String(255), primary_key=True, nullable=False, server_default=text("''")),
|
Column('Keyword', String(255), primary_key=True, nullable=False, server_default=text("''")),
|
||||||
mysql_engine='InnoDB',
|
mysql_engine='InnoDB',
|
||||||
mysql_charset='utf8mb4',
|
mysql_charset='utf8mb4',
|
||||||
|
@ -170,8 +170,8 @@ Licenses = Table(
|
||||||
# Information about package-license-relations
|
# Information about package-license-relations
|
||||||
PackageLicenses = Table(
|
PackageLicenses = Table(
|
||||||
'PackageLicenses', metadata,
|
'PackageLicenses', metadata,
|
||||||
Column('PackageID', ForeignKey('Packages.ID', ondelete='CASCADE'), primary_key=True, nullable=False),
|
Column('PackageID', ForeignKey('Packages.ID', ondelete='CASCADE'), primary_key=True, nullable=True),
|
||||||
Column('LicenseID', ForeignKey('Licenses.ID', ondelete='CASCADE'), primary_key=True, nullable=False),
|
Column('LicenseID', ForeignKey('Licenses.ID', ondelete='CASCADE'), primary_key=True, nullable=True),
|
||||||
mysql_engine='InnoDB',
|
mysql_engine='InnoDB',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -190,8 +190,8 @@ Groups = Table(
|
||||||
# Information about package-group-relations
|
# Information about package-group-relations
|
||||||
PackageGroups = Table(
|
PackageGroups = Table(
|
||||||
'PackageGroups', metadata,
|
'PackageGroups', metadata,
|
||||||
Column('PackageID', ForeignKey('Packages.ID', ondelete='CASCADE'), primary_key=True, nullable=False),
|
Column('PackageID', ForeignKey('Packages.ID', ondelete='CASCADE'), primary_key=True, nullable=True),
|
||||||
Column('GroupID', ForeignKey('Groups.ID', ondelete='CASCADE'), primary_key=True, nullable=False),
|
Column('GroupID', ForeignKey('Groups.ID', ondelete='CASCADE'), primary_key=True, nullable=True),
|
||||||
mysql_engine='InnoDB',
|
mysql_engine='InnoDB',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -445,7 +445,7 @@ AcceptedTerms = Table(
|
||||||
# Rate limits for API
|
# Rate limits for API
|
||||||
ApiRateLimit = Table(
|
ApiRateLimit = Table(
|
||||||
'ApiRateLimit', metadata,
|
'ApiRateLimit', metadata,
|
||||||
Column('IP', String(45), primary_key=True),
|
Column('IP', String(45), primary_key=True, unique=True, default=str()),
|
||||||
Column('Requests', INTEGER(11), nullable=False),
|
Column('Requests', INTEGER(11), nullable=False),
|
||||||
Column('WindowStart', BIGINT(20), nullable=False),
|
Column('WindowStart', BIGINT(20), nullable=False),
|
||||||
Index('ApiRateLimitWindowStart', 'WindowStart'),
|
Index('ApiRateLimitWindowStart', 'WindowStart'),
|
||||||
|
|
|
@ -19,11 +19,9 @@ def test_api_rate_key_creation():
|
||||||
assert rate.WindowStart == 1
|
assert rate.WindowStart == 1
|
||||||
|
|
||||||
|
|
||||||
def test_api_rate_key_null_ip_raises_exception():
|
def test_api_rate_key_ip_default():
|
||||||
from aurweb.db import session
|
api_rate_limit = create(ApiRateLimit, Requests=10, WindowStart=1)
|
||||||
with pytest.raises(IntegrityError):
|
assert api_rate_limit.IP == str()
|
||||||
create(ApiRateLimit, Requests=10, WindowStart=1)
|
|
||||||
session.rollback()
|
|
||||||
|
|
||||||
|
|
||||||
def test_api_rate_key_null_requests_raises_exception():
|
def test_api_rate_key_null_requests_raises_exception():
|
||||||
|
|
Loading…
Add table
Reference in a new issue