Public | Automated Build

Last pushed: a year ago
Short Description
Flis Metadata
Full Description


Flis Metadata Client

Client for FLIS applications that require common metadata

Quick start

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


#. Add METADATA_REMOTE_HOST and METADATA_REMOTE_PATH into your settings file::

 METADATA_REMOTE_HOST = 'http://localhost:8000'

#. Run python migrate to migrate the common app.

#. Run python 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/``. Make sure it extends

2. Add ``urls``, ``views`` and ``templates`` to edit it.

3. Add a fixture having all instances of ``Foo`` for every FLIS app.
   This data will be replicated and migrated in every app that uses
   this package, so make sure that the migration includes everything

4. Update the pip package using ````.

In flis.someapp and other apps using this model

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

#. 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')

#. Add a migration to add the new fields

#. Create a datamigration that

   a) Calls ``load_metadata_fixtures`` management command
   b) 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():

#. Remove the ``Foo`` model and ``x`` fields from

#. Create an automatic schemamigration to reflect the removals.

#. Rename ``fake_x`` fields to ``x`` in ````.

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

#. Run the migration in different corner cases.
  You can browse through ``flis.flip``, ``flis.horizon-scanning-tool`` or
  ``flis.live_catalogue`` to see an example of such migrations.
Docker Pull Command
Source Repository