def test_extract_information_from_s3_url(self): metadata = BitStore(publisher="pub_test", package="test_package") s3_key = metadata.build_s3_key("datapackage.json") pub, package, version = BitStore.extract_information_from_s3_url(s3_key) self.assertEqual(pub, 'pub_test') self.assertEqual(package, 'test_package') self.assertEqual(version, 'latest')
def finalize_publish(cls, user_id, datapackage_url): ''' Gets the datapackage.json and README from S3 and imports into database. Returns status "queued" if ok, else - None ''' publisher, package, version = BitStore.extract_information_from_s3_url( datapackage_url) if Package.exists(publisher, package): status = check_is_authorized('Package::Update', publisher, package, user_id) else: status = check_is_authorized('Package::Create', publisher, package, user_id) if not status: raise InvalidUsage('Not authorized to upload data', 400) bit_store = BitStore(publisher, package) b = bit_store.get_metadata_body() body = json.loads(b) bit_store.change_acl('public-read') readme = bit_store.get_s3_object(bit_store.get_readme_object_key()) Package.create_or_update(name=package, publisher_name=publisher, descriptor=body, readme=readme) return "queued"