From d2a59a4e9b046619a9eeb42df5423e396f89f593 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Thu, 26 May 2022 09:36:44 -0400 Subject: [PATCH 01/18] Change to RTD theme --- docs/conf.py | 10 ++-------- setup.cfg | 1 + 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 3b2d99a61..54b188ad6 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -99,14 +99,8 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. To override the custom theme, set this to the # name of a builtin theme or the name of a custom theme in html_theme_path. -html_theme = "alabaster" -html_theme_options = { - "github_user": "asdf-format", - "github_repo": "asdf", - "github_button": "true", - "fixed_sidebar": "true", - "page_width": "90%", -} +html_theme = "sphinx_rtd_theme" +html_theme_options = {} html_static_path = ["_static"] diff --git a/setup.cfg b/setup.cfg index b88a0aa40..d14a6c573 100644 --- a/setup.cfg +++ b/setup.cfg @@ -50,6 +50,7 @@ docs = graphviz matplotlib docutils + sphinx-rtd-theme tests = # Necessary for Windows until https://github.com/pytest-dev/pytest/issues/9765 # is resolved: From b8089e784a886aab2cbf964f0f5b40a077af9a9b Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Wed, 1 Jun 2022 15:04:02 -0400 Subject: [PATCH 02/18] Update CI for standalone doc build --- .github/workflows/ci.yml | 7 +++++-- tox.ini | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70387ca38..d82746b2d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,6 +57,11 @@ jobs: python-version: "3.9" toxenv: codestyle + - name: Build Documents + python-version: "3.9" + os: ubuntu-latest + toxenv: docbuild + - name: Twine os: ubuntu-latest python-version: "3.9" @@ -77,7 +82,6 @@ jobs: python-version: "3.9" toxenv: py39-gwcsdev - # Fail - name: Numpy Dev os: ubuntu-latest python-version: "3.9" @@ -103,7 +107,6 @@ jobs: python-version: "3.9" toxenv: py39-asdfcoordinatesschemasdev - # Fail - name: Pre-Release Dependencies os: ubuntu-latest python-version: "3.9" diff --git a/tox.ini b/tox.ini index 46bc524ef..caa4864e6 100644 --- a/tox.ini +++ b/tox.ini @@ -76,6 +76,7 @@ commands= [testenv:docbuild] extras= docs commands= + pip freeze sphinx-build -W docs build/docs [testenv:checkdocs] From 1779b3f8751b9885efa3209e59acc091b5a5b5e5 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Wed, 1 Jun 2022 15:28:07 -0400 Subject: [PATCH 03/18] Add graphviz to docs config --- .readthedocs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.readthedocs.yml b/.readthedocs.yml index 6a55db525..bae83524e 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -2,6 +2,8 @@ version: 2 build: os: ubuntu-20.04 + apt_packages: + - graphviz tools: python: "3.9" From 99223660d21899aaba85a5312044d76be993eac7 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Wed, 1 Jun 2022 15:42:33 -0400 Subject: [PATCH 04/18] Fix warning --- docs/asdf/developer_api.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/asdf/developer_api.rst b/docs/asdf/developer_api.rst index 30cbdbc29..09339557a 100644 --- a/docs/asdf/developer_api.rst +++ b/docs/asdf/developer_api.rst @@ -10,6 +10,7 @@ to create their own custom ASDF types and extensions. .. automodapi:: asdf.extension .. automodapi:: asdf.resource + :skip: DirectoryResourceMapping .. automodapi:: asdf.yamlutil From 621dd28cc6f1421de5955122295ca3eb0453a1ff Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Wed, 1 Jun 2022 20:54:29 -0400 Subject: [PATCH 05/18] Update resource so description appears in API --- asdf/resource.py | 12 +++++++++++- docs/asdf/developer_api.rst | 1 - 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/asdf/resource.py b/asdf/resource.py index 08b8a4f7b..0dc4dfbd5 100644 --- a/asdf/resource.py +++ b/asdf/resource.py @@ -5,7 +5,7 @@ import pkgutil from collections.abc import Mapping -from asdf_standard import DirectoryResourceMapping +from asdf_standard import DirectoryResourceMapping as _DirectoryResourceMapping from .util import get_class_name @@ -18,6 +18,16 @@ ] +class DirectoryResourceMapping(_DirectoryResourceMapping): + """ + A resource mapping that reads resource content from a directory or directory tree. + + See :class:`~asdf_standard.resource.DirectoryResourceMapping` for details. + """ + + pass + + class ResourceMappingProxy(Mapping): """ Wrapper around a resource mapping that carries diff --git a/docs/asdf/developer_api.rst b/docs/asdf/developer_api.rst index 09339557a..30cbdbc29 100644 --- a/docs/asdf/developer_api.rst +++ b/docs/asdf/developer_api.rst @@ -10,7 +10,6 @@ to create their own custom ASDF types and extensions. .. automodapi:: asdf.extension .. automodapi:: asdf.resource - :skip: DirectoryResourceMapping .. automodapi:: asdf.yamlutil From eef74f64f93cd342fe6bcb9cc1b314f985ae0fb7 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Thu, 2 Jun 2022 09:05:41 -0400 Subject: [PATCH 06/18] Change docs logo --- docs/_static/logo.ico | Bin 0 -> 5694 bytes docs/_static/logo.pdf | Bin 0 -> 10668 bytes docs/_static/logo.png | Bin 0 -> 16762 bytes docs/conf.py | 4 +++- 4 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 docs/_static/logo.ico create mode 100644 docs/_static/logo.pdf create mode 100644 docs/_static/logo.png diff --git a/docs/_static/logo.ico b/docs/_static/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..b31899f2c89a14b6bf00b23bcbb4e397bf9f891c GIT binary patch literal 5694 zcmeHLc{r6@7yoq|Zu5j&U6tmmdD19N8qg#nG)hPbNy$7VB$267nhT+lF_cu&q)0R% z^OVfTy7RF2Ie5BVPj$cVukZO<&RJ`(-&%XWd+oi}dOZhd$NuKe2jiU~{T;wQkY-;7 z!Jd6N{wZqLt{vL9Z;uWgI-q06j_A~>6FPV9j4oZepljEz=+>eWzDQGu$eD%Px712r`@sH>}E?b@}_(9nRUrY5wsw6Jd7I;>y6 z9ve1nz{ZUmv1!vLY~H*X+S=OKvSkZ&bab$F>sILM>OxOX5BmE0*tTsO3=9mgefxIo z*s%kKhKAU=b0>_9j9_eR3==GeDyA1o{^ zU}wwy?9agT1{y92^|r=;#P1CnxORzaP%d&Ny)309;&L;OgoM zH#avNJa`c9?(R5r=nyR>kB_WKluCmeX!TwEM(+_-`G_;@5FBp@*{5jSt%#I0Mmkd%~!+qZ8cIXM}3?%cuMyLWN# z-aVwGq~QMj`$$bq#e)YA@bKY7JbLs9j~_qAlP6D*mX?O6PoLu1vu8+8Pe(>Z2A)5E zj?BzVym;{fSy@@g&d$cmmoM?^)hoPy{TgrHyg^P*4svsIk(ZZ;w{PDfKR+J@1qCQ9 zEJRUJ5sHh8QBqQZ($Z3tm6f5qyc`u36{xJN#JhLzP*qih_wV1My1E)QH8rTMtwmj3 z9qQ}r(a_L<#>Pen1OhZQHGzom_kL{n=ANUg;siA{YPJ~v!{k(gd z9y#%}z_d-v7lM~)PS6*+w&@lWH6pf6!MKA6~2M4&jXpZvCXKwj1DI(|WpyUd&v*1d)!kDES zHyRpmUjOZIkFzNXQ;)ZwTIe-VX6G2O9z!SfA2@PwZ>SB0_!bq<(0IOxh+bdy(U3A! znW`86}dk3aW$T+6YsT**^3M>F#de;L7}hr)dVJ; z`r65eD>}qA2(ec7TH#cqbOePKQ^DwcrSwee6f;#=TXKgf8n?N)DiF?5iKWcVQ~utQ zYL1<6q==m?SSmKiVyCJe`aa=1B1qe9H+Nk@31Y6il>8d~ zx&ASwOMeqfh6{!8=(vT4hziuBh|WzLUba4kp?W!#+)a%Y;W6_3aQmWlBKBLTY@yD10 z$IC2BqKS-IcHQE+sLKOjH7(?=ENvbuHw(!oDz>!cVD)IW-HN3}5JyP zTlYK5k&h^NMkK42Qzi^H@Zq-j>FmB_GwXXT$Yz=`OAC9}dF5|2%eYjA{GCb)-Pw*F zM8-3CDSzRn|G>6tr$JA~RO+xaGG&kh>+<4EJ_`1H$;3w_OieQu+N*wvL?^`(Hd2t( zCOW4;rH(9%nYT+5y+amj4R?9fv_)S0jI~c^)H+)oBePt^y&eVTYuW4MJy|nDXeMPF z2DUY?84C=zAqup#s4A*ujm73lVOGK!CCM~y1@es%?+!|5ur<@dbLRxnGL!e2J6)r+0}kwT_9d(>a7s%wS+ i&7h9`o59Mg;Xj-GZ=Uqk_kZ^UT7L-mI{3dlfxiH6e;n=r literal 0 HcmV?d00001 diff --git a/docs/_static/logo.pdf b/docs/_static/logo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4aedaf22c22b7daff23acba0189cb63fcecbac9d GIT binary patch literal 10668 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 Xdh*q4Ce(ifK$DkN{#5?a`1}6>>dkqL literal 0 HcmV?d00001 diff --git a/docs/conf.py b/docs/conf.py index 54b188ad6..47afeb308 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -110,7 +110,7 @@ # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -# html_favicon = '' +html_favicon = "_static/logo.ico" # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. @@ -130,6 +130,8 @@ # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [("index", project + ".tex", project + " Documentation", author, "manual")] +latex_logo = "_static/logo.pdf" + # -- Options for manual page output -------------------------------------------- From e91f873a987125f5dbabb910954f24e0a2006fcd Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Thu, 2 Jun 2022 10:23:00 -0400 Subject: [PATCH 07/18] Cleanup changelog --- CHANGES.rst | 57 ++++- docs/asdf/changes.rst | 475 +----------------------------------------- docs/index.rst | 20 +- 3 files changed, 70 insertions(+), 482 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 6195b86e6..ea9e5ca8e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,8 @@ 2.12.0 (2022-06-06) ------------------- +The ASDF Standard is at v1.6.0 + - Added ability to display title as a comment in using the ``info()`` functionality. [#1138] - Add ability to set asdf-standard version for schema example items. [#1143] @@ -8,16 +10,22 @@ 2.11.1 (2022-04-15) ------------------- +The ASDF Standard is at v1.6.0 + - Update minimum astropy version to 5.0.4. [#1133] 2.11.0 (2022-03-15) ------------------- +The ASDF Standard is at v1.6.0 + - Update minimum jsonschema version to 4.0.1. [#1105] 2.10.1 (2022-03-02) ------------------- +The ASDF Standard is at v1.6.0 + - Bugfix for circular build dependency for asdf. [#1094] - Fix small bug with handling multiple schema uris per tag. [#1095] @@ -25,11 +33,15 @@ 2.10.0 (2022-02-17) ------------------- +The ASDF Standard is at v1.6.0 + - Replace asdf-standard submodule with pypi package. [#1079] 2.9.2 (2022-02-07) ------------------ +The ASDF Standard is at v1.6.0 + - Fix deprecation warnings stemming from the release of pytest 7.0.0. [#1075] - Fix bug in pytest plugin when schemas are not in a directory named "schemas". [#1076] @@ -37,11 +49,15 @@ 2.9.1 (2022-02-03) ------------------ +The ASDF Standard is at v1.6.0 + - Fix typo in testing module ``__init__.py`` name. [#1071] 2.9.0 (2022-02-02) ------------------ +The ASDF Standard is at v1.6.0 + - Added the capability for tag classes to provide an interface to asdf info functionality to obtain information about the class attributes rather than appear as an opaque class object. @@ -67,11 +83,15 @@ 2.8.3 (2021-12-13) ------------------ +The ASDF Standard is at v1.6.0 + - Fix more use of 'python' where 'python3' is intended. [#1033] 2.8.2 (2021-12-06) ------------------ +The ASDF Standard is at v1.6.0 + - Update documentation to reflect new 2.8 features. [#998] - Fix array compression for non-native byte order [#1010] @@ -93,6 +113,8 @@ 2.8.0 (2021-05-12) ------------------ +The ASDF Standard is at v1.6.0 + - Add ``yaml_tag_handles`` property to allow definition of custom yaml ``%TAG`` handles in the asdf file header. [#963] @@ -170,6 +192,8 @@ 2.7.5 (2021-06-09) ------------------ +The ASDF Standard is at v1.5.0 + - Fix bug in ``asdf.schema.check_schema`` causing relative references in metaschemas to be resolved incorrectly. [#987] @@ -179,6 +203,8 @@ 2.7.4 (2021-04-30) ------------------ +The ASDF Standard is at v1.5.0 + - Fix pytest plugin failure under older versions of pytest. [#934] - Copy array views when the base array is non-contiguous. [#949] @@ -192,6 +218,8 @@ 2.7.3 (2021-02-25) ------------------ +The ASDF Standard is at v1.5.0 + - Add pytest plugin options to skip and xfail individual tests and xfail the unsupported ndarray-1.0.0 example. [#929] @@ -201,6 +229,8 @@ 2.7.2 (2021-01-15) ------------------ +The ASDF Standard is at v1.5.0 + - Fix bug causing test collection failures in some environments. [#889] - Fix bug when decompressing arrays with numpy 1.20. [#901, #909] @@ -208,12 +238,16 @@ 2.7.1 (2020-08-18) ------------------ +The ASDF Standard is at v1.5.0 + - Fix bug preventing access to copied array data after ``AsdfFile`` is closed. [#869] 2.7.0 (2020-07-23) ------------------ +The ASDF Standard is at v1.5.0 + - Fix bug preventing diff of files containing ndarray-1.0.0 objects in simplified form. [#786] @@ -274,6 +308,8 @@ 2.6.0 (2020-04-22) ------------------ +The ASDF Standard is at v1.5.0 + - AsdfDeprecationWarning now subclasses DeprecationWarning. [#710] - Resolve external references in custom schemas, and deprecate @@ -307,6 +343,8 @@ 2.5.2 (2020-02-28) ------------------ +The ASDF Standard is at v1.4.0 + - Add a developer overview document to help understand how ASDF works internally. Still a work in progress. [#730] @@ -324,12 +362,16 @@ 2.5.1 (2020-01-07) ------------------ +The ASDF Standard is at v1.4.0 + - Fix bug in test causing failure when test suite is run against an installed asdf package. [#732] 2.5.0 (2019-12-23) ------------------ +The ASDF Standard is at v1.4.0 + - Added asdf-standard 1.4.0 to the list of supported versions. [#704] - Fix load_schema LRU cache memory usage issue [#682] - Add convenience method for fetching the default resolver [#682] @@ -344,12 +386,16 @@ 2.4.2 (2019-08-29) ------------------ +The ASDF Standard is at v1.3.0 + - Limit the version of ``semantic_version`` to <=2.6.0 to work around a Deprecation warning. [#700] 2.4.1 (2019-08-27) ------------------ +The ASDF Standard is at v1.3.0 + - Define the ``in`` operator for top-level ``AsdfFile`` objects. [#623] - Overhaul packaging infrastructure. Remove use of ``astropy_helpers``. [#670] @@ -363,15 +409,14 @@ - Add support for jsonschema 3.x. [#684] -2.3.4 (unreleased) ------------------- - - Fix bug in ``NDArrayType.__len__``. It must be a method, not a property. [#673] 2.3.3 (2019-04-02) ------------------ +The ASDF Standard is at v1.3.0 + - Pass ``ignore_unrecognized_tag`` setting through to ASDF-in-FITS. [#650] - Use ``$schema`` keyword if available to determine meta-schema to use when @@ -387,12 +432,16 @@ 2.3.2 (2019-02-19) ------------------ +The ASDF Standard is at v1.3.0 + - Fix bug that occurs when comparing installed extension version with that found in file. [#641] 2.3.1 (2018-12-20) ------------------ +The ASDF Standard is at v1.3.0 + - Provide source information for ``AsdfDeprecationWarning`` that come from extensions from external packages. [#629] @@ -407,6 +456,8 @@ 2.3.0 (2018-11-28) ------------------ +The ASDF Standard is at v1.3.0 + - Storage of arbitrary precision integers is now provided by ``asdf.IntegerType``. Reading a file with integer literals that are too large now causes only a warning instead of a validation error. This is to diff --git a/docs/asdf/changes.rst b/docs/asdf/changes.rst index a9ae82fe1..e89b1f85e 100644 --- a/docs/asdf/changes.rst +++ b/docs/asdf/changes.rst @@ -1,476 +1,7 @@ .. currentmodule:: asdf -******* -Changes -******* - -What's new in asdf 2.12.0? -========================== - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Added ability to display title as a comment in using the - ``info()`` functionality. -- Add ability to set asdf-standard version for schema example items. - -What's new in asdf 2.11.1? -========================== - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Update minimum astropy version to 5.0.4. - -What's new in asdf 2.11.0? -========================== - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Update minimum jsonschema version to 4.0.1. - -What's new in asdf 2.10.1? -========================== - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Bugfix for circular build dependency for asdf. -- Fix small bug with handling multiple schema uris per tag. - -What's new in asdf 2.10.0? -========================== - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Replace asdf-standard submodule with pypi package. - -What's new in asdf 2.9.2? -========================= - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Fix deprecation warnings stemming from the release of pytest 7.0.0. - -- Fix bug in pytest plugin when schemas are not in a directory named "schemas". - -What's new in asdf 2.9.1? -========================= - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Fix typo in testing module ``__init__.py`` name. - -What's new in asdf 2.9.0? -========================= - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Added the capability for classes to expose their contents - to AsdfFile.info and AsdfFile.search via the ``__asdf_traverse__`` method. - -- Drop support for Python 3.6. - -- Update setup.py to raise error if "git submodule update --init" has - not been run. - -- Add ability for tags to correspond to multiple schema_uri, with an - implied allOf among the schema_uris. - -- Add the URL of the file being parsed to ``SerializationContext``. - -- Add ``asdf.testing.helpers`` module with simplified versions of test - helpers previously available in ``asdf.tests.helpers``. - -What's new in asdf 2.8.3? -========================= - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Fix use of "python" instead of "python3" in compatibility tests. - -What's new in asdf 2.8.2? -========================= - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Fix array compression for non-native byte order. - -- Fix bug in schema loading when URI is claimed by both legacy - and new-style extensions. - -- Hide 'name' and 'version' attributes on instances of - NDArrayType. - -What's new in asdf 2.8.1? -========================= - -The ASDF Standard is at v1.6.0. - -Changes include: - -- Fix bug that corrupts ndarray views when a new block is added - to an existing file in absence of a block index. - -What's new in asdf 2.8.0? -========================= - -The ASDF Standard is at v1.6.0. - -Changes include: - -- New plugin APIs for block compressors, extensions, and schemas. - -- New global configuration mechanism (``asdf.get_config()``). - -- Support for the asdf:// URI scheme. - -- Drop support for Python 3.5. - -- Support for ASDF Standard 1.6.0, which is available via the - ``version`` argument to ``AsdfFile.__init__`` but not yet the - default. - -- Values that match defaults defined in schemas are no longer - automatically removed from the ASDF tree. - -- ``None`` values are no longer removed from the tree on write. - -- Remove the ``asdf.test`` method and ``asdf.__githash__`` attribute. - -- And more, see full changelog below for details. - -What's new in asdf 2.7.5? -========================= - -The ASDF Standard is at v1.5.0. - -Changes include: - -- Fix bug in ``asdf.schema.check_schema`` causing relative references in - metaschemas to be resolved incorrectly. - -- Fix bug that corrupts ndarray views when a new block is added - to an existing file in absence of a block index. - -What's New in asdf 2.7.4? -========================= - -The ASDF Standard is at v1.5.0. - -Changes include: - -- Fix pytest plugin failure under older versions of pytest. - -- Fix bugs when serializing views over non-contiguous and FITS - base arrays. - -- Add support for opening files from HTTPS URLs and following - HTTP/HTTPS redirects. - -What's New in asdf 2.7.3? -========================= - -The ASDF Standard is at v1.5.0. - -Changes include: - -- Fix bug resulting in invalid strides values for views over - FITS arrays. - -- Add pytest plugin options to skip and xfail individual tests - and xfail the unsupported ndarray-1.0.0 schema example. - -What's New in asdf 2.7.2? -========================= - -The ASDF Standard is at v1.5.0. - -Changes include: - -* Fix bug causing test collection failures under Python 3.9. - -* Fix bug when decompressing arrays with numpy 1.20. - -* Replace ``assert`` statements with ``raise`` at the behest - of the bandit security linter. - -What's New in asdf 2.7.1? -========================= - -The ASDF Standard is at v1.5.0. - -The sole change in this release: - -* Fix bug preventing access to copied array data after - an ``AsdfFile`` is closed. - -What's New in asdf 2.7.0? -========================= - -The ASDF Standard is at v1.5.0. - -Changes include: - -* Performance improvements when reading and validating - ASDF files. - -* Numerous bug fixes. See complete changelog below for details. - -* Add option to ``asdf.open`` that disables schema validation on read. - -* Improved warning messages. All `asdf` library warnings now - subclass ``asdf.exceptions.AsdfWarning``. - -* Drop support for filling default values from subschemas - within oneOf or anyOf combiners. - -* Resolve deprecation warnings from the `asdf` pytest plugin - when used with newer versions of pytest. - -* Drop support for 2.x versions of the jsonschema package. - -What's New in asdf 2.6.0? -========================= - -The ASDF Standard is at v1.5.0. - -Changes include: - -* ASDF Standard 1.5.0 is now the default for new files. Changes to - the standard include several new and updated transform schemas, - and removal of wcs schemas that were previously deprecated and - moved to the ``gwcs`` package. - -* Add ``asdf.info`` and ``AsdfFile.search`` methods for visualizing - and interactively searching an ASDF tree. - -* Fix bug causing too many bytes to be consumed when reading - compressed blocks. - -* Support validation and serialization of additional numpy - scalar types. - -* Fix serialization of trees containing implicit internal references - and reference cycles, and simplify handling of children in - ``ExtensionType`` subclasses. - -* Fix bug preventing addition of history entires to a file that - was initially saved without them. - -* Expand developer documentation to cover the details of pyyaml - integration and conversion between tagged trees and custom trees. - -What's New in asdf 2.5.2? -========================= - -The ASDF Standard is at v1.4.0. - -Changes include: - -* Add schemas that were previously missing from ASDF Standard 1.4.0, - and fix a variety of minor issues in ``AsdfType`` subclasses. - -* Add general and versioning-specific developer documentation. - -What's New in asdf 2.5.1? -========================= - -The ASDF Standard is at v1.4.0. - -Changes include: - -* Fix bug in test causing failure when test suite is run against - an installed `asdf` package. - -What's New in asdf 2.5.0? -========================= - -The ASDF Standard is at v1.4.0. - -Changes include: - -* Added convenience method for fetching the default resolver - -* Fixed load_schema LRU cache memory usage issue - -* Fixed bug causing segfault after update of a memory-mapped file. - -What's New in asdf 2.4.2? -========================= - -The ASDF Standard is at v1.3.0. Changes include: - -* Define the ``in`` operator for top-level ``AsdfFile`` objects. - -* Automatically register schema tester plugin. Do not enable schema tests by - default. Add configuration setting and command line option to enable schema - tests. - -* Enable handling of subclasses of known custom types by using decorators for - convenience. - -* Add support for jsonschema 3.x. - -* Fix bug in ``NDArrayType.__len__``. It must be a method, not a - property. - -What's New in asdf 2.3.3? -========================= - -The ASDF Standard is at v1.3.0. Changes include: - -* Pass ``ignore_unrecognized_tag`` setting through to ASDF-in-FITS. - -* Use ``$schema`` keyword if available to determine meta-schema to use when - testing whether schemas themselves are valid. - -* Take into account resolvers from installed extensions when loading schemas - for validation. - -* Fix compatibility issue with new release of ``pyyaml`` (version 5.1). - -* Allow use of ``pathlib.Path`` objects for ``custom_schema`` option. - -What's New in asdf 2.3.1? -========================= - -he ASDF Standard is at v1.3.0. Changes include: - -* Provide source information for ``AsdfDeprecationWarning`` that come from - extensions from external packages. - -* Fix the way ``generic_io`` handles URIs and paths on Windows. - -* Fix bug in ``asdftool`` that prevented ``extract`` command from being - visible. - -What's New in asdf 2.3? -======================= - -`asdf` 2.3 reflects the update of ASDF Standard to v1.3.0, and contains a few -notable features and an API change: - -* Storage of arbitrary precision integers is now provided by - `asdf.IntegerType`. This new type is provided by version 1.3.0 of the ASDF - Standard. - -* Reading a file with integer literals that are too large now causes only a - warning instead of a validation error. This is to provide backwards - compatibility for files that were created with a buggy version of `asdf`. - -* The functions `asdf.open` and `AsdfFile.write_to` now support the use of - `pathlib.Path`. - -* The `asdf.asdftypes` module has been deprecated in favor of `asdf.types`. The - old module will be removed entirely in the 3.0 release. - -What's New in asdf 2.2? -======================= - -`asdf` 2.2 contains several API changes, although backwards compatibilty is -preserved for now. The most significant changes are: - -* The function `AsdfFile.open` has been deprecated in favor of `asdf.open`. - It will be removed entirely in the 3.0 release. More intelligent file mode - handling has been added to `asdf.open`. Files that are opened in read-only - mode with `asdf.open` now explicitly block writes to memory-mapped arrays. - This may cause problems for some existing code, but any such code was - accessing these arrays in an unsafe manner, so backwards compatibility for - this case is not provided. The old mode handling behavior is retained for now - in `AsdfFile.open`. - -* It is now possible to disable lazy loading of internal arrays. This is useful - when the `AsdfFile` was opened using another open file. With lazy loading, it - is possible to close the original file but still retain access to the array - data. - -* There is a new warning `AsdfConversionWarning` that occurs when failing to - convert nodes in the ASDF tree into custom tagged types. This makes it easier - for users to filter specifically for this failure case. - -What's New in asdf 2.1? -======================= - -`asdf` 2.1 is a minor release, and most of the changes affect only a subset of -users. The most notable changes are the following: - -* `namedtuple` objects can now be serialized. They are automatically converted - into `list` objects, and therefore are not strictly able to round-trip. By - default a warning occurs when performing this conversion, but the warning can - be disabled by passing `ignore_implicit_conversion=True` to the `AsdfFile` - constructor. - -* Added a method `AsdfFile.get_history_entries` for getting a list of history - entries from the tree. - -* Added an option to `generic_io.get_file` to close the underlying file handle. - -Please see the :ref:`change_log` for additional details. - -What's New in asdf 2.0? -======================= - -`asdf` 2.0 is a major release that includes many improvements, new features, and -some API changes. It is the first release of the `asdf` package that only -supports Python 3. - -The full list of changes, including bug fixes, can be found in the -:ref:`change_log`. A brief overview of changes is provided below: - -* Support for Python 2.7 has been removed entirely. - -* There is no longer a hard dependency on `astropy`. It is still required for - some features, and for running the tests. Astropy-related tag implementations - have been moved to the Astropy package itself. -* External packages can now install and register custom ASDF extensions using - `setuptools` entry points (see :ref:`other_packages` and - :ref:`packaging_extensions`). `asdf` detects extensions that are installed in - this way and automatically uses them when reading and writing files with - custom types. -* A bug was fixed that now allows fully-specified tags from external packages - to be properly resolved. -* The file format now includes metadata about the extensions that were used to - create an ASDF file. The software automatically adds this information when - writing an ASDF file, and will check for installed extensions when reading - a file containing such metadata (see :ref:`extension_checking`). -* The restrictions on the top-level attributes `data`, `wcs`, and `fits` have - been removed. -* Clients that wish to impose additional validation requirements on files can - now provide custom top-level schemas (see :ref:`custom-schemas`). -* There is a new way to reference array data that is defined in external files - (see :ref:`array-references`). -* Several new commands have been added to the `asdftool` command line - interface: - - * ``extensions`` for showing information about installed extensions (see - :ref:`other_packages`). - * ``remove-hdu`` for removing ASDF extension from ASDF-in-FITS file - (requires `astropy`, see :ref:`asdf-in-fits`). - -* The package now cleanly supports builds in `develop` mode and can be imported - from the source tree. - -.. _change_log: - -Change Log -========== +*********** +Change Log +*********** .. include:: ../../CHANGES.rst diff --git a/docs/index.rst b/docs/index.rst index d207827b5..ecfa50f8c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -22,14 +22,13 @@ Getting Started =============== .. toctree:: - :maxdepth: 2 + :maxdepth: 2 - asdf/install - asdf/overview - asdf/features - asdf/config - asdf/asdf_tool - asdf/changes + asdf/install + asdf/overview + asdf/features + asdf/config + asdf/asdf_tool .. _extending: @@ -91,6 +90,13 @@ See also - `asdf` Python package distribution on `pypi `_ +Changes +======= +.. toctree:: + :maxdepth: 2 + + asdf/changes + Index ===== From 179b22d1c684f64bdbb4345c839054ceaee87ba6 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Thu, 2 Jun 2022 20:20:41 -0400 Subject: [PATCH 08/18] Fix hover --- docs/_static/custom.css | 34 ++++++++++++++++++++++++++++++++-- docs/conf.py | 4 ++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/_static/custom.css b/docs/_static/custom.css index 9463628be..dacff8e30 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -1,9 +1,39 @@ -div.highlight { +div.admonition { transition: width 0.5s; -webkit-transition: width 0.5s; overflow: hidden; } -div.highlight:hover { +div.admonition:active { + width: 150% +} + +div.highlight-yaml { + transition: width 0.5s; + -webkit-transition: width 0.5s; + overflow: hidden; +} + +div.highlight-yaml:active { + width: 150% +} + +div.highlight-default { + transition: width 0.5s; + -webkit-transition: width 0.5s; + overflow: hidden; +} + +div.highlight-default:active { + width: 150% +} + +div.highlight-python { + transition: width 0.5s; + -webkit-transition: width 0.5s; + overflow: hidden; +} + +div.highlight-python:active { width: 150% } diff --git a/docs/conf.py b/docs/conf.py index 47afeb308..b432e99aa 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -141,3 +141,7 @@ sys.path.insert(0, os.path.join(os.path.abspath(os.path.dirname("__file__")), "sphinxext")) extensions += ["example"] + + +def setup(app): + app.add_css_file("custom.css") From b37bdbd1154ddde885e3005807ae63026fdcdd17 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Thu, 2 Jun 2022 21:57:10 -0400 Subject: [PATCH 09/18] Enable intersphinx to asdf-standard --- docs/asdf/developer_versioning.rst | 6 ++---- docs/asdf/extending/legacy.rst | 4 ++-- docs/asdf/extending/schemas.rst | 13 +++++++++---- docs/asdf/features.rst | 13 +++++++------ docs/conf.py | 2 ++ docs/index.rst | 4 ++-- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/docs/asdf/developer_versioning.rst b/docs/asdf/developer_versioning.rst index c16407608..dca940d95 100644 --- a/docs/asdf/developer_versioning.rst +++ b/docs/asdf/developer_versioning.rst @@ -10,12 +10,10 @@ being trialled in the asdf-astropy package. ASDF versioning conventions --------------------------- -The ASDF Standard document provides a helpful overview_ of the various ASDF -versioning conventions. We will be concerned with the *standard version* +The ASDF Standard document provides a helpful :ref:`overview ` +of the various ASDF versioning conventions. We will be concerned with the *standard version* and individual *tag versions*. -.. _overview: https://asdf-standard.readthedocs.io/en/latest/versioning.html - Overview -------- diff --git a/docs/asdf/extending/legacy.rst b/docs/asdf/extending/legacy.rst index 319f9ff17..88b91092c 100644 --- a/docs/asdf/extending/legacy.rst +++ b/docs/asdf/extending/legacy.rst @@ -691,8 +691,8 @@ Creating custom schemas ----------------------- All custom types to be serialized by `asdf` require custom schemas. The best -resource for creating ASDF schemas can be found in the `ASDF Standard -`_ documentation. +resource for creating ASDF schemas can be found in the :ref:`ASDF Standard +` documentation. In most cases, ASDF schemas will be included as part of a packaged software distribution. In these cases, it is important for the diff --git a/docs/asdf/extending/schemas.rst b/docs/asdf/extending/schemas.rst index 6e0397138..2cb5898ac 100644 --- a/docs/asdf/extending/schemas.rst +++ b/docs/asdf/extending/schemas.rst @@ -49,7 +49,7 @@ numeric value and corresponding unit: required: [value, unit] ... -This is similar to the `quantity schema`_ in the ASDF Standard, but +This is similar to the quantity schema, found :ref:`here `, of the ASDF Standard, but has been updated to reflect current recommendations regarding schemas. Let's walk through this schema line by line. @@ -241,6 +241,11 @@ function will validate a Python object against a schema: The validate function will return successfully if the object is valid, or raise an error if not. -.. _JSON Schema Draft 4: https://json-schema.org/specification-links.html#draft-4 -.. _Understanding JSON Schema: https://json-schema.org/understanding-json-schema/ -.. _quantity schema: https://asdf-standard.readthedocs.io/en/latest/generated/stsci.edu/asdf/unit/quantity-1.1.0.html +See also: +========= + +- `JSON Schema Draft 4 `_ + +- `Understanding JSON Schema `_ + +- :ref:`Unit Schemas ` diff --git a/docs/asdf/features.rst b/docs/asdf/features.rst index 7f8099930..ad4b3a6d6 100644 --- a/docs/asdf/features.rst +++ b/docs/asdf/features.rst @@ -23,9 +23,9 @@ and reading trees, see :ref:`overview`. .. note:: The ASDF Standard imposes a maximum size of 64-bit signed integers literals in - the tree (see `the docs `_ - for details and justification). Attempting to store a larger value as a YAML literal will - result in a validation error. + the tree (see :ref:`` for details and justification). + Attempting to store a larger value as a YAML literal will result in a validation + error. For arbitrary precision integer support, see `IntegerType`. @@ -92,8 +92,8 @@ Schema validation ================= Schema validation is used to determine whether an ASDF file is well formed. All -ASDF files must conform to the schemas defined by the `ASDF Standard -`_. Schema validation occurs +ASDF files must conform to the schemas defined by the :ref:`ASDF Standard +`. Schema validation occurs when reading ASDF files (using `asdf.open`), and also when writing them out (using `AsdfFile.write_to` or `AsdfFile.update`). @@ -181,7 +181,8 @@ pass the schema URI (``http://example.com/schemas/your-custom-schema``, in this case) instead of a file path. .. _top-level core schema: - https://github.com/asdf-format/asdf-standard/blob/master/schemas/stsci.edu/asdf/core/asdf-1.1.0.yaml +.. note:: + The top-level core schemas can be found :ref:`here `. .. _version_and_compat: diff --git a/docs/conf.py b/docs/conf.py index b432e99aa..f6d0df923 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,6 +54,8 @@ # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.2' +intersphinx_mapping["asdf-standard"] = ("https://asdf-standard.readthedocs.io/en/latest/", None) + # To perform a Sphinx version check that needs to be more specific than # major.minor, call `check_sphinx_version("x.y.z")` here. # check_sphinx_version("1.2.1") diff --git a/docs/index.rst b/docs/index.rst index ecfa50f8c..092dbe4d4 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -85,8 +85,8 @@ improvements to the ASDF Standard can be reported `here See also ======== -- The `Advanced Scientific Data Format (ASDF) standard - `__ +- The :ref:`Advanced Scientific Data Format (ASDF) standard + `. - `asdf` Python package distribution on `pypi `_ From 62ccb874fa532b1b6dd4689d12455bc140668d76 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Fri, 3 Jun 2022 10:00:55 -0400 Subject: [PATCH 10/18] Add logo to sidebar --- docs/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/conf.py b/docs/conf.py index f6d0df923..92072caad 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -113,6 +113,7 @@ # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. html_favicon = "_static/logo.ico" +html_logo = "_static/logo.png" # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. From f43203dc592671d7e9192438ab31edce252e0e93 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Fri, 3 Jun 2022 10:35:59 -0400 Subject: [PATCH 11/18] Add more intersphinx links --- docs/asdf/developer_overview.rst | 2 +- docs/asdf/extending/legacy.rst | 2 +- docs/conf.py | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/asdf/developer_overview.rst b/docs/asdf/developer_overview.rst index ec93ab2ff..fa9da682b 100644 --- a/docs/asdf/developer_overview.rst +++ b/docs/asdf/developer_overview.rst @@ -105,7 +105,7 @@ Or a resource mapping plugin added at runtime like this:: **Entry point:** A Python packaging feature that allows asdf to use plugins provided by other packages. Entry points are registered when a package is installed and become available to asdf without any additional effort on -the part of the user. See ``_ +the part of the user. See :ref:`pypa-packaging:entry-points` for more information. **Resource mapping:** An asdf plugin that provides access to "resources" which diff --git a/docs/asdf/extending/legacy.rst b/docs/asdf/extending/legacy.rst index 88b91092c..8f6779f68 100644 --- a/docs/asdf/extending/legacy.rst +++ b/docs/asdf/extending/legacy.rst @@ -871,7 +871,7 @@ Testing custom schemas ---------------------- Packages that provide their own schemas can test them using `asdf`'s -`pytest `_ plugin for schema testing. +:ref:`pytest ` plugin for schema testing. Schemas are tested for overall validity, and any examples given within the schemas are also tested. diff --git a/docs/conf.py b/docs/conf.py index 92072caad..cab93363f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,7 +54,9 @@ # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.2' +intersphinx_mapping["pypa-packaging"] = ("https://packaging.python.org/en/latest/", None) intersphinx_mapping["asdf-standard"] = ("https://asdf-standard.readthedocs.io/en/latest/", None) +intersphinx_mapping["pytest"] = ("https://docs.pytest.org/en/latest/", None) # To perform a Sphinx version check that needs to be more specific than # major.minor, call `check_sphinx_version("x.y.z")` here. From 577a3cf77ed3d54068ad99ca9a1302b2e3338b54 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Fri, 3 Jun 2022 13:46:58 -0400 Subject: [PATCH 12/18] Add asdf-sphinx --- asdf/resource.py | 2 +- docs/asdf/features.rst | 2 +- docs/conf.py | 2 +- setup.cfg | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/asdf/resource.py b/asdf/resource.py index 0dc4dfbd5..2e0f97933 100644 --- a/asdf/resource.py +++ b/asdf/resource.py @@ -22,7 +22,7 @@ class DirectoryResourceMapping(_DirectoryResourceMapping): """ A resource mapping that reads resource content from a directory or directory tree. - See :class:`~asdf_standard.resource.DirectoryResourceMapping` for details. + See :ref:`asdf_standard.resource.DirectoryResourceMapping` for details. """ pass diff --git a/docs/asdf/features.rst b/docs/asdf/features.rst index ad4b3a6d6..5bf940b20 100644 --- a/docs/asdf/features.rst +++ b/docs/asdf/features.rst @@ -464,7 +464,7 @@ create an `AsdfInFits` object. from asdf import fits_embed ff = fits_embed.AsdfInFits(hdulist, tree) - ff.write_to('embedded_asdf.fits') + ff.write_to('embedded_asdf.fits', overwrite=True) .. runcode:: hidden diff --git a/docs/conf.py b/docs/conf.py index cab93363f..a30599fda 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -145,7 +145,7 @@ man_pages = [("index", project.lower(), project + " Documentation", [author], 1)] sys.path.insert(0, os.path.join(os.path.abspath(os.path.dirname("__file__")), "sphinxext")) -extensions += ["example"] +extensions += ["example", "sphinx_asdf"] def setup(app): diff --git a/setup.cfg b/setup.cfg index d14a6c573..3560ee477 100644 --- a/setup.cfg +++ b/setup.cfg @@ -45,6 +45,7 @@ all = lz4>=0.10 docs = sphinx + sphinx-asdf sphinx-astropy astropy>=5.0.4 graphviz From 9fabbff82a963b2b65677f057c07d1e82e5264ad Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Fri, 3 Jun 2022 16:58:20 -0400 Subject: [PATCH 13/18] Fix note click --- asdf/resource.py | 2 +- docs/_static/custom.css | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/asdf/resource.py b/asdf/resource.py index 2e0f97933..0dc4dfbd5 100644 --- a/asdf/resource.py +++ b/asdf/resource.py @@ -22,7 +22,7 @@ class DirectoryResourceMapping(_DirectoryResourceMapping): """ A resource mapping that reads resource content from a directory or directory tree. - See :ref:`asdf_standard.resource.DirectoryResourceMapping` for details. + See :class:`~asdf_standard.resource.DirectoryResourceMapping` for details. """ pass diff --git a/docs/_static/custom.css b/docs/_static/custom.css index dacff8e30..3b01e4b50 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -8,6 +8,10 @@ div.admonition:active { width: 150% } +div.note:active { + width: 100% +} + div.highlight-yaml { transition: width 0.5s; -webkit-transition: width 0.5s; From 849c2fe42b806d2fa818f8044e24fc6390c669f8 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Mon, 6 Jun 2022 15:20:49 -0400 Subject: [PATCH 14/18] Fix intersphinx link --- docs/asdf/features.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/asdf/features.rst b/docs/asdf/features.rst index 5bf940b20..3ee808a3b 100644 --- a/docs/asdf/features.rst +++ b/docs/asdf/features.rst @@ -23,7 +23,7 @@ and reading trees, see :ref:`overview`. .. note:: The ASDF Standard imposes a maximum size of 64-bit signed integers literals in - the tree (see :ref:`` for details and justification). + the tree (see :ref:`asdf-standard:literal_integers` for details and justification). Attempting to store a larger value as a YAML literal will result in a validation error. From c44a336b73b7505a2fedbd572e0f63c480fe5b9f Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Mon, 6 Jun 2022 15:32:58 -0400 Subject: [PATCH 15/18] Update readme to better display asdf file --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index bf49c9689..8b2ff0ccd 100644 --- a/README.rst +++ b/README.rst @@ -101,10 +101,10 @@ input to the constructor of `AsdfFile`: # Write the data to a new file af.write_to('example.asdf') -If we open the newly created file, we can see some of the key features +If we open the newly created file's metadata section, we can see some of the key features of ASDF on display: -:: +.. code:: yaml #ASDF 1.0.0 #ASDF_STANDARD 1.2.0 From 571c2d503c45c933abb975232d3bea04ccd5fb07 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Mon, 6 Jun 2022 16:15:23 -0400 Subject: [PATCH 16/18] Better rendering of asdf file from readme --- README.rst | 11 ++++- docs/asdf/overview.rst | 41 ++++++++++++++++ docs/sphinxext/example.py | 99 ++++++++++++++++++++------------------- 3 files changed, 102 insertions(+), 49 deletions(-) diff --git a/README.rst b/README.rst index 8b2ff0ccd..000e57fc4 100644 --- a/README.rst +++ b/README.rst @@ -104,6 +104,8 @@ input to the constructor of `AsdfFile`: If we open the newly created file's metadata section, we can see some of the key features of ASDF on display: +.. _begin-example-asdf-metadata: + .. code:: yaml #ASDF 1.0.0 @@ -138,11 +140,16 @@ of ASDF on display: shape: [100] ... +.. _end-example-asdf-metadata: + The metadata in the file mirrors the structure of the tree that was stored. It is hierarchical and human-readable. Notice that metadata has been added to the tree that was not explicitly given by the user. Notice also that the numerical array data is not stored in the metadata tree itself. Instead, it is stored as -binary data blocks below the metadata section (not shown here). +binary data blocks below the metadata section (not shown above). + +.. _end-create-file-text: +.. _begin-compress-file: It is possible to compress the array data when writing the file: @@ -154,7 +161,7 @@ The built-in compression algorithms are ``'zlib'``, and ``'bzp2'``. The ``'lz4'`` algorithm becomes available when the `lz4 `__ package is installed. Other compression algorithms may be available via extensions. -.. _end-create-file-text: +.. _end-compress-file: Reading a file ~~~~~~~~~~~~~~ diff --git a/docs/asdf/overview.rst b/docs/asdf/overview.rst index 24d8040c6..3a5d6fa4a 100644 --- a/docs/asdf/overview.rst +++ b/docs/asdf/overview.rst @@ -38,10 +38,51 @@ save a :class:`dict` with the key/value pair ``'hello': 'world'``. Creating Files ============== +.. runcode:: hidden + + import asdf + import numpy as np + + # Create some data + sequence = np.arange(100) + squares = sequence**2 + random = np.random.random(100) + + # Store the data in an arbitrarily nested dictionary + tree = { + 'foo': 42, + 'name': 'Monty', + 'sequence': sequence, + 'powers': { 'squares' : squares }, + 'random': random + } + + # Create the ASDF file object from our data tree + af = asdf.AsdfFile(tree) + + # Write the data to a new file + af.write_to('example.asdf') + .. include:: ../../README.rst :start-after: begin-create-file-text: + :end-before: begin-example-asdf-metadata: + +.. asdf:: example.asdf no_blocks + +.. include:: ../../README.rst + :start-after: end-example-asdf-metadata: :end-before: end-create-file-text: +A rendering of the binary data contained in the file can be found below. Observe that +the value of ``source`` in the metadata corresponds to the block number (e.g. ``BLOCK 0``) +of the block which contains the binary data. + +.. asdf:: example.asdf no_header + +.. include:: ../../README.rst + :start-after: _begin-compress-file: + :end-before: _end-compress-file: + Reading Files ============= diff --git a/docs/sphinxext/example.py b/docs/sphinxext/example.py index 68639993d..3f2bf53cb 100644 --- a/docs/sphinxext/example.py +++ b/docs/sphinxext/example.py @@ -68,6 +68,9 @@ def run(self): cwd = os.getcwd() os.chdir(TMPDIR) + show_header = not ("no_header" in self.arguments) + show_bocks = not ("no_blocks" in self.arguments) + parts = [] try: ff = AsdfFile() @@ -79,59 +82,61 @@ def run(self): literal = nodes.literal_block(code, code) literal["language"] = "yaml" set_source_info(self, literal) - parts.append(literal) + if show_header: + parts.append(literal) kwargs = dict() # Use the ignore_unrecognized_tag parameter as a proxy for both options kwargs["ignore_unrecognized_tag"] = "ignore_unrecognized_tag" in self.arguments kwargs["ignore_missing_extensions"] = "ignore_unrecognized_tag" in self.arguments - with asdf.open(filename, **kwargs) as ff: - for i, block in enumerate(ff.blocks.internal_blocks): - data = codecs.encode(block.data.tobytes(), "hex") - if len(data) > 40: - data = data[:40] + "...".encode() - allocated = block._allocated - size = block._size - data_size = block._data_size - flags = block._flags - - if flags & BLOCK_FLAG_STREAMED: - allocated = size = data_size = 0 - - lines = [] - lines.append("BLOCK {0}:".format(i)) - - human_flags = [] - for key, val in FLAGS.items(): - if flags & key: - human_flags.append(val) - if len(human_flags): - lines.append(" flags: {0}".format(" | ".join(human_flags))) - if block.input_compression: - lines.append(" compression: {0}".format(block.input_compression)) - lines.append(" allocated_size: {0}".format(allocated)) - lines.append(" used_size: {0}".format(size)) - lines.append(" data_size: {0}".format(data_size)) - lines.append(" data: {0}".format(data)) - - code = "\n".join(lines) - code += "\n" - - literal = nodes.literal_block(code, code) - literal["language"] = "yaml" - set_source_info(self, literal) - parts.append(literal) - - internal_blocks = list(ff.blocks.internal_blocks) - if len(internal_blocks) and internal_blocks[-1].array_storage != "streamed": - buff = io.BytesIO() - ff.blocks.write_block_index(buff, ff) - block_index = buff.getvalue().decode("utf-8") - literal = nodes.literal_block(block_index, block_index) - literal["language"] = "yaml" - set_source_info(self, literal) - parts.append(literal) + if show_bocks: + with asdf.open(filename, **kwargs) as ff: + for i, block in enumerate(ff.blocks.internal_blocks): + data = codecs.encode(block.data.tobytes(), "hex") + if len(data) > 40: + data = data[:40] + "...".encode() + allocated = block._allocated + size = block._size + data_size = block._data_size + flags = block._flags + + if flags & BLOCK_FLAG_STREAMED: + allocated = size = data_size = 0 + + lines = [] + lines.append("BLOCK {0}:".format(i)) + + human_flags = [] + for key, val in FLAGS.items(): + if flags & key: + human_flags.append(val) + if len(human_flags): + lines.append(" flags: {0}".format(" | ".join(human_flags))) + if block.input_compression: + lines.append(" compression: {0}".format(block.input_compression)) + lines.append(" allocated_size: {0}".format(allocated)) + lines.append(" used_size: {0}".format(size)) + lines.append(" data_size: {0}".format(data_size)) + lines.append(" data: {0}".format(data)) + + code = "\n".join(lines) + code += "\n" + + literal = nodes.literal_block(code, code) + literal["language"] = "yaml" + set_source_info(self, literal) + parts.append(literal) + + internal_blocks = list(ff.blocks.internal_blocks) + if len(internal_blocks) and internal_blocks[-1].array_storage != "streamed": + buff = io.BytesIO() + ff.blocks.write_block_index(buff, ff) + block_index = buff.getvalue().decode("utf-8") + literal = nodes.literal_block(block_index, block_index) + literal["language"] = "yaml" + set_source_info(self, literal) + parts.append(literal) finally: os.chdir(cwd) From 11313980dbf9423163a8fdb3aa94b1b67ef3b585 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Mon, 6 Jun 2022 16:17:22 -0400 Subject: [PATCH 17/18] Update changes --- CHANGES.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index ea9e5ca8e..181a01913 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,10 @@ +2.12.1 (unreleased) +------------------- + +The ASDF Standard is at v1.6.0 + +- Overhaul of the ASDF documentation to make it more consistent and readable. [#1142] + 2.12.0 (2022-06-06) ------------------- From 2dbe52e86e2dd424cfc31214b3488ed11b9ea9d8 Mon Sep 17 00:00:00 2001 From: William Jamieson Date: Mon, 6 Jun 2022 16:31:33 -0400 Subject: [PATCH 18/18] Add zenodo citation badge --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index 000e57fc4..f855841ad 100644 --- a/README.rst +++ b/README.rst @@ -19,6 +19,9 @@ ASDF - Advanced Scientific Data Format .. image:: https://codecov.io/gh/asdf-format/asdf/branch/master/graphs/badge.svg :target: https://codecov.io/gh/asdf-format/asdf +.. image:: https://zenodo.org/badge/18112754.svg + :target: https://zenodo.org/badge/latestdoi/18112754 + .. image:: https://img.shields.io/pypi/l/asdf.svg :target: https://img.shields.io/pypi/l/asdf.svg