def test_should_update_data_package_if_preexists(self): with self.app.test_request_context(): pub = Publisher.query.filter_by(name=self.publisher_one).one() pub.packages.append( MetaDataDB(name=self.package_two, version='tag_one', readme='old_readme')) db.session.add(pub) db.session.commit() latest_data = MetaDataDB.query.join(Publisher). \ filter(Publisher.name == self.publisher_one, MetaDataDB.name == self.package_two, MetaDataDB.version == 'latest').one() tagged_data = MetaDataDB.query.join(Publisher). \ filter(Publisher.name == self.publisher_one, MetaDataDB.name == self.package_two, MetaDataDB.version == 'tag_one').one() self.assertNotEqual(latest_data.readme, tagged_data.readme) MetaDataDB.create_or_update_version(self.publisher_one, self.package_two, 'tag_one') tagged_data = MetaDataDB.query.join(Publisher). \ filter(Publisher.name == self.publisher_one, MetaDataDB.name == self.package_two, MetaDataDB.version == 'tag_one').one() self.assertEqual(latest_data.readme, tagged_data.readme)
def test_should_populate_new_versioned_data_package(self): MetaDataDB.create_or_update_version(self.publisher_one, self.package_two, 'tag_one') latest_data = MetaDataDB.query.join(Publisher). \ filter(Publisher.name == self.publisher_one, MetaDataDB.name == self.package_two, MetaDataDB.version == 'latest').one() tagged_data = MetaDataDB.query.join(Publisher). \ filter(Publisher.name == self.publisher_one, MetaDataDB.name == self.package_two, MetaDataDB.version == 'tag_one').one() self.assertEqual(latest_data.name, tagged_data.name) self.assertEqual('tag_one', tagged_data.version)
def tag_data_package(publisher, package): """ DPR metadata put operation. This API is responsible for tagging data package --- tags: - package parameters: - in: path name: publisher type: string required: true description: publisher name - in: path name: package type: string required: true description: package name - in: body name: version type: string required: true description: version value responses: 400: description: JWT is invalid or req body is not valid 401: description: Invalid Header for JWT 403: description: User not allowed for operation 404: description: User not found 500: description: Internal Server Error 200: description: Success Message schema: id: put_package_success properties: status: type: string description: Status of the operation default: OK """ try: data = request.get_json() if 'version' not in data: return handle_error('ATTRIBUTE_MISSING', 'version not found', 400) bitstore = BitStore(publisher, package) status_db = MetaDataDB.create_or_update_version(publisher, package, data['version']) status_bitstore = bitstore.copy_to_new_version(data['version']) if status_db is False or status_bitstore is False: raise Exception("failed to tag data package") return jsonify({"status": "OK"}), 200 except Exception as e: app.logger.error(e) return handle_error('GENERIC_ERROR', e.message, 500)