All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project follows an extension of Semantic Versioning, where a bump in a fourth number represents an administrative maintenance release with no code changes.
- The
super
keyword used in a statement in the HTML footer template was missing parentheses to perform a method call; this caused the template rendering to emit a Python string describing the parent template object, instead of rendering the parent template as intended. (#298)
- Update test machinery for the shell examples in the README, downstream of the conversion to Markdown (#289).
-
Added formal support for Python 3.12.
-
Removed formal support for Python 3.7, which is end-of-life.
-
Bump
checkout
andsetup-python
GitHub Actions versions (#289). -
Fix some broken/redirecting docs links (#289).
-
Adjust
flake8
configuration to account for some new lint warnings/errors (#289).
-
The printout of the inferred
intersphinx_mapping
item for inventories retrieved by URL (--url
) in the 'suggest' CLI mode is now relocated to fall immediately below the inventory-search output. It also now is displayed even if no objects in theobjects.inv
satisfy the score threshold. (#262) -
The 'suggest' CLI mode output now includes dividers for improved readability.
-
The plaintext
tests/resource/objects_attrs.txt
was converted to POSIX EOLs and declared as binary to git, in order to provide a consistent state for sdist packaging, regardless of platform (POSIX vs Windows).-
As a result, it was necessary to modify the
scratch_path
fixture to "unix2dos
" this file on Windows systems, in order to provide a consistent test state. -
Similarly, the
decomp_cmp_test
fixture was modified to "unix2dos
" theobjects_attrs.txt
resource before comparisons, again in order to provide a consistent reference artifact. Implementing required direct manipulation of the bytes contents of the file, instead of thefilecmp.cmp
method that had been used previously.
-
-
The README doctests and shell tests have been removed from the default pytest suite. They must be explicitly opted-in with the
--readme
and--doctest-glob="README.rst"
flags to pytest.- A new job,
readme
, has been added to theaux_tests
stage of the Azure Pipelines CI to run these tests for PRs and release branches.
- A new job,
-
The constraint for
pytest-check
was bumped to>=1.1.2
and all uses of thecheck
fixture were revised fromwith check.check(...):
towith check(...):
. (#265) -
Azure Pipelines now has Python 3.11 available for all of Ubuntu, Windows and MacOS, so it was added to the core text matrix for all platforms.
-
A new CI job was created on Azure Pipelines that creates an sdist from the current project, extracts it into a sandboxed environment, installs the dev dependencies, and runs the pytest suite (
azure-sdisttest.yml
). -
All uses of
pytest-check
were updated to use the v1.1.2 syntax (check
fixture, orfrom pytest_check import check
).
- The
sys.exit()
in the case of no objects falling above the 'suggest' search threshold was refactored into the maindo_suggest()
body, to minimize the surprise of anexit()
call coming in a subfunction. (#263)
MANIFEST.in
was revised in order to provide a testable (pytest --nonloc
) sdist, in order to streamline packaging ofsphobjinv
for conda-forge. (Thanks very much to @anjos for getting the recipes forsphobjinv
and its dependencies in place! See #264.)
-
sphobjinv
is now available via conda-forge! A note was added to the docs to indicate this. -
The version bump on
pytest-check
no longer permits the use of Python 3.6 in CI. As Python 3.6 is nearly a year beyond EOL, this seems a reasonable time to officially drop support for it.python_requires
will still be at>=3.6
for now; it should still work for 3.6...but, no guarantees. -
The hook versions for
pre-commit-hooks
,black
, andpyproject-fmt
were updated to v4.3, v22.10, and v0.3.5, respectively. -
CONTENT_LICENSE.txt
was created, to specifically house the full content/documentation license information. -
LICENSE.txt
was revised to only hold the MIT License for the code, primarily so that Github's automatic systems will recognize the project as MIT licensed. -
Caching of pip downloads was added to all of the Azure Pipelines jobs.
-
The version constraint for
pytest-check
was raised to>=1.1.2
. -
A temporary upper bound was placed on the
flake8
version (now>=5,<6
, instead of>=5
) to avoid pip resolver failures likely due to conflicts with constraints declared by plugins. -
The older versions of
jsonschema
tested in thetox
matrix were streamlined down to 3.0 (==3.0
), 3.x (<4
), 4.0 (<4.1
) and 4.8 (<4.9
). -
The pin of
sphinx-issues==0.4.0
in thetox
matrix was removed, to match the unpinned package in therequirements-xxx.txt
files.
-
The CLI now prints the project name and version for the
objects.inv
as part of the 'suggest' mode output. -
The CLI now prints an inferred
intersphinx_mapping
entry for a remote docset as part of the 'suggest' mode output, where such inference is possible. The output from this mapping inference was added to the relevant tests, and a couple of unit tests on some basic pieces of functionality were written. (#149) -
The CLI now provides considerably more information about what is happening with the URLs it checks when trying to retrieve a remote inventory. (#99, plus more)
-
CLI 'suggest' results output now displays more information about the total number of objects in the inventory, the search score threshold, and the number of results falling at/above that threshold. (#232)
-
A new CLI option,
-p
/--paginate
, enables paging of the results from thesuggest
feature. (#70)
-
The regex for parsing object lines from decompressed inventories now correctly processes
{role}
values that contain internal colons. -
CLI corner case where options are passed but no subparser is specified now results in a clean error-exit, instead of an exception. (#239)
-
Updated doctests to reflect the new v22.1 attrs
objects.inv
used for demonstration purposes. -
Updated
syntax.rst
to indicate that the{role}
in an inventory object MAY contain a colon. -
Added new 'CLI implementation' pages for the new modules, downstream of the refactoring of the CLI 'convert' and 'suggest' code.
-
Revised the intro paragraph of the 'CLI usage' page to more clearly emphasize the two CLI subcommands and the links to their respective docs pages.
-
Fixed a mistake in the CLI help info for the
--url
argument toconvert
.
-
Various tests were updated to reflect the contents of the new v22.1 attrs
objects.inv
introduced to replace the previous v17.2 inventory. -
A modern Sphinx
objects.inv
(v6.0.0b) was added totests/resource
asobjects_sphinx.inv
, and the previous v1.6.6 was renamed toobjects_sphinx_1_6_6.inv
. -
The 'valid objects' test cases were updated to reflect the possibility for a colon within
{role}
:-
The colon-within-
{role}
test case was moved from 'invalid' to 'valid'. -
The colon-within-
{domain}
test case was also moved from 'invalid' to 'valid', but with an annotation added to indicate that it's not actually viable---it will actually be interpreted incorrectly, with the first portion of the colon-containing{domain}
imported as{domain}
, and the remainder imported as part of{role}
.
-
-
Refactor CLI code to place the 'convert' and 'suggest' implementations in their own modules.
-
Refactor CLI 'suggest' code to the main
do_suggest()
function and a handful of sub-functions. -
Rename the
log_print()
CLI helper function to the more-descriptiveprint_stderr()
. -
Bump development Sphinx version to v5.3.
-
Bump flake8 version to >=5, due to the absorption of flake8-colors colorization functionality. The flake8/tox config was updated accordingly.
-
Bump pre-commit black hook to v22.3.0.
-
Remove PyPy and Python 3.6 from Azure Pipelines test matrix.
-
Revise
__version__
retrieval insetup.py
to use an intermediate dictionary withexec()
. -
Update
setup.cfg
to uselicense_files
, instead of the deprecatedlicense_file
.
- Apply CC BY 4.0 to documentation and docstrings and update project files to reflect.
-
UnicodeDecodeErrors are ignored within the vendored
fuzzywuzzy
package duringsuggest
operations, using theerrors=replace
mode within bytes.decode().-
This misbehavior emerged after vendoring
fuzzywuzzy
, suggesting that it was a bug fixed later on in that project's development, after the point from which it was vendored. -
This change may alter
suggest
behavior for those inventory objects with pathological characters. But, given their rarity, user experience is not expected to be noticeably affected.
-
-
The
pyproject-fmt
formatted was added as a pre-commit hook. -
The
flake8-raise
plugin was added to the linting suite.
- A smoke test for error-free
suggest
execution was added for all of the inventory files intests/resource
.
- The
benchmarks.py
file within the vendored version offuzzywuzzy
was removed. This should have no effect onsphobjinv
functionality.- Per #223, the
Python 2 code within
benchmarks.py
breaks a full-source compilation done as part of an RPM packaging workflow.
- Per #223, the
Python 2 code within
-
The project documentation has been updated to reflect the deprecation of the
python-Levenshtein
speedup. -
pre-commit
has been added to the project, primarily to automateblack
code formatting on every commit.- The default trailing-whitespace, end-of-file, YAML syntax, and large-file-prevention hooks have also been added.
sphinx-removed-in
was added as a dev and RTD dependency, to provide theversionremoved
Sphinx directive.
- Acceleration of the
suggest
functionality via use ofpython-Levenshtein
is no longer possible due to the vendoring of an early, MIT-licensed version offuzzywuzzy
, as noted below. Thespeedup
install extra is now obsolete, and has been removed.
- The
fuzzywuzzy
string matcher was vendored into the project from a point in its development history before thepython-Levenshtein
dependency, and its corresponding GPL encumbrance, was introduced.
-
Project default branch migrated to
main
frommaster
. -
Standard development Python version bumped to 3.10.
-
Standard development Sphinx version bumped to 4.3.1.
-
Active support for Python 3.11 added.
- Python 3.10 support was officially added.
-
The User-Agent header sent by
Inventory
when making an HTTP(S) request now identifiessphobjinv
and its version (anticipate no API or behavior change). -
An extraneous newline was removed before tables printed in the 'suggest' CLI mode (cosmetic change).
- Previously,
sphobjinv.Inventory
would ignore entries inobjects.inv
that contained spaces withinname
(see #181); this is now fixed.
-
Python 3.5 is no longer supported.
-
The relaxation of the integer constraint on the
priority
field introduced in v2.1b1 has been reverted, asobjects.inv
data lines with such non-integerpriority
values are skipped by Sphinx.
-
Where possible, string interpolation has been refactored to use f-strings.
-
A 'speedup'
extras_require
entry has been added to allow simple installation ofpython-Levenshtein
for Linux and MacOS platforms, aspip install sphobjinv[speedup]
. This extra does nothing on Windows, since compilation machinery is anticipated not to be available for most users. -
objects_mkdoc_zlib0.inv
, which was compressed atzlib
level 0, has been added to the test resources directory. -
This file had to be flagged as binary in
.gitattributes
in order to avoid git EOL auto-conversion on Windows. -
The CLI functionality was refactored from the single
sphobjinv.cmdline
module into a dedicated set ofsphobjinv.cli.*
submodules. -
Some internal
type(...) is ...
checks were replaced withisinstance(...)
-
Added significant body of new tests to confirm inventory compatibility with both
sphobjinv
and Sphinx itself.-
Consistency checks added both for data within
sphobjinv.Inventory
instances AND as emitted fromsphinx.ext.inventory.InventoryFile.load()
. -
The tests in
tests/test_valid_objects.py
strive to bracket as precisely as possible what content is allowed on anobjects.inv
data line, in addition to providing guidance on what is allowable, but discouraged.docs/source/syntax.rst
was also edited to reflect this guidance.
-
-
Additional tests have been added to probe corner cases involving Windows EOLs.
-
A test was added to ensure that the schema in
sphobjinv.schema
is in fact a valid JSON schema. -
Multiple asserts/checks per test method have been converted to use
pytest-check
instead ofpytest-subtests
, due to some inconsistent behavior with the latter. -
tox
environments and dependencies were updated, and some flake8 configuration was adjusted.
-
Standard development Python version bumped to 3.9.
-
Standard development Sphinx version bumped to 3.5.0.
-
Added
[skip ci]
flag in commit text for skipping Github Actions CI. -
RtD upgraded to use Python 3.8.
-
Added 'radio Sphinx' logo to RtD docs.
-
Drafted
CONTRIBUTING.md
and added PR & issue templates. -
Tranferred most project metadata from
setup.py
tosetup.cfg
.
-
Equality tests on Inventory and DataObjStr/DataObjBytes instances now work correctly.
-
Non-integer and non-numeric values for
priority
are now accepted duringInventory
instantiation, consistent with what is allowed byDataObjStr
andDataObjBytes
instantiation.
- When an inventory is retrieved via CLI from a remote URL with
-u
, the resolved location of the inventory is included in generated JSON atjson_dict.metadata.url
.
- CLI logging messages are now emitted to stderr instead of stdout.
-
A hyphen can now be passed as the CLI input and/or output file name to instruct sphobjinv to use stdin and/or stdout, respectively.
-
The
fileops
andinventory
APIs are now tested to work with both strings andpathlib.Path
objects, where they interact with the filesystem.
- Patterns in regular expressions are now defined with raw strings to improve readability.
-
attr.s usage on Inventory changed to use eq=False where possible, per the deprecation of the cmp argument.
-
URL inventory retrieval now sends a User-Agent header, to avoid 403 FORBIDDEN errors on some docs servers.
- Sphinx can generate inventories with empty-string values for
project
andversion
;sphobjinv
now can import such inventories without error.
- Loading remote inventories from the CLI now will perform an automatic walk along the directory structure of the provided URL, searching for the objects.inv file of the documentation set.
- The above URL walking functionality is exposed for API use at sphobjinv.fileops.urlwalk.
- Instances of DataObjStr and DataObjBytes are NO LONGER IMMUTABLE. Working with Inventory instances was going to be far too cumbersome with immutable DataObjStr instances in .objects.
- API code no longer contains any
sys.exit
calls; CLI interactions should now be properly segregated from the internal API.
- API
- Data for individual objects encapsulated in the new
.data.DataObjStr
and .data.DataObjBytes
classes- Instances of these objects provide granular access to the contained data
- Instances are immutable, but expose an
evolve()
method for creating new, (optionally) modified instances.
- Data for individual objects encapsulated in the new
- Entire inventory contents, as a
list
ofDataObjStr
, encapsulated in.inventory.Inventory
instancesInventory
instances are anticipated to be the primary point of user interface to inventory data.suggest()
method added, exploiting fuzzy string searching byfuzzywuzzy
for rapid searching of inventories for objects of interest- Import of remote
objects.inv
files viaurllib.request
andcertifi
implemented.
- Helper methods are provided for working with the
objects.inv
shorthands for object URI and display-name information, on bothDataObj...
andInventory
instances. readjson
/writejson
helper functions added to.fileops
- JSON schema added to
.schema
for use withjsonschema
to validate incoming data duringInventory
instantiation from JSON - Command-line interface
- Add
suggest
subparser, for recommendation of matching objects within an input inventory - Add ability to read and write JSON inventories
- Add ability to use a remote
objects.inv
file (arbitrary filename) as input, specified by URL - Add arguments to:
- Expand/contract the
objects.inv
URI and 'display name' abbreviations - Force overwrite of an existing output file without prompting
- Silence all output (mainly intended for scripting applications); includes automatic overwriting of an existing output file
- Various arguments to control the output of a
sphobjinv suggest
invocation
- Expand/contract the
- Add
readfile
/writefile
changed toreadbytes
/writebytes
and moved to new.fileops
submoduledecode
/encode
changed todecompress
/compress
and moved to new.zlib
submodulep_data
/p_comments
regex patterns renamed withpb_
prefix to indicate they arebytes
, notstr
patterns- CLI
- Commands for (de)compressing
objects.inv
files changed to a more generalconvert
subparser, due to addition of JSON output option - Default filename/extension assumptions removed from input file argument, as multiple input formats make the logic here complicated enough it's not worth messing with
- Commands for (de)compressing
- Flexible commandline encode and decode of objects.inv files, in terms of file names and input/output locations
- Programmatic conversion via API is available, but potentially buggy due to poor segregation of cmdline behaviors. This is to be fixed.