Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add end-to-end extension example for extending LabMetaData #59

Merged
merged 19 commits into from
Oct 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
'sphinx.ext.extlinks',
'sphinx_design',
'sphinx_rtd_theme',
'sphinx_tabs.tabs',
]

intersphinx_disabled_domains = ['std']
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _extension-create:

Creating an extension
=====================

Expand Down
2 changes: 2 additions & 0 deletions docs/source/extensions_tutorial/3_spec_api.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _extension-spec-api:

The Spec API
------------

Expand Down
14 changes: 10 additions & 4 deletions docs/source/extensions_tutorial/4_auto_api.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
.. _extension-auto-api:

Generating an API for an extension
-----------------------------------------------------
------------------------------------

.. _extension-auto-matlabnapi:

Generating a MatNWB API
~~~~~~~~~~~~~~~~~~~~~~~
Expand All @@ -13,6 +17,8 @@ In MatNWB, simply call ``generateExtension("path/to/extension/namespace.yaml");`
.. note::
As seen above, MatNWB will convert namespace names if they are not valid identifiers in MATLAB. See `Variable Names <https://www.mathworks.com/help/matlab/matlab_prog/variable-names.html>`_ for more information. In most cases, the conversion conforms with MATLAB's approach with `matlab.lang.makeValidName() <https://www.mathworks.com/help/matlab/ref/matlab.lang.makevalidname.html>`_

.. _extension-auto-pythonapi:

Generating a PyNWB API
~~~~~~~~~~~~~~~~~~~~~~

Expand All @@ -36,7 +42,7 @@ created when you use the ``load_namespaces`` flag on :py:func:`~pynwb.NWBHDF5IO.
Customizing automatically generated APIs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Once these classes are generated, you can customize them by dynamically adding or replacing attributes/methods (a.k.a., monkey patching).
Once these classes are generated, you can customize them by dynamically adding or replacing attributes/methods (a.k.a., monkey patching).

A typical example is adding methods. Let's say you wanted a method that could
return data from only the first channel. You could add that method like this:
Expand Down Expand Up @@ -72,7 +78,7 @@ next section.
.. tip::
This approach is easy, but note your API will be locked to your specification. If you make changes to your
specification there will be corresponding changes to the API, and this is likely to break existing code.
Also, monkey patches can be very confusing to someone who is not aware of them. Differences
between the installed module and the actual behavior of the source code can lead to frustrated
Also, monkey patches can be very confusing to someone who is not aware of them. Differences
between the installed module and the actual behavior of the source code can lead to frustrated
developers. As such, this approach should be used with great care. In the
next section we will show you how to create your own custom API that is more robust.
2 changes: 2 additions & 0 deletions docs/source/extensions_tutorial/5_custom_api.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _extension-custom-api:

Building a custom Python API for an extension
=============================================

Expand Down
2 changes: 2 additions & 0 deletions docs/source/extensions_tutorial/6_documenting_extension.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _extension-documentation:

Documenting Extensions
----------------------

Expand Down
10 changes: 9 additions & 1 deletion docs/source/extensions_tutorial/7_publishing_extensions.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _extension-publishing:

Publishing extensions
---------------------

Expand All @@ -11,10 +13,12 @@ As illustrated in the figure, the publication process is divided into three main
releases via PyPI, and 3) open publication of the extension to the community via the
:ndx-catalog:`NDX Catalog <>`.

.. _extension-publishing-github:

Open Source: Releasing your extension Git repository
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1. Before publishing your licence online you should add a license file. Permissive licenses should be used if possible. A `BSD license <https://opensource.org/licenses/BSD-3-Clause>` is recommended.
1. Before publishing your extension online you should add a license file. Permissive licenses should be used if possible. A `BSD license <https://opensource.org/licenses/BSD-3-Clause>` is recommended.
2. Modify ``README.md`` at the root directory of your extension repo to describe the extension for interested developers and users.
3. The first step to publishing your extension then is to make your Git repository accessible online
via GitHub, or any other public Git hosting service of your choice. To publish your extension
Expand All @@ -32,6 +36,8 @@ Open Source: Releasing your extension Git repository
extensions repositories. However, users may chose to use other services (e.g., GitLab or Bitbucket)
to share their sources.

.. _extension-publishing-pypi:

Open Access: Releasing your extension on PyPI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Expand All @@ -48,6 +54,8 @@ To make your extension installable for users via pip and manage public releases
python setup.py sdist bdist_wheel
twine upload dist/*

.. _extension-publishing-ndxcatalog:

Open Publication: Publishing your extension on the NDX Catalog
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Expand Down
10 changes: 10 additions & 0 deletions docs/source/extensions_tutorial/8_examples.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
.. _extension-nwb-examples:

Examples
--------

.. toctree::
:maxdepth: 1
:titlesonly:

extension_examples/labmetadata_extension
Loading