Skip to content

Commit e2b7f29

Browse files
committed
add function for min_compatible_version
- fix alembic setup environment - add min_compatible_version and increase version length - update model to match database - add edit form for firmware view - add get_catalog filter based on min_compatible_version
1 parent 6cc2ef7 commit e2b7f29

File tree

7 files changed

+67
-10
lines changed

7 files changed

+67
-10
lines changed

migrations/alembic.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[alembic]
2-
script_location = .
2+
script_location = ./migrations
33

44
[loggers]
55
keys = root,sqlalchemy,alembic

migrations/env.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55
from flask import current_app
66
from sqlalchemy import engine_from_config, pool
77

8+
from spkrepo import create_app
9+
810
config = context.config
911
fileConfig(config.config_file_name)
1012

13+
# Set up the Flask application context
14+
app = create_app() # Create the Flask app
15+
app.app_context().push() # Push the app context
1116

1217
config.set_main_option(
1318
"sqlalchemy.url", current_app.config.get("SQLALCHEMY_DATABASE_URI")
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""Increase version length and add min_compatible_version
2+
3+
Revision ID: 426e7f8fe7c6
4+
Revises: 76d559b4e873
5+
Create Date: 2024-01-09 09:56:56.088816
6+
7+
"""
8+
revision = "426e7f8fe7c6"
9+
down_revision = "76d559b4e873"
10+
11+
import sqlalchemy as sa
12+
from alembic import op
13+
14+
15+
def upgrade():
16+
op.add_column(
17+
"firmware",
18+
sa.Column("min_compatible_version", sa.Unicode(length=10), nullable=True),
19+
)
20+
op.alter_column(
21+
"firmware",
22+
"version",
23+
existing_type=sa.VARCHAR(length=3),
24+
type_=sa.Unicode(length=10),
25+
existing_nullable=False,
26+
)
27+
28+
29+
def downgrade():
30+
op.alter_column(
31+
"firmware",
32+
"version",
33+
existing_type=sa.Unicode(length=10),
34+
type_=sa.VARCHAR(length=3),
35+
existing_nullable=False,
36+
)
37+
op.drop_column("firmware", "min_compatible_version")

migrations/versions/dc7687894ba7_increase_field_sizes.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414

1515
def upgrade():
16-
# ### commands auto generated by Alembic - please adjust! ###
1716
op.alter_column(
1817
"version",
1918
"conf_dependencies",
@@ -42,11 +41,9 @@ def upgrade():
4241
type_=sa.UnicodeText(),
4342
existing_nullable=True,
4443
)
45-
# ### end Alembic commands ###
4644

4745

4846
def downgrade():
49-
# ### commands auto generated by Alembic - please adjust! ###
5047
op.alter_column(
5148
"version",
5249
"conf_resource",
@@ -75,4 +72,3 @@ def downgrade():
7572
type_=sa.VARCHAR(length=255),
7673
existing_nullable=True,
7774
)
78-
# ### end Alembic commands ###

spkrepo/models.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,9 @@ class Firmware(db.Model):
134134

135135
# Columns
136136
id = db.Column(db.Integer, primary_key=True)
137-
version = db.Column(db.Unicode(3), nullable=False)
137+
version = db.Column(db.Unicode(10), nullable=False)
138138
build = db.Column(db.Integer, unique=True, nullable=False)
139+
min_compatible_version = db.Column(db.Unicode(10))
139140

140141
@classmethod
141142
def find(cls, build):
@@ -329,7 +330,7 @@ class Build(db.Model):
329330
publisher_user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
330331
checksum = db.Column(db.Unicode(32))
331332
extract_size = db.Column(db.Integer)
332-
path = db.Column(db.Unicode(100))
333+
path = db.Column(db.Unicode(2048))
333334
md5 = db.Column(db.Unicode(32))
334335
insert_date = db.Column(db.DateTime, default=db.func.now(), nullable=False)
335336
active = db.Column(db.Boolean(), default=False, nullable=False)

spkrepo/views/admin.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,13 @@ def __init__(self, **kwargs):
118118
def is_accessible(self):
119119
return current_user.is_authenticated and current_user.has_role("package_admin")
120120

121-
can_edit = False
122-
123121
can_delete = False
124122

123+
# Form
124+
def on_form_prefill(self, form, id):
125+
form.version.render_kw = {"readonly": True}
126+
form.build.render_kw = {"readonly": True}
127+
125128

126129
class ServiceView(ModelView):
127130
"""View for :class:`~spkrepo.models.Service`"""

spkrepo/views/nas.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,34 @@ def is_valid_language(language):
4444

4545
@cache.memoize(timeout=600)
4646
def get_catalog(arch, build, language, beta):
47-
# latest version per package
47+
# Get min_compatible_version from the database based on the provided build
48+
min_compatible_version = (
49+
Firmware.query.filter(Firmware.build == build)
50+
.with_entities(Firmware.min_compatible_version)
51+
.first()
52+
)
53+
54+
# latest version per package with min_compatible_version
4855
latest_version = db.session.query(
4956
Version.package_id, db.func.max(Version.version).label("latest_version")
5057
).select_from(Version)
58+
5159
if not beta:
5260
latest_version = latest_version.filter(Version.report_url.is_(None))
61+
62+
# Apply the filter conditionally based on min_compatible_version
5363
latest_version = (
5464
latest_version.join(Build)
5565
.filter(Build.active)
5666
.join(Build.architectures)
5767
.filter(Architecture.code.in_(["noarch", arch]))
5868
.join(Build.firmware)
5969
.filter(Firmware.build <= build)
70+
.filter(
71+
Firmware.version >= min_compatible_version[0]
72+
if min_compatible_version and min_compatible_version[0] is not None
73+
else True # Include all versions if min_compatible_version is None
74+
)
6075
.group_by(Version.package_id)
6176
).subquery()
6277

0 commit comments

Comments
 (0)