AnyPath Polymorphic Class¶
cloudpathlib implements a special
AnyPath polymorphic class. This class will automatically instantiate a cloud path instance or a
pathlib.Path instance appropriately from your input. It's also a virtual superclass of
issubclass checks will work in the expected way.
This functionality can be handy for situations when you want to support both local filepaths and cloud storage filepaths. If you use
AnyPath, your code can switch between them seamlessly based on the contents of provided filepaths without the need of any
else conditional blocks.
from cloudpathlib import AnyPath path = AnyPath("mydir/myfile.txt") path #> PosixPath('mydir/myfile.txt') cloud_path = AnyPath("s3://mybucket/myfile.txt") cloud_path #> S3Path('s3://mybucket/myfile.txt') isinstance(path, AnyPath) #> True isinstance(cloud_path, AnyPath) #> True
How It Works¶
The constructor for
AnyPath will first attempt to run the input through the
CloudPath base class' constructor, which will validate the input against registered concrete
CloudPath implementations. This will accept inputs that are already a cloud path class or a string with the appropriate URI scheme prefix (e.g.,
s3://). If no implementation validates successfully, it will then try to run the input through the
Path constructor. If the
Path constructor fails and raises a
TypeError, then the
AnyPath constructor will raise an
The virtual superclass functionality with
issubclass with the
__subclasscheck__ special methods per PEP 3119's specification.
Examples created with reprexlite