.. # define a hard line break for HTML .. |br| raw:: html
.. _howto_dev: .. index:: Developer documentation (how to) ====================================================================== How To's... ====================================================================== How to add a new processing? ---------------------------- This is done by deriving from :class:`StepFactory `, or from :class:`OTBStepFactory `. You'll find many examples in the default :ref:`step factories `. The important points are to decide: - Where should the step happen in the sequence of pipelines? |br| In all cases, don't forget to add it in a pipeline registered in the sequence of pipelines. - Shall its result be considered as a public product, or an intermediary step? |br| A public product is expected to be always produced. It shall then conclude a :ref:`pipeline `. Also the pipeline shall be registered with ``product_required=True`` in that case. - What would be the name of the result files? |br| Override :func:`build_step_output_filename() ` with the answer. .. note:: Even if there is no OTB application behind the step, this method needs to forward the filename of the input as done in :func:`AnalyseBorders.build_step_output_filename() `. - Which configuration options would be needed? |br| Copy them from the constructor that will be passed the :class:`s1tiling.libs.configuration.Configure` object. - What meta information should be filled-in? |br| This should be done in :func:`complete_meta() `. |br| Meta information can be used: - immediately by other methods like :func:`parameters() `, - or by later steps in the pipeline. - If there is an OTB application behind the step -- which should be the case for most processing steps. In case the step relates to an OTB application: - What parameters shall be sent to the OTB application? |br| Return the information from :func:`parameters() `. - What are the parameters expected by the OTB application from the images that could be passed in-memory? |br| The default are ``"in"`` and ``"out"`` but could be overridden in the constructor of the new step factory through the parameters ``param_in`` and ``param_out``. See for instance :func:`s1tiling.libs.otbwrappers.OrthoRectify.__init__` implementation. - What is the OTB application? |br| Its name is expected to be passed to the constructor of the parent class, from the constructor of the new class. .. note:: Most of the time, inheriting of :class:`OTBStepFactory ` is the best choice. Still, it's possible to take over and to manually answer the following questions: - What would be the name of the temporary files while they are being produced? |br| Return the information from :func:`build_step_output_tmp_filename() `, - Where the product should be produced? |br| Return the information from :func:`output_directory() ` -- this is typically used from :func:`build_step_output_filename() `. Technically all other methods from :class:`StepFactory ` could be overridden. For instance, :func:`create_step() ` could be overridden to change the type of :ref:`Steps` instantiated. Release a new version --------------------- Here is a short list of the actions to do for each new release. 1. Update the :ref:`release notes ` 2. Make sure :file:`__meta__.py` version matches the name of the version to be released. Don't forget the `rcX` suffix if need be. Version format is expected to follow the following convention: ``M.m(.p)(rcX)`` See https://packaging.python.org/guides/distributing-packages-using-setuptools/#standards-compliance-for-interoperability Let's extract version number into a variable to simplify following steps .. code:: bash version="$(awk '/version/ {print $3}' s1tiling/__meta__.py | xargs )" echo "version: ${version}" 3. Handle all the issues associated for the related milestone. 4. Push ``develop`` branch. .. code:: git checkout develop && git push 4. Merge ``develop`` branch into ``master`` .. code:: git checkout master && git merge develop 5. Push ``master`` branch. .. code:: git checkout master && git push 6 Create a git tag matching the version number .. code:: git tag -a "${version}" # And fill in version information 7. Push the tag .. code:: git push --tags .. note:: From there on, the CI will automatically take care of registering the source distribution (only; and not the wheel!) on pypi as if we had manually ran .. code:: # Prepare the packets for pipy python3 setup.py sdist # Push to pipy python3 -m twine upload --repository pypi dist/S1Tiling-${version}* 8. Update :file:`__meta__.py` version to the next expected version. Do not use the `rcX` suffix for the moment.