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)
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)
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