Ansys versioning tool#

Use the Ansys versioning tool to enforce version requirements for methods in classes. The requires_version decorator, available in the ansys.tools.versioning module, specifies the required version and version map. This decorator accepts the following:

  • The required version as a string ("<Major>.<Minor>.<Patch>") or a tuple ((<Major>, <Minor>, <Patch>)).

  • A version map in the form of a dictionary relating the required version to its Ansys unified installation. For example:

    VERSION_MAP = {("<Major>", "<Minor>", "<Patch>"): "<Release>"}
    

The requires_version decorator is expected to be used in all the desired methods of a class containing a _server_version attribute. If the class in which the decorator is used does not contain this attribute, an AttributeError is raised.

The following example declares a generic Server class and a VERSION_MAP dictionary:

VERSION_MAP = {
    (0, 2, 3): "2021R1",
    (0, 4, 5): "2021R2",
    (0, 5, 1): "2022R1",
}


class Server:
    """A basic class for modeling a server."""

    def __init__(self, version):
        """Initializes the server."""
        self._server_version = version

    @requires_version("0.2.0", VERSION_MAP)
    def old_method(self):
        pass

    @requires_version("0.5.1", VERSION_MAP)
    def new_method(self):
        pass

Suppose you create two servers using the previous class. Because each server uses a different version, some methods are available on both servers while other methods are not:

>>> old_server = Server("0.4.5")  # Can use "old_method" but not "new_method"
>>> new_server = Server("0.5.5")  # Can use "old_method" and "new_method"

If you run each of these methods, both instances execute old_method without any issues:

>>> for server in [old_server, new_server]:
...     server.old_method()
...

However, when you run new_method, the old server raises a VersionError exception. This exception indicates that the method requires a higher server version than the one available:

>>> new_server.new_method()
>>> old_server.new_method()
ansys.tools.versioning.exceptions.VersionError: Class method ``new_method`` requires server version >= 2022R1.