|
| 1 | +============= |
| 2 | +Compatibility |
| 3 | +============= |
| 4 | + |
| 5 | +``referencing`` is currently in beta so long as version numbers begin with a ``0``, meaning its public interface may change if issues are uncovered, though not typically without reason. |
| 6 | +Once it seems clear that the interfaces look correct (likely after ``referencing`` is in use for some period of time) versioning will move to `CalVer <https://calver.org/>`_ and interfaces will not change in backwards-incompatible ways without deprecation periods. |
| 7 | + |
| 8 | +In the spirit of `having some explicit detail on Bowtie's public interfaces <regret:before-you-deprecate:document your public api>`, here is a non-exhaustive list of things which are *not* part of the ``referencing`` public interface, and therefore which may change without warning, even once no longer in beta: |
| 9 | + |
| 10 | +* All commonly understood indicators of privacy in Python -- in particular, (sub)packages, modules and identifiers beginning with a single underscore. |
| 11 | + In the case of modules or packages, this includes *all* of their contents recursively, regardless of their naming. |
| 12 | +* All contents in the ``referencing.tests`` package unless explicitly indicated otherwise |
| 13 | +* The precise contents and wording of exception messages raised by any callable, private *or* public. |
| 14 | +* The precise contents of the ``__repr__`` of any type defined in the package. |
| 15 | +* The ability to *instantiate* exceptions defined in `referencing.exceptions`, with the sole exception of those explicitly indicating they are publicly instantiable (notably `referencing.exceptions.NoSuchResource`). |
| 16 | +* The instantiation of any type with no public identifier, even if instances of it are returned by other public API. |
| 17 | + E.g., `referencing._core.Resolver` is not publicly exposed, and it is not public API to instantiate it in ways other than by calling `referencing.Registry.resolver` or an equivalent. |
| 18 | + All of its public attributes are of course public, however. |
| 19 | +* Any identifiers in any modules which are imported from other modules. |
| 20 | + In other words, if ``referencing.foo`` imports ``bar`` from ``referencing.quux``, it is *not* public API to use ``referencing.foo.bar``; only ``referencing.quux.bar`` is public API. |
| 21 | + This does not apply to any objects exposed directly on the ``referencing`` package (e.g. `referencing.Resource`), which are indeed public. |
| 22 | +* Subclassing of any class defined throughout the package. |
| 23 | + Doing so is not supported for any object, and in general most types will raise exceptions to remind downstream users not to do so. |
| 24 | + |
| 25 | +If any API usage may be questionable, feel free to open a discussion (or issue if appropriate) to clarify. |
0 commit comments