#63 Use MBS when creating modules via UI
Merged 6 years ago by clime. Opened 6 years ago by frostyx.
copr/ frostyx/copr modularity-ui-mbs  into  master

@@ -76,6 +76,10 @@ 

          self.mmd.version = version

          self.mmd.summary = summary

  

+     @property

+     def nsv(self):

+         return "{}-{}-{}".format(self.mmd.name, self.mmd.stream, self.mmd.version)

+ 

      def add_api(self, packages):

          for package in packages:

              self.mmd.api.add_rpm(str(package))
@@ -119,6 +123,9 @@ 

      def generate(self):

          return self.mmd.dumps()

  

+     def dump(self, handle):

+         return self.mmd.dump(handle)

+ 

  

  class MBSProxy(object):

      def __init__(self, mbs_url, user_name=None):

@@ -12,6 +12,7 @@ 

  from flask import render_template, url_for, stream_with_context

  import platform

  import smtplib

+ import tempfile

  import sqlalchemy

  import modulemd

  from email.mime.text import MIMEText
@@ -33,7 +34,7 @@ 

  from coprs.logic.packages_logic import PackagesLogic

  from coprs.logic.stat_logic import CounterStatLogic

  from coprs.logic.users_logic import UsersLogic

- from coprs.logic.modules_logic import ModulesLogic, ModulemdGenerator

+ from coprs.logic.modules_logic import ModulesLogic, ModulemdGenerator, MBSProxy

  from coprs.rmodels import TimedStatEvents

  

  from coprs.logic.complex_logic import ComplexLogic
@@ -977,12 +978,17 @@ 

      generator.add_api(form.api.data)

      generator.add_profiles(enumerate(zip(form.profile_names.data, form.profile_pkgs.data)))

      generator.add_components(form.packages.data, form.filter.data, form.builds.data)

-     yml = generator.generate()

+     tmp = tempfile.mktemp()

+     generator.dump(tmp)

  

-     module = ModulesLogic.add(flask.g.user, copr, ModulesLogic.from_modulemd(yml))

-     db.session.flush()

-     actions_logic.ActionsLogic.send_build_module(flask.g.user, copr, module)

-     db.session.commit()

+     proxy = MBSProxy(mbs_url=flask.current_app.config["MBS_URL"], user_name=flask.g.user.name)

+     with open(tmp) as tmp_handle:

+         response = proxy.build_module(copr.owner_name, copr.name, generator.nsv, tmp_handle)

+     os.remove(tmp)

+ 

+     if response.failed:

+         flask.flash(response.message, "error")

+         return render_create_module(copr, form, len(form.profile_names))

      flask.flash("Modulemd yaml file successfully generated and submitted to be build", "success")

      return flask.redirect(url_for_copr_details(copr))

  

@@ -14,6 +14,7 @@ 

          assert generator.mmd.stream == "master"

          assert generator.mmd.version == 123

          assert generator.mmd.summary == "Some testmodule summary"

+         assert generator.nsv == "testmodule-master-123"

  

      def test_api(self):

          packages = {"foo", "bar", "baz"}

This PR depends on PR#62

So far web UI for creating modules just fakes the module build. This PR changes it and passes the generated yaml file into MBS.

rebased

6 years ago

Pull-Request has been merged by clime

6 years ago