From 32bb20f0132ba186517a0bbe4250ce8a34d211e5 Mon Sep 17 00:00:00 2001 From: Adam Samalik Date: Jun 09 2014 14:59:14 +0000 Subject: [frontend] repofiles without specifying architecture --- diff --git a/frontend/coprs_frontend/coprs/logic/coprs_logic.py b/frontend/coprs_frontend/coprs/logic/coprs_logic.py index 1bc8be4..54efefe 100644 --- a/frontend/coprs_frontend/coprs/logic/coprs_logic.py +++ b/frontend/coprs_frontend/coprs/logic/coprs_logic.py @@ -365,21 +365,29 @@ class CoprChrootsLogic(object): class MockChrootsLogic(object): @classmethod - def get(cls, user, os_release, os_version, arch, active_only=False): + def get(cls, user, os_release, os_version, arch, active_only=False, noarch=False): + if noarch and not arch: + return (models.MockChroot.query + .filter(models.MockChroot.os_release == os_release, + models.MockChroot.os_version == os_version)) + return (models.MockChroot.query .filter(models.MockChroot.os_release == os_release, models.MockChroot.os_version == os_version, models.MockChroot.arch == arch)) @classmethod - def get_from_name(cls, chroot_name, active_only=False): + def get_from_name(cls, chroot_name, active_only=False, noarch=False): """ + chroot_name should be os-version-architecture, e.g. fedora-rawhide-x86_64 + the architecture could be optional with noarch=True + Return MockChroot object for textual representation of chroot """ - name_tuple = cls.tuple_from_name(None, chroot_name) - return cls.get(None, name_tuple[0], name_tuple[1], - name_tuple[2], active_only=active_only) + name_tuple = cls.tuple_from_name(None, chroot_name, noarch=noarch) + return cls.get(None, name_tuple[0], name_tuple[1], name_tuple[2], + active_only=active_only, noarch=noarch) @classmethod def get_multiple(cls, user, active_only=False): @@ -435,21 +443,21 @@ class MockChrootsLogic(object): db.session.delete(mock_chroot) @classmethod - def tuple_from_name(cls, user, name): - """ - valid name can be "fedora-rawhide-x86_64" or even "fedora-rawhide" + def tuple_from_name(cls, user, name, noarch=False): """ + input should be os-version-architecture, e.g. fedora-rawhide-x86_64 - split_name = name.rsplit('-', 1) - if len(split_name) < 2: + the architecture could be optional with noarch=True + + returns ("os", "vetsion", "arch") or ("os", "version", None) + """ + splitted_name = name.split("-") + if (not noarch and len(splitted_name) is not 3)\ + or (noarch and len(splitted_name) not in (2,3)): raise exceptions.MalformedArgumentException( - "Chroot Name doesn't contain dash," - " can't determine chroot architecure.") + "Chroot name is not valid") - if '-' in split_name[0]: - os_release, os_version = (split_name[0].rsplit('-'))[0:2] - else: - os_release, os_version = split_name[0], '' + if noarch: + splitted_name.append(None) - arch = split_name[1] - return (os_release, os_version, arch) + return tuple(splitted_name) diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py index 519aac6..5b71fff 100644 --- a/frontend/coprs_frontend/coprs/models.py +++ b/frontend/coprs_frontend/coprs/models.py @@ -320,23 +320,15 @@ class MockChroot(db.Model, helpers.Serializer): """ Textual representation of name of this chroot """ - - if self.os_version: - format_string = "{rel}-{ver}-{arch}" - else: - format_string = "{rel}-{arch}" - return format_string.format(rel=self.os_release, - ver=self.os_version, - arch=self.arch) + return "{0}-{1}-{2}".format( + self.os_release, self.os_version, self.arch) @property def os(self): - if self.os_version: - format_string = "{rel} {ver}" - else: - format_string = "{rel}" - return format_string.format(rel=self.os_release, - ver=self.os_version) + """ + Textual representation of the operating system name + """ + return "{0} {1}".format(self.os_release, self.os_version) diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html index 2eb5c88..5dd2c41 100644 --- a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html +++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html @@ -51,9 +51,9 @@ 'coprs_ns.generate_repo_file', username=copr.owner.name, coprname=copr.name, - chroot=mock_chroot.name, - repofile=copr.owner.name+'-'+copr.name+'-'+mock_chroot.name+'.repo') }}"> - {{ copr.owner.name }}-{{ copr.name }}-{{mock_chroot.name}}.repo + chroot=mock_chroot.os_release+"-"+mock_chroot.os_version, + repofile=copr.owner.name+'-'+copr.name+'-'+mock_chroot.os_release+"-"+mock_chroot.os_version+'.repo') }}"> + {{ copr.owner.name }}-{{ copr.name }}-{{mock_chroot.os_release+"-"+mock_chroot.os_version}}.repo {% else %} {% endif %} diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py index f51f7e1..3646305 100644 --- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py +++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py @@ -477,11 +477,6 @@ def generate_repo_file(username, coprname, chroot, repofile): .format(repofile)) - if "-" not in reponame: - return page_not_found( - "Bad repository name: {0}. Must be username-projectname" - .format(reponame)) - copr = None try: # query.one() is used since it fetches all builds, unlike @@ -492,12 +487,10 @@ def generate_repo_file(username, coprname, chroot, repofile): return page_not_found( "Project {0}/{1} does not exist".format(username, coprname)) - try: - mock_chroot = coprs_logic.MockChrootsLogic.get_from_name(chroot).one() - except sqlalchemy.orm.exc.NoResultFound: + mock_chroot = coprs_logic.MockChrootsLogic.get_from_name(chroot, + noarch=True).first() + if not mock_chroot: return page_not_found("Chroot {0} does not exist".format(chroot)) - except ValueError as e: - return page_not_found(str(e)) url = "" for build in copr.builds: