EEA & Eionet documentation hub

Browse documentation for IT-systems used by the European Environment Agency and the Eionet network.

Flis Metadata Client

flis.metadata

Client for FLIS applications that require common metadata

Quick start

  1. Add flis_metadata.common and flis_metadata.client to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = ( … ‘flis_metadata.common’, ‘flis_metadata.client’, )

  2. Add METADATA_REMOTE_HOST and METADATA_REMOTE_PATH into your settings file:

    METADATA_REMOTE_HOST = ‘http://localhost:8000’ METADATA_REMOTE_PATH = ‘’

  3. Run python manage.py migrate to migrate the common app.

  4. Run python manage.py sync_remote_models to sync the metadata models with the remote ones.

How to add a new model

We want to move model Foo from flis.someapp to be replicated in all FLIS apps

In this app:

  1. Add the model in common/models.py. Make sure it extends ReplicatedModel.
  2. Add urls, views and templates to edit it.
  3. Add a fixture having all instances of Foo for every FLIS app.

Note:

This data will be replicated and migrated in every app that uses this package, so make sure that the migration includes everything
  1. Update the pip package using setup.py.

In flis.someapp and other apps using this model

  1. Update eaa.flis.metadata package in requirements.txt and install it.

  2. For every relation to the Foo model:

    # add a new fake foreign key field x = models.ForeingKey(Foo) fake_x = models.ForeingKey(‘common.Foo’)

# or add a new fake many to many field
y = models.ManyToManyField(Foo)
fake_y = models.ManyToManyField('common.Foo')
  1. Add a migration to add the new fields

  2. Create a datamigration that

1. Calls `load_metadata_fixtures` management command

2. For every `x` copies the same information in `fake_x` using the instance found in `common.Foo`:
    
            obj.fake_x = orm['common.Foo'].objects.get(title=obj.x.title)
    
    # or
    
    for y in obj.y.all():
      obj.fake_y.add(orm['common.Foo'].objects.get(title=y.title)
  1. Remove the Foo model and x fields from flis.someapp.

  2. Create an automatic schemamigration to reflect the removals.

  3. Rename fake_x fields to x in models.py.

  4. In the migration generated at step 5 rename the fields and M2M tables from fake_x to x.

  5. Run the migration in different corner cases.

Note:

You can browse through `flis.flip`, `flis.horizon-scanning-tool` or `flis.live_catalogue` to see an example of such migrations.

Edit this page