mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-02-11 09:05:00 +08:00
Rewrite ModuleBuild methods to get all streams and all builds using the latest version, not build id.
This commit is contained in:
@@ -246,11 +246,12 @@ class ModuleBuild(MBSBase):
|
||||
@staticmethod
|
||||
def get_last_build_in_all_streams(session, name):
|
||||
"""
|
||||
Returns list of all last ModuleBuilds in "ready" state for all
|
||||
Returns list of all latest ModuleBuilds in "ready" state for all
|
||||
streams for given module `name`.
|
||||
"""
|
||||
subq = session.query(
|
||||
func.max(ModuleBuild.id).label('id')
|
||||
ModuleBuild.id,
|
||||
func.max(ModuleBuild.version.cast(db.Integer))
|
||||
).group_by(ModuleBuild.name, ModuleBuild.stream).filter_by(
|
||||
name=name, state=BUILD_STATES["ready"]).subquery('t2')
|
||||
query = session.query(ModuleBuild).join(
|
||||
@@ -258,25 +259,20 @@ class ModuleBuild(MBSBase):
|
||||
return query.all()
|
||||
|
||||
@staticmethod
|
||||
def get_last_build_in_stream(session, name, stream):
|
||||
def get_last_builds_in_stream(session, name, stream):
|
||||
"""
|
||||
Returns the last build in "ready" state for given name:stream.
|
||||
Returns the latest builds in "ready" state for given name:stream.
|
||||
"""
|
||||
query = session.query(ModuleBuild)
|
||||
query = query.filter_by(name=name, stream=stream,
|
||||
state=BUILD_STATES["ready"])
|
||||
query = query.order_by(ModuleBuild.id.desc())
|
||||
return query.first()
|
||||
|
||||
@staticmethod
|
||||
def get_builds_in_version(session, name, stream, version):
|
||||
"""
|
||||
Returns list of all module builds in "ready" state for given
|
||||
name:stream:version - it means all the contexts of this module.
|
||||
"""
|
||||
query = session.query(ModuleBuild)
|
||||
query = query.filter_by(name=name, stream=stream, version=version,
|
||||
state=BUILD_STATES["ready"])
|
||||
subq = session.query(
|
||||
ModuleBuild.version,
|
||||
func.max(ModuleBuild.version.cast(db.Integer))
|
||||
).group_by(ModuleBuild.name, ModuleBuild.stream).filter_by(
|
||||
name=name, state=BUILD_STATES["ready"], stream=stream).subquery('t2')
|
||||
query = session.query(ModuleBuild).join(
|
||||
subq, and_(
|
||||
ModuleBuild.name == name,
|
||||
ModuleBuild.stream == stream,
|
||||
ModuleBuild.version == subq.c.version))
|
||||
return query.all()
|
||||
|
||||
def mmd(self):
|
||||
|
||||
@@ -1428,7 +1428,7 @@ def _get_mmds_from_requires(session, requires, mmds, recursive=False):
|
||||
# b) there is at least one stream without '-' prefix. In this case, we can
|
||||
# ignore all the streams with '-' prefix and just add those without
|
||||
# '-' prefix to the list of valid streams.
|
||||
streams_is_blacklist = all([stream[0] == "-" for stream in streams.get()])
|
||||
streams_is_blacklist = all(stream.startswith("-") for stream in streams.get())
|
||||
if streams_is_blacklist or len(streams.get()) == 0:
|
||||
builds = models.ModuleBuild.get_last_build_in_all_streams(
|
||||
session, name)
|
||||
@@ -1451,10 +1451,8 @@ def _get_mmds_from_requires(session, requires, mmds, recursive=False):
|
||||
if ns in mmds:
|
||||
continue
|
||||
|
||||
last_build_in_stream = models.ModuleBuild.get_last_build_in_stream(
|
||||
builds = models.ModuleBuild.get_last_builds_in_stream(
|
||||
session, name, stream)
|
||||
builds = models.ModuleBuild.get_builds_in_version(
|
||||
session, name, stream, last_build_in_stream.version)
|
||||
mmds[ns] = [build.mmd() for build in builds]
|
||||
added_mmds[ns] = mmds[ns]
|
||||
|
||||
|
||||
@@ -77,10 +77,9 @@ class TestModels:
|
||||
assert build.context == 'e7a3d35e'
|
||||
|
||||
class TestModelsGetStreamsContexts:
|
||||
def setup_method(self, test_method):
|
||||
init_data_contexts(contexts=True)
|
||||
|
||||
def test_get_last_build_in_all_streams(self):
|
||||
init_data_contexts(contexts=True)
|
||||
with make_session(conf) as session:
|
||||
builds = ModuleBuild.get_last_build_in_all_streams(
|
||||
session, "nginx")
|
||||
@@ -88,17 +87,20 @@ class TestModelsGetStreamsContexts:
|
||||
for build in builds]
|
||||
assert builds == ["nginx:%d:%d" % (i, i + 2) for i in range(10)]
|
||||
|
||||
def test_get_last_build_in_stream(self):
|
||||
def test_get_last_build_in_all_stream_last_version(self):
|
||||
init_data_contexts(contexts=False)
|
||||
with make_session(conf) as session:
|
||||
build = ModuleBuild.get_last_build_in_stream(
|
||||
session, "nginx", "1")
|
||||
build = "%s:%s:%s" % (build.name, build.stream, str(build.version))
|
||||
assert build == 'nginx:1:3'
|
||||
builds = ModuleBuild.get_last_build_in_all_streams(
|
||||
session, "nginx")
|
||||
builds = ["%s:%s:%s" % (build.name, build.stream, str(build.version))
|
||||
for build in builds]
|
||||
assert builds == ["nginx:1:11"]
|
||||
|
||||
def test_get_builds_in_version(self):
|
||||
def test_get_last_builds_in_stream(self):
|
||||
init_data_contexts(contexts=True)
|
||||
with make_session(conf) as session:
|
||||
builds = ModuleBuild.get_builds_in_version(
|
||||
session, "nginx", "1", "3")
|
||||
builds = ModuleBuild.get_last_builds_in_stream(
|
||||
session, "nginx", "1")
|
||||
builds = ["%s:%s:%s:%s" % (build.name, build.stream, str(build.version),
|
||||
build.context) for build in builds]
|
||||
assert builds == ['nginx:1:3:d5a6c0fa', 'nginx:1:3:795e97c1']
|
||||
|
||||
@@ -18,16 +18,19 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
import hashlib
|
||||
|
||||
import gi
|
||||
gi.require_version('Modulemd', '1.0') # noqa
|
||||
from gi.repository import Modulemd
|
||||
from mock import patch
|
||||
import pytest
|
||||
|
||||
import module_build_service.utils
|
||||
from module_build_service import models, conf
|
||||
from tests import (db, clean_database)
|
||||
from datetime import datetime
|
||||
import hashlib
|
||||
from mock import patch
|
||||
import pytest
|
||||
|
||||
|
||||
class TestUtilsModuleStreamExpansion:
|
||||
|
||||
Reference in New Issue
Block a user