def modify_datapackage(dp, parameters, *_):
    dataset_id = parameters['dataset-id']
    loaded = parameters.get('loaded')
    private = parameters.get('private')
    owner = parameters.get('owner')
    datapackage_url = parameters.get('datapackage-url')
    if ES_ADDRESS:
        registry = PackageRegistry(ES_ADDRESS)
        datapackage = copy.deepcopy(dp)
        params = {}
        if 'babbageModel' in datapackage:
            model = datapackage['babbageModel']
            del datapackage['babbageModel']
            params['model'] = model
        if private is not None:
            datapackage['private'] = private
        if owner is not None:
            datapackage['owner'] = owner
        if datapackage_url:
            params['datapackage_url'] = datapackage_url
            params['datapackage'] = datapackage
        if loaded is not None:
            params['loaded'] = loaded
            params['loading_status'] = 'done' if loaded else 'loading-data'
        registry.update_model(dataset_id, **params)
    return dp
    def test_save_and_update(self, package_registry: PackageRegistry):
        name = 'owner:my-name'
        dp_url = 'http://dp_url'
        dp = {'name': 'moses'}
        model = {'my-model': 'is-great'}
        dataset_name = 'ds-name'
        author = 'authors-name'
        status = 'FUNKY'
        loaded = False

        def check():
            name_, dp_url_, dp_, model_, dataset_name_, author_, status_, loaded_ = \
                package_registry.get_raw(name)
            assert name_ == name
            assert dp_url_ == dp_url
            assert dp_ == dp
            assert model_ == model
            assert dataset_name_ == dataset_name
            assert author_ == author
            assert status_ == status
            assert loaded_ == loaded

        package_registry.save_model(name, dp_url, dp, model, dataset_name, author, status, loaded)
        check()

        author = 'moses'
        package_registry.update_model(name, author=author)
        check()

        status = 'BLINKY'
        package_registry.update_model(name, status=status)
        check()

        status = 'AWESOME'
        loaded = True
        package_registry.update_model(name, status=status, loaded=loaded)
        check()

        # Update existing property of model
        model = {'my-model': 'replace model'}
        dp = {'name': 'replace name'}
        package_registry.update_model(name, model=model, datapackage=dp)
        check()

        # Replace model
        model = {'completely': 'replace model'}
        dp = {'completely': 'replace dp'}
        package_registry.update_model(name, model=model, datapackage=dp)
        check()