previewer: template fixes

Signed-off-by: Adrian-Tudor Panescu <adrian.tudor.panescu@cern.ch>
Reviewed-by: Jiri Kuncar <jiri.kuncar@cern.ch>
base: PDFTK path discovery

Signed-off-by: Adrian-Tudor Panescu <adrian.tudor.panescu@cern.ch>
Reviewed-by: Jiri Kuncar <jiri.kuncar@cern.ch>
jsonalchemy: JSON-LD tweaks

* Adds "inline" synonim for "full" export format to comply with
  specification.

* Fixes __meta_metadata__ cleanup at JSON-LD export time.

Signed-off-by: Adrian-Tudor Panescu <adrian.tudor.panescu@cern.ch>
Reviewed-by: Jiri Kuncar <jiri.kuncar@cern.ch>
cloudconnector: OAuthClient usage for Dropbox

* Uses OAuthClient module for DropBox filesystem factory.

Signed-off-by: Eirini Psallida <eirini.psallida@cern.ch>
Co-authored-by: Jiri Kuncar <jiri.kuncar@cern.ch>
installation: Pillow img requirement

Signed-off-by: Adrian-Tudor Panescu <adrian.tudor.panescu@cern.ch>
sqlalchemy: change JSON type to native one.

Signed-off-by: Esteban J. G. Gabancho <esteban.gabancho@gmail.com>
jsonalchemy: update `parser.py` for pyparsing 2

* Transform hardcoded decorators into extensions inside the parser
  folder. The new decorators are cataloged as `before`, `on` and `after`
  depending on when they should be evaluated.

* All the decorators that before needed always a tuple now works as
  `@decorator(*args)`.

* Remove `@inherit_from` decorator from field definitions as it is
  replaced by `@extend` and `@override`.

* New decorator extension added `@connect(field_name[, function])` to
  link to fields and propagate changes from one to the other and vice
  versa.

* Remove `include` form field definitions as now registries are used.

* Replace `checker` section by `schema` to perform simple validations,
  like type or length. For more complex check use the checker module.

Signed-off-by: Esteban J. G. Gabancho <esteban.gabancho@gmail.com>
jsonalchemy: add `jsonext` as common namespace

Signed-off-by: Esteban J. G. Gabancho <esteban.gabancho@gmail.com>
jsonalchemy: update readers and SmartJson

* Update all parsers to work with the new structutre of the field and
  model definitions, meaning using the extensions properly.

* When translating a new blob there is no need any more to go through
  the `readers` registry, instead call `Reader.translate`. See the
  method docs for more info.

* Update SmartJson to work also with new extensions and decorators
  structure.

* Update JSON for marc producer to adapt it to the new extension
  behavior.

Signed-off-by: Esteban J. G. Gabancho <esteban.gabancho@gmail.com>
records: update to new JSONAlchemy

* Add `persistent_identifier` property to the record base object.

Signed-off-by: Esteban J. G. Gabancho <esteban.gabancho@gmail.com>