Beispiel #1
0
 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')
Beispiel #2
0
    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"