def test_map_project_no_project_for_package(self): """ Test package duplicity when package is not associated to project """ create_distro(self.session) create_project(self.session) pkg = models.Packages(distro_name="Fedora", project_id=None, package_name="geany") self.session.add(pkg) self.session.commit() distro_objs = self.session.query(models.Distro).all() project_obj = models.Project.get(self.session, 1) self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 0) self.assertEqual(distro_objs[0].name, "Fedora") utilities.map_project( self.session, project=project_obj, package_name="geany", distribution="Fedora", user_id="*****@*****.**", old_package_name=None, ) self.session.commit() project_obj = models.Project.get(self.session, 1) packages = self.session.query(models.Packages).all() self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 1) self.assertEqual(len(packages), 1) self.assertEqual(project_obj.packages[0].package_name, "geany") self.assertEqual(project_obj.packages[0].distro_name, "Fedora")
def test_map_project_no_project_for_package(self): """ Test package duplicity when package is not associated to project """ create_distro(self.session) create_project(self.session) pkg = models.Packages( distro_name="Fedora", project_id=None, package_name="geany" ) self.session.add(pkg) self.session.commit() distro_objs = self.session.query(models.Distro).all() project_obj = models.Project.get(self.session, 1) self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 0) self.assertEqual(distro_objs[0].name, "Fedora") utilities.map_project( self.session, project=project_obj, package_name="geany", distribution="Fedora", user_id="*****@*****.**", old_package_name=None, ) self.session.commit() project_obj = models.Project.get(self.session, 1) packages = self.session.query(models.Packages).all() self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 1) self.assertEqual(len(packages), 1) self.assertEqual(project_obj.packages[0].package_name, "geany") self.assertEqual(project_obj.packages[0].distro_name, "Fedora")
def edit_project_mapping(project_id, pkg_id): project = models.Project.get(Session, project_id) if not project: flask.abort(404) package = models.Packages.by_id(Session, pkg_id) if not package: flask.abort(404) # Get all available distros name distros = models.Distro.all(Session) distro_names = [] for distro in distros: distro_names.append(distro.name) form = anitya.forms.MappingForm( package_name=package.package_name, distro=package.distro_name, distros=distro_names, ) if form.validate_on_submit(): try: utilities.map_project( Session, project=project, package_name=form.package_name.data, distribution=form.distro.data, user_id=flask.g.user.username, old_package_name=package.package_name, old_distro_name=package.distro_name, ) Session.commit() flask.flash("Mapping edited") except exceptions.AnityaInvalidMappingException as err: err.link = flask.url_for("anitya_ui.project", project_id=err.project_id) flask.flash(err.message, "error") except exceptions.AnityaException as err: flask.flash(str(err), "error") return flask.redirect( flask.url_for("anitya_ui.project", project_id=project_id)) return flask.render_template("mapping.html", current="projects", project=project, package=package, form=form)
def map_project(project_id): project = models.Project.get(Session, project_id) if not project: flask.abort(404) # Get all available distros name distros = models.Distro.all(Session) distro_names = [] for distro in distros: distro_names.append(distro.name) form = anitya.forms.MappingForm(distros=distro_names) if flask.request.method == 'GET': form.package_name.data = flask.request.args.get( 'package_name', project.name) form.distro.data = flask.request.args.get('distro', '') if form.validate_on_submit(): try: utilities.map_project( Session, project=project, package_name=form.package_name.data.strip(), distribution=form.distro.data.strip(), user_id=flask.g.user.username, ) Session.commit() flask.flash('Mapping added') except exceptions.AnityaInvalidMappingException as err: err.link = flask.url_for('anitya_ui.project', project_id=err.project_id) flask.flash(err.message, 'error') except exceptions.AnityaException as err: flask.flash(str(err), 'error') return flask.redirect( flask.url_for('anitya_ui.project', project_id=project.id)) return flask.render_template( 'mapping.html', current='projects', project=project, form=form, )
def edit_project_mapping(project_id, pkg_id): project = anitya.lib.model.Project.get(SESSION, project_id) if not project: flask.abort(404) package = anitya.lib.model.Packages.by_id(SESSION, pkg_id) if not package: flask.abort(404) form = anitya.forms.MappingForm(obj=package) if form.validate_on_submit(): try: utilities.map_project( SESSION, project=project, package_name=form.package_name.data, distribution=form.distro.data, user_id=flask.g.auth.openid, old_package_name=package.package_name, old_distro_name=package.distro, ) SESSION.commit() flask.flash('Mapping edited') except anitya.lib.exceptions.AnityaInvalidMappingException as err: err.link = flask.url_for('anitya_ui.project', project_id=err.project_id) flask.flash(err.message, 'error') except anitya.lib.exceptions.AnityaException as err: flask.flash(str(err), 'error') return flask.redirect( flask.url_for('anitya_ui.project', project_id=project_id)) return flask.render_template( 'mapping.html', current='projects', project=project, package=package, form=form, )
def map_project(project_id): project = anitya.lib.model.Project.get(SESSION, project_id) if not project: flask.abort(404) form = anitya.forms.MappingForm() if flask.request.method == 'GET': form.package_name.data = flask.request.args.get( 'package_name', project.name) form.distro.data = flask.request.args.get('distro', '') if form.validate_on_submit(): try: utilities.map_project( SESSION, project=project, package_name=form.package_name.data.strip(), distribution=form.distro.data.strip(), user_id=flask.g.auth.openid, ) SESSION.commit() flask.flash('Mapping added') except anitya.lib.exceptions.AnityaInvalidMappingException as err: err.link = flask.url_for('anitya_ui.project', project_id=err.project_id) flask.flash(err.message, 'error') except anitya.lib.exceptions.AnityaException as err: flask.flash(str(err), 'error') return flask.redirect( flask.url_for('anitya_ui.project', project_id=project.id)) return flask.render_template( 'mapping.html', current='projects', project=project, form=form, )
def test_map_project(self): """ Test the map_project function of Distro. """ create_distro(self.session) create_project(self.session) project_obj = models.Project.get(self.session, 1) self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 0) # Map `geany` project to CentOS utilities.map_project( self.session, project=project_obj, package_name="geany", distribution="CentOS", user_id="*****@*****.**", old_package_name=None, ) self.session.commit() project_obj = models.Project.get(self.session, 1) self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 1) self.assertEqual(project_obj.packages[0].package_name, "geany") self.assertEqual(project_obj.packages[0].distro_name, "CentOS") # Map `geany` project to CentOS, exactly the same way utilities.map_project( self.session, project=project_obj, package_name="geany2", distribution="CentOS", user_id="*****@*****.**", old_package_name=None, ) self.session.commit() project_obj = models.Project.get(self.session, 1) self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 2) self.assertEqual(project_obj.packages[0].package_name, "geany") self.assertEqual(project_obj.packages[0].distro_name, "CentOS") self.assertEqual(project_obj.packages[1].package_name, "geany2") self.assertEqual(project_obj.packages[1].distro_name, "CentOS") # Edit the mapping of the `geany` project to Fedora utilities.map_project( self.session, project=project_obj, package_name="geany3", distribution="Fedora", user_id="*****@*****.**", old_package_name="geany", old_distro_name="CentOS", ) self.session.commit() project_obj = models.Project.get(self.session, 1) self.assertEqual(project_obj.name, "geany") self.assertEqual(len(project_obj.packages), 2) pkgs = sorted(project_obj.packages, key=lambda x: x.package_name) self.assertEqual(pkgs[0].package_name, "geany2") self.assertEqual(pkgs[0].distro_name, "CentOS") self.assertEqual(pkgs[1].package_name, "geany3") self.assertEqual(pkgs[1].distro_name, "Fedora") # Edit the mapping of the `geany` project to Fedora project_obj = models.Project.get(self.session, 2) self.assertEqual(project_obj.name, "subsurface") self.assertEqual(len(project_obj.packages), 0) self.assertRaises( exceptions.AnityaInvalidMappingException, utilities.map_project, self.session, project=project_obj, package_name="geany2", distribution="CentOS", user_id="*****@*****.**", )
def new_project(): """ View for creating a new project. This function accepts GET and POST requests. POST requests can result in a HTTP 400 for invalid forms, a HTTP 409 if the request conflicts with an existing project, or a HTTP 302 redirect to the new project. """ backend_plugins = anitya_plugins.load_plugins(Session) plg_names = [plugin.name for plugin in backend_plugins] version_plugins = anitya_plugins.load_plugins(Session, family="versions") version_plg_names = [plugin.name for plugin in version_plugins] # Get all available distros name distros = models.Distro.all(Session) distro_names = [] for distro in distros: distro_names.append(distro.name) form = anitya.forms.ProjectForm(backends=plg_names, version_schemes=version_plg_names, distros=distro_names) if flask.request.method == "GET": form.name.data = flask.request.args.get("name", "") form.homepage.data = flask.request.args.get("homepage", "") form.backend.data = flask.request.args.get("backend", "") form.version_scheme.data = flask.request.args.get("version_scheme", "") form.distro.data = flask.request.args.get("distro", "") form.package_name.data = flask.request.args.get("package_name", "") return flask.render_template( "project_new.html", context="Add", current="Add projects", form=form, plugins=backend_plugins, ) elif form.validate_on_submit(): project = None try: project = utilities.create_project( Session, name=form.name.data.strip(), homepage=form.homepage.data.strip(), backend=form.backend.data.strip(), version_scheme=form.version_scheme.data.strip(), version_url=form.version_url.data.strip() or None, version_prefix=form.version_prefix.data.strip() or None, pre_release_filter=form.pre_release_filter.data.strip() or None, version_filter=form.version_filter.data.strip() or None, regex=form.regex.data.strip() or None, user_id=flask.g.user.username, releases_only=form.releases_only.data, ) Session.commit() # Optionally, the user can also map a distro when creating a proj. if form.distro.data and form.package_name.data: utilities.map_project( Session, project=project, package_name=form.package_name.data, distribution=form.distro.data, user_id=flask.g.user.username, ) Session.commit() flask.flash("Project created") except exceptions.AnityaException as err: flask.flash(str(err)) return ( flask.render_template( "project_new.html", context="Add", current="Add projects", form=form, plugins=backend_plugins, ), 409, ) if form.check_release.data is True: try: utilities.check_project_release(project, Session) except exceptions.AnityaException: flask.flash("Check failed") return flask.redirect( flask.url_for("anitya_ui.project", project_id=project.id)) return ( flask.render_template( "project_new.html", context="Add", current="Add projects", form=form, plugins=backend_plugins, ), 400, )
def new_project(): """ View for creating a new project. This function accepts GET and POST requests. POST requests can result in a HTTP 400 for invalid forms, a HTTP 409 if the request conflicts with an existing project, or a HTTP 302 redirect to the new project. """ backend_plugins = anitya_plugins.load_plugins(Session) plg_names = [plugin.name for plugin in backend_plugins] version_plugins = anitya_plugins.load_plugins(Session, family='versions') version_plg_names = [plugin.name for plugin in version_plugins] form = anitya.forms.ProjectForm(backends=plg_names, version_schemes=version_plg_names) if flask.request.method == 'GET': form.name.data = flask.request.args.get('name', '') form.homepage.data = flask.request.args.get('homepage', '') form.backend.data = flask.request.args.get('backend', '') form.version_scheme.data = flask.request.args.get('version_scheme', '') form.distro.data = flask.request.args.get('distro', '') form.package_name.data = flask.request.args.get('package_name', '') return flask.render_template( 'project_new.html', context='Add', current='Add projects', form=form, plugins=backend_plugins, ) elif form.validate_on_submit(): project = None try: project = utilities.create_project( Session, name=form.name.data.strip(), homepage=form.homepage.data.strip(), backend=form.backend.data.strip(), version_scheme=form.version_scheme.data.strip(), version_url=form.version_url.data.strip() or None, version_prefix=form.version_prefix.data.strip() or None, regex=form.regex.data.strip() or None, user_id=flask.g.user.username, check_release=form.check_release.data, ) Session.commit() # Optionally, the user can also map a distro when creating a proj. if form.distro.data and form.package_name.data: utilities.map_project( Session, project=project, package_name=form.package_name.data, distribution=form.distro.data, user_id=flask.g.user.username, ) Session.commit() flask.flash('Project created') except exceptions.AnityaException as err: flask.flash(str(err)) return flask.render_template('project_new.html', context='Add', current='Add projects', form=form, plugins=backend_plugins), 409 return flask.redirect( flask.url_for('anitya_ui.project', project_id=project.id)) return flask.render_template('project_new.html', context='Add', current='Add projects', form=form, plugins=backend_plugins), 400