コード例 #1
0
    def test_software(self):
        for agent_foobar in self.models(limit=1):
            db.session.add(agent_foobar)

            # create some software version tags
            software_version_objects = []
            for software_name in ("foo", "bar", "baz"):
                software = Software()
                software.agents = [agent_foobar]
                software.software = software_name
                software_version = SoftwareVersion()
                software_version.software = software
                software_version.version = "1"
                software_version.rank = 1
                software_version_objects.append((software.software,
                                                 software_version.version))
                agent_foobar.software_versions.append(software_version)

            db.session.commit()
            agent_id = agent_foobar.id
            db.session.remove()

            agent = Agent.query.filter_by(id=agent_id).first()
            self.assertIsNotNone(agent)

            agent_software_versions = list(
                (str(i.software.software), str(i.version))
                for i in agent.software_versions)
            software_version_objects.sort()
            agent_software_versions.sort()
            self.assertListEqual(agent_software_versions,
                                 software_version_objects)
コード例 #2
0
    def test_software(self):
        for agent_foobar in self.models(limit=1):
            db.session.add(agent_foobar)

            # create some software version tags
            software_version_objects = []
            for software_name in ("foo", "bar", "baz"):
                software = Software()
                software.agents = [agent_foobar]
                software.software = software_name
                software_version = SoftwareVersion()
                software_version.software = software
                software_version.version = "1"
                software_version.rank = 1
                software_version_objects.append(
                    (software.software, software_version.version))
                agent_foobar.software_versions.append(software_version)

            db.session.commit()
            agent_id = agent_foobar.id
            db.session.remove()

            agent = Agent.query.filter_by(id=agent_id).first()
            self.assertIsNotNone(agent)

            agent_software_versions = list(
                (str(i.software.software), str(i.version))
                for i in agent.software_versions)
            software_version_objects.sort()
            agent_software_versions.sort()
            self.assertListEqual(agent_software_versions,
                                 software_version_objects)
コード例 #3
0
ファイル: software.py プロジェクト: guidow/pyfarm-master
    def post(self, software_rq):
        """
        A ``POST`` to this endpoint will create a new version for this software.

        A rank can optionally be included.  If it isn't, it is assumed that this
        is the newest version for this software

        .. http:post:: /api/v1/software/versions/ HTTP/1.1

            **Request**

            .. sourcecode:: http

                POST /api/v1/software/blender/versions/ HTTP/1.1
                Accept: application/json

                {
                    "version": "1.70"
                }

            **Response**

            .. sourcecode:: http

                HTTP/1.1 200 OK
                Content-Type: application/json

                {
                    "id": 4,
                    "version": "1.70",
                    "rank": "100"
                }

        :statuscode 201: a new software version was created
        :statuscode 400: there was something wrong with the request (such as
                            invalid columns being included)
        :statuscode 409: a software version with that name already exists
        """
        if isinstance(software_rq, STRING_TYPES):
            software = Software.query.filter_by(software=software_rq).first()
        else:
            software = Software.query.filter_by(id=software_rq).first()

        if not software:
            return jsonify(error="Requested software not found"), NOT_FOUND

        existing_version = SoftwareVersion.query.filter(
            SoftwareVersion.software == software,
            SoftwareVersion.version == g.json["version"]).first()
        if existing_version:
            return (jsonify(error="Version %s already exixts" %
                            g.json["version"]), CONFLICT)

        with db.session.no_autoflush:
            version = SoftwareVersion(**g.json)
            version.software = software

            if version.rank is None:
                max_rank, = db.session.query(
                    func.max(SoftwareVersion.rank)).filter_by(
                        software=software).one()
                version.rank = max_rank + 100 if max_rank is not None else 100
                if version.rank % 100 != 0:
                    version.rank += 100 - (version.rank % 100)

            db.session.add(version)
            try:
                db.session.commit()
            except DatabaseError as e:
                logger.error("DatabaseError error on SoftwareVersion POST: %r",
                            e.args)
                return jsonify(error="Database error"), INTERNAL_SERVER_ERROR

            version_data = {
                "id": version.id,
                "version": version.version,
                "rank": version.rank
                }
            logger.info("created software version %s for software %s: %r",
                        version.id, software.software, version_data)

            return jsonify(version_data), CREATED