From 4d47315cc02d9c9cc87ce1a608a39b967cdb1a09 Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 17 Apr 2024 10:53:20 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20exasol/b?= =?UTF-8?q?ucketfs-python@631ed3f1c022f53b0f0f7c6bf27cc7c36dd04322=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .doctrees/api.doctree | Bin 92254 -> 92565 bytes .doctrees/changes/unreleased.doctree | Bin 7803 -> 8223 bytes .doctrees/environment.pickle | Bin 2201864 -> 2206095 bytes _modules/exasol/bucketfs/_buckets.html | 82 +++++++++++++++++++++++++ _sources/changes/unreleased.md.txt | 6 +- api.html | 1 + changes/unreleased.html | 8 ++- searchindex.js | 2 +- 8 files changed, 94 insertions(+), 5 deletions(-) diff --git a/.doctrees/api.doctree b/.doctrees/api.doctree index 23b4b8bfd8a9c1cd4b733d594c331f4978a6c608..cb55e9cf13daa96edc4ac7ca2733185c1d4556d6 100644 GIT binary patch delta 9277 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 BsfGXm delta 9380 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 Jef@Ad{0BCM-^2g_ diff --git a/.doctrees/changes/unreleased.doctree b/.doctrees/changes/unreleased.doctree index 095a388ef6e0914cb32091d96ab34acb39f230eb..7b3659960c334019527fc2734a1d5e61292690ff 100644 GIT binary patch delta 1134 zcmbtUT}TvB6!wlgIy1YDuI{d~JFc^8WV)K0Wl^CSg_tH4BvKfyyCc`}XP0p%ERYO} z5H`}z_SA#@Kp;pU+iUgKLnLfZy@@46AVIza5k&XS&g4%$)yv_Y@0{~}_q%hLA4lhp zvD55*kG#Z2n9MsXP`M0MN)r-cx3LioCHa#Gi#F`X0#jo65y%fsWkq76l33Oyy{<0jfO zJfg@+Eukl3iP0vZYb-gcj47lup5vqCp@e2}Ovr=L2~tXo|8+b~uU&_Ispbyxk86d| z3S1MepfAMHVRjt{@MmatPNMIy;A|-RgoE9FT#3U3Ux5!!AL)L@NM~25V_eybgT2JJ zFSY+)Y^86db1zG|3G0BxO4Negc_we$e>&f)@UpOpx4kSwmaF3{EN5@PEy^(M^0FoZ zZ@D8-F8T#Eg7WgzeI&pg*8_A4X5EcN#pH5Txk0rPVns=GiQ*KJ&EvV}8Y40OFAzy4Y;6;z&kyL+SFGU?a~e0AqiSbnS7jgi1vs{4O#lD@ delta 839 zcmZuvKWGzC7|(Y#nkKpQ&TG#!$(?sKLTu8bQLG9@tEHfJ=~PkDp_1U^&=70V*ovrw zXf%WNyDmCp7eq=H7iVcv8gvjRiGv^({|t3#9enR{DTj9Xc=!GOec!uR8`&K8-u5mQ z)Fp44gG7CZtL?$AbS(pZRJhgbtzcqb}eCu8DE<3kAq5 zND*8VbjUI_KTk<}9d!nO39%L-A?h%@4IwWjg*N^CzhP~Fh1~~SkYf0F_a1n<<)b-4 zXa`ZkA$YzG$U@rGN3Ib3*cF7HtRVHk7oyMi+O7X2w)MAq zF2N5bv#+nuk*&GO%Mv5!rF~H|PW$G5T1q5Ij=QeaK$J&8seh1XI2f*MTP5lgVs5GqV&N7+C54;zm>yK#*`X{3XZA$7i5kmN~|PV zc7l}<`wY-hs&?k5ujGnzh1@mvnoY*8*vyK}s+5S%`pkd?Z8aINrKV9|Rwv;vq@Dc^ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index 3055a667a6f5176baa66b94a2c0c69a9a97820e9..2bfc996e39e736df1df560fc0d053d0863905f1f 100644 GIT binary patch delta 18440 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 delta 14863 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 V6^{Source code for exasol.bucketfs._buckets
     ByteString,
     Iterable,
     Iterator,
+    Protocol,
 )
 
 import requests
@@ -241,7 +242,88 @@ 

Source code for exasol.bucketfs._buckets

 )
 
 
+class BucketLike(Protocol):
+    """
+    Definition of the Bucket interface.
+    It is compatible with both on-premises an SaaS BucketFS systems.
+    """
+
+    @property
+    def files(self) -> Iterable[str]:
+        """
+        Returns an iterator over the bucket files.
+
+        A usage example:
+        print(list(bucket_api.files))
+        output:
+        [dir1/subdir1/file1.dat, dir1/subdir2/file2.txt, ....]
+
+        Note that the paths will look like in the example above, i.e. POSIX style,
+        no backslash at the start or at the end.
+        """
+
+    def delete(self, path: str) -> None:
+        """
+        Deletes a file in the bucket.
+
+        :param path:    Path of the file to be deleted.
+
+        Q. What happens if the path doesn't exist?
+        A. It does nothing, no error.
+
+        Q. What happens if the path points to a directory?
+        A. Same. There are no directories as such in the BucketFS, hence
+           a directory path is just a non-existent file.
+        """
+
+    def upload(self, path: str, data: ByteString | BinaryIO) -> None:
+        """
+        Uploads a file to the bucket.
+
+        :param path:    Path in the bucket where the file should be uploaded.
+        :param data:    Either a binary array or a binary stream, e.g. a file opened in the binary mode.
+
+        Q. What happens if the parent is missing?
+        A. The bucket doesn't care about the structure of the file's path. Looking from the prospective
+           of a file system, the bucket will create the missing parent, but in reality it will just
+           store the data indexed by the provided path.
+
+        Q. What happens if the path points to an existing file?
+        A. That's fine, the file will be updated.
+
+        Q. What happens if the path points to an existing directory?
+        A. The bucket doesn't care about the structure of the file's path. Looking from the prospective
+           of a file system, there will exist a file and directory with the same name.
+
+        Q. How should the path look like?
+        A. It should look like a POSIX path, but it should not contain any of the NTFS invalid characters.
+           It can have the leading and/or ending backslashes, which will be subsequently removed.
+           If the path doesn't conform to this format an BucketFsError will be raised.
+        """
+
+    def download(self, path: str, chunk_size: int = 8192) -> Iterable[ByteString]:
+        """
+        Downloads a file from the bucket. The content of the file will be provided
+        in chunks of the specified size. The full content of the file can be constructed using
+        code similar to the line below.
+        content = b''.join(api.download_file(path))
+
+        :param path:        Path of the file in the bucket that should be downloaded.
+        :param chunk_size:  Size of the chunks the file content will be delivered in.
+
+        Q. What happens if the file specified by the path doesn't exist.
+        A. BucketFsError will be raised.
+
+        Q. What happens if the path points to a directory.
+        A. Same, since a "directory" in the BucketFS is just a non-existent file.
+        """
+
+
 
[docs]class Bucket: + """ + Implementation of the On-Premises bucket. + """ +
[docs] def __init__( self, name: str, diff --git a/_sources/changes/unreleased.md.txt b/_sources/changes/unreleased.md.txt index c23a1406..eaea2280 100644 --- a/_sources/changes/unreleased.md.txt +++ b/_sources/changes/unreleased.md.txt @@ -21,9 +21,11 @@ logging.basicConfig(level=logging.INFO) ``` -- Support for viewing BucketFS as a directory + - Support for viewing BucketFS as a directory - Added the Pathlike protocol as described in the [design document](../design/bucketpath.rst). + Added the PathLike protocol as described in the [design document](../design/bucketpath.rst). + Extracted bucket interface into BucketLike protocol. + Implemented PathLike for buckets based on BucketLike protocol. ## Internal diff --git a/api.html b/api.html index 17a944be..9ccadc35 100644 --- a/api.html +++ b/api.html @@ -268,6 +268,7 @@

exasol.bucketfs.Bucket class exasol.bucketfs.Bucket(name: str, service: str, username: str, password: str, verify: bool | str = True)[source]#

Bases: object

+

Implementation of the On-Premises bucket.

__init__(name: str, service: str, username: str, password: str, verify: bool | str = True)[source]#
diff --git a/changes/unreleased.html b/changes/unreleased.html index 1f41e70d..4eb39029 100644 --- a/changes/unreleased.html +++ b/changes/unreleased.html @@ -240,9 +240,13 @@

Added# logging.basicConfig(level=logging.INFO)

- + diff --git a/searchindex.js b/searchindex.js index d6b83189..30310ead 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api", "changes/changelog", "changes/changes_0.1.0", "changes/changes_0.2.0", "changes/changes_0.3.0", "changes/changes_0.4.0", "changes/changes_0.5.0", "changes/changes_0.6.0", "changes/changes_0.7.0", "changes/changes_0.8.0", "changes/changes_0.9.0", "changes/unreleased", "design/bucketpath", "design/design", "developer_guide/developer_guide", "index", "user_guide/advanced", "user_guide/basics", "user_guide/upload_github_release_to_bucket", "user_guide/user_guide"], "filenames": ["api.rst", "changes/changelog.md", "changes/changes_0.1.0.md", "changes/changes_0.2.0.md", "changes/changes_0.3.0.md", "changes/changes_0.4.0.md", "changes/changes_0.5.0.md", "changes/changes_0.6.0.md", "changes/changes_0.7.0.md", "changes/changes_0.8.0.md", "changes/changes_0.9.0.md", "changes/unreleased.md", "design/bucketpath.rst", "design/design.rst", "developer_guide/developer_guide.rst", "index.rst", "user_guide/advanced.rst", "user_guide/basics.rst", "user_guide/upload_github_release_to_bucket.rst", "user_guide/user_guide.rst"], "titles": ["\ud83e\uddf0 API Reference", "\ud83d\udcdd Changes", "BucketFs Utils Python 0.1.0, released 2022-01-18", "BucketFs Utils Python 0.2.0, released 2022-04-29", "BucketFs Utils Python 0.3.0, released 2022-07-20", "BucketFs Python 0.4.0, released 2022-09-28", "BucketFs Python 0.5.0, released 2022-10-12", "BucketFs Python 0.6.0, released 2022-11-11", "BucketFs Python 0.7.0, released 2022-12-22", "BucketFs Python 0.8.0, released 2023-03-21", "BucketFs Python 0.9.0, released 2024-02-16", "Unreleased", "Design Document Bucket Path(s)", "\ud83d\udcd1 Design Documents", "\ud83d\udee0 Developer Guide", "Exasol Bucketfs", "Advanced", "Basic\u2019s", "Github Artifacts", "\ud83d\udc64 User Guide"], "terms": {"class": [0, 12], "url": [0, 5, 16, 17, 19], "str": [0, 12], "credenti": [0, 12, 16, 17, 19], "map": 0, "none": [0, 5, 12], "verifi": 0, "bool": [0, 12], "true": [0, 12], "sourc": [0, 3, 4, 18], "base": [0, 12], "object": [0, 2, 12, 16, 17], "provid": [0, 2, 7, 12, 16, 17], "simpl": [0, 12], "us": [0, 3, 7, 9, 11, 12, 17, 18], "access": [0, 6, 12], "list": [0, 3, 4, 6, 12, 15, 19], "all": [0, 6, 12, 15, 16, 19], "avail": [0, 6, 7, 19], "__init__": [0, 12], "creat": [0, 12], "new": [0, 3, 5, 7, 12, 14], "instanc": 0, "paramet": [0, 12], "e": [0, 9, 12], "g": [0, 9, 12], "http": [0, 12, 16, 17, 18, 19], "": [0, 5, 7, 13, 15, 18, 19], "127": [0, 12], "0": [0, 1, 11, 12, 14, 16, 17, 19], "1": [0, 1, 5, 11, 12, 16], "2580": 0, "A": [0, 12, 17], "contain": [0, 2, 17], "usernam": [0, 16, 17, 19], "password": [0, 16, 17, 18, 19], "bucket1": 0, "foo": 0, "bar": 0, "either": [0, 12], "boolean": 0, "which": [0, 7, 12, 14, 16, 17], "case": [0, 11, 12, 16, 17], "control": 0, "whether": 0, "we": [0, 3, 9, 12], "server": 0, "tl": [0, 10], "certif": 0, "string": [0, 2, 3, 5, 12, 16, 17], "must": [0, 12, 14], "path": [0, 3, 4, 5, 13, 16, 17, 18], "ca": 0, "bundl": 0, "default": [0, 12, 16, 17, 19], "properti": [0, 12], "mutablemap": 0, "name": [0, 2, 3, 4, 5, 12], "where": [0, 12, 16], "thi": [0, 2, 3, 4, 7, 12, 16, 17, 18, 19], "i": [0, 2, 4, 7, 12, 15, 16, 19], "host": [0, 17, 18], "authent": 0, "delet": [0, 3, 12, 14, 15, 19], "specif": [0, 3, 12], "file": [0, 2, 3, 12, 15, 18, 19], "point": [0, 12], "shall": [0, 12], "rais": [0, 12], "oper": [0, 12], "couldn": 0, "t": [0, 12], "execut": [0, 12], "successfulli": [0, 12, 14], "download": [0, 2, 15, 19], "chunk_siz": [0, 12], "int": [0, 12], "8192": [0, 12], "iter": [0, 12, 17], "bytestr": [0, 12], "return": [0, 12], "an": [0, 5, 12, 17, 18], "binari": 0, "chunk": [0, 12, 17], "repres": [0, 12], "upload": [0, 2, 4, 14, 15, 18, 19], "data": [0, 12, 16, 17, 19], "binaryio": [0, 12], "onto": 0, "associ": [0, 12], "raw": [0, 16, 17], "content": [0, 12, 16, 17, 19], "transform": 0, "set": [0, 12, 16, 17], "byte": [0, 16, 17], "like": [0, 9, 12, 16, 17], "concaten": 0, "singl": [0, 17], "continu": 0, "encod": [0, 16, 17], "utf": [0, 16, 17], "8": [0, 1, 4, 15, 16, 17], "convert": [0, 12], "represent": 0, "filenam": [0, 12, 16, 17], "written": 0, "algorithm": 0, "sha1": 0, "calcul": 0, "hash": 0, "input": [0, 5], "checksum": 0, "hex": 0, "digest": 0, "wrap": 0, "variou": [0, 12], "conveni": [0, 16], "featur": [0, 12, 16], "index": 0, "even": [0, 12, 16], "though": [0, 16], "veri": [0, 16], "interfac": 0, "function": [0, 12, 18], "should": [0, 11, 12, 16, 17], "care": 0, "mai": [0, 12, 16, 17], "obviou": [0, 16], "do": [0, 7, 12, 16], "involv": [0, 16], "interact": [0, 15, 16, 17], "background": [0, 16], "sync": [0, 16], "etc": [0, 12, 16], "keep": [0, 17], "mind": 0, "when": [0, 12, 17], "size": 0, "except": [0, 12], "arg": [0, 12], "kwarg": [0, 12], "error": [0, 12], "occur": 0, "while": [0, 12], "f": [0, 12, 16, 17], "unreleas": 1, "9": 1, "7": [1, 2], "6": [1, 2, 19], "5": [1, 19], "4": [1, 6, 10, 11, 14, 19], "3": [1, 12, 15, 16, 19], "2": [1, 5, 16, 19], "code": [2, 3, 4, 7, 8, 12], "initi": 2, "implement": [2, 12], "version": [2, 3, 4, 5, 9, 10, 14], "It": [2, 12, 16], "allow": [2, 12], "you": [2, 16, 18], "from": [2, 3, 4, 11, 12, 14, 15, 18, 19], "insid": 2, "udf": [2, 4, 5, 12], "altern": 2, "can": [2, 11, 12, 15, 17, 18, 19], "read": [2, 12], "also": [2, 12, 19], "local": [2, 12, 14], "bucket": [2, 3, 4, 5, 6, 13, 15, 18, 19], "system": [2, 10, 11, 12], "ad": [2, 3, 4, 5, 6, 8, 10, 12], "fileobj": 2, "fileboj": 2, "29": 2, "add": [2, 4, 6, 7, 8, 12], "sphinx": 2, "13": 2, "joblib": 2, "obj": 2, "languag": 2, "45": 2, "droid": 2, "github": [2, 10, 14, 19], "workflow": [2, 10, 12, 14], "prepar": [2, 5], "49": 2, "complaint": 2, "regard": [2, 12, 17], "changelog": [2, 14], "47": 2, "15": 2, "remov": [2, 3, 4, 7, 12], "dephel": 2, "depend": [2, 7, 8, 11, 12, 17, 19], "becaus": [2, 3], "maintain": [2, 12], "anymor": 2, "42": 2, "move": 2, "locat": [2, 12], "over": [2, 12], "exasol_data_science_utils_python": 2, "n": 2, "method": [3, 4, 5, 12], "introduc": [3, 12], "two": [3, 12], "certain": 3, "under": 3, "furthermor": [3, 4], "numpi": [3, 4], "build": [3, 4, 11], "against": 3, "buffer": 3, "overflow": 3, "vulner": [3, 7, 9], "55": 3, "61": 3, "54": 3, "posixpath": 3, "convers": 3, "alter": 3, "session": 3, "58": [3, 9], "type": [3, 12], "hint": 3, "51": 3, "bucketfsloc": [4, 5], "gener": [4, 5, 12, 16, 17], "upgrad": 4, "generate_bucket_udf_path": 4, "bucketfsloct": 4, "In": [4, 12, 14, 17], "addit": [4, 12], "ar": [4, 12, 16], "72": [4, 5], "63": 4, "correct": 4, "fileobject": 4, "mock": 4, "66": 4, "localf": 4, "74": 4, "53": 4, "again": 4, "38": 4, "replac": 4, "old": [4, 7], "bash": 4, "script": [4, 16], "sphinx_github": 4, "page": 4, "migrat": 4, "nox": [4, 7], "68": 4, "instal": 4, "instruct": 4, "readm": 4, "first": 5, "pypi": [5, 14], "test": 5, "handl": [5, 12, 16], "base_path": 5, "empti": [5, 12], "79": 5, "joinpath": [5, 12], "81": 5, "updat": [5, 8, 9, 10, 11], "poetri": [5, 9, 11, 14], "ci": [5, 14], "project": [5, 7, 8, 11], "prerequisit": 5, "adjust": [5, 12], "contributor": 5, "support": [6, 8, 10, 11, 12], "servic": [6, 12, 15, 16, 19], "inform": [6, 12], "how": 6, "trigger": 6, "doe": [7, 12], "major": 7, "api": [7, 12, 15], "rework": 7, "still": [7, 16, 17], "consid": [7, 12], "deprec": 7, "futur": [7, 12], "integr": [7, 12], "more": [7, 17, 19], "easili": 7, "abil": 7, "standard": [7, 12], "built": 7, "mechan": 7, "achiev": 7, "desir": 7, "outcom": 7, "without": [7, 16], "need": [7, 12, 14, 16], "extend": [7, 12], "exist": [7, 12], "entir": [7, 12], "match": [7, 14], "structur": [7, 12], "packag": [7, 11, 14], "exasol": [7, 8, 11, 12, 14, 16, 17, 18, 19], "warn": 7, "issu": [7, 9, 12, 14], "evalu": 7, "cve": [7, 9], "42969": 7, "silenc": 7, "The": [7, 11, 12, 15, 19], "affect": 7, "our": [7, 9, 12], "itself": [7, 12], "nor": [7, 12], "pull": 7, "librari": [7, 9, 12, 15, 16], "check": [7, 9], "search": 7, "pytest": 7, "track": 7, "toolbox": [8, 10], "fix": [8, 10, 14], "invalid": 8, "command": 8, "develop": [8, 12], "guid": 8, "exampl": [8, 10, 14, 18], "basic": [8, 19], "user": [8, 9, 12, 17, 18], "setup": [8, 11, 19], "section": [8, 11, 19], "pre": 8, "commit": 8, "hook": 8, "attent": [9, 12, 16], "have": [9, 12, 19], "been": 9, "address": [9, 12], "henc": 9, "advis": 9, "own": 9, "tree": [9, 12], "scanner": 9, "trivi": 9, "intern": [9, 12], "lock": [9, 12], "0286": 9, "23931": 9, "restrict": [9, 12, 17], "typeguard": [9, 10], "configur": [10, 11, 19], "ssl": 10, "valid": 10, "overview": [10, 11, 19], "typo": 10, "60": 10, "lockfil": 10, "pin": [10, 12], "log": [11, 14], "bucketf": [11, 14, 16, 18], "logger": [11, 16], "referenc": 11, "via": [11, 12], "import": [11, 12, 16, 17, 18, 19], "get": [11, 16, 19], "getlogg": [11, 16], "For": [11, 12, 14, 19], "most": [11, 17], "suffici": [11, 16], "just": [11, 12], "root": [11, 12, 16], "order": [11, 12, 14, 17], "retriev": 11, "basicconfig": [11, 16, 17], "level": [11, 12, 16, 17], "info": [11, 16, 17], "view": 11, "directori": [11, 12], "pathlik": 11, "protocol": [11, 12], "describ": [11, 16], "design": 11, "document": [11, 19], "relock": 11, "abatilo": 11, "action": [11, 12, 14], "v2": 11, "v3": 11, "python": [11, 12, 14, 15, 16], "v5": 11, "pyproject": 11, "toml": 11, "restructur": 11, "diffrent": 12, "context": 12, "outsid": 12, "db": 12, "within": 12, "common": 12, "task": 12, "pretti": 12, "tediou": 12, "due": [12, 19], "fact": [12, 19], "know": 12, "concept": 12, "so": 12, "simplifi": 12, "streamlin": 12, "frequent": 12, "uniform": 12, "accross": 12, "actual": 12, "behind": 12, "abstract": 12, "filesystem": 12, "part": 12, "share": 12, "its": 12, "howev": 12, "experi": 12, "present": 12, "sever": 12, "particularli": 12, "term": 12, "versatil": 12, "eas": 12, "across": 12, "differ": 12, "both": 12, "extern": 12, "databas": [12, 19], "defin": 12, "dual": 12, "mode": 12, "complex": [12, 19], "ineffici": 12, "especi": 12, "focus": 12, "manag": 12, "aim": 12, "ensur": [12, 16], "reflect": 12, "scope": 12, "These": 12, "relev": 12, "logic": 12, "conceal": 12, "end": 12, "contextu": 12, "face": 12, "difficulti": 12, "switch": 12, "between": 12, "versu": 12, "dure": 12, "lack": 12, "seamless": 12, "transit": 12, "hinder": 12, "product": 12, "additon": 12, "inher": 12, "understood": 12, "tradit": 12, "absenc": 12, "complic": 12, "make": 12, "what": 12, "cumbersom": 12, "time": 12, "consum": 12, "forc": 12, "lower": 12, "onli": 12, "counterintuit": 12, "There": 12, "notabl": 12, "underli": 12, "inconsist": 12, "pattern": [12, 16], "being": 12, "To": 12, "identifi": 12, "layer": 12, "approach": 12, "pathlib": 12, "modul": 12, "mirror": 12, "By": [12, 16], "adopt": 12, "similar": 12, "proven": 12, "decis": 12, "leverag": 12, "intuit": 12, "model": 12, "fit": 12, "requir": 12, "focu": 12, "essenti": [12, 16], "although": 12, "inspir": 12, "includ": [12, 16], "necessari": 12, "effect": 12, "diverg": 12, "area": 12, "tailor": 12, "enhanc": 12, "facilit": 12, "unifi": 12, "wai": 12, "regardless": 12, "meet": 12, "uniqu": 12, "practic": 12, "improv": 12, "effici": [12, 17], "primari": 12, "work": 12, "usag": [12, 17], "additionali": 12, "wan": 12, "compat": 12, "wide": 12, "possibl": 12, "implent": 12, "persist": 12, "process": [12, 14], "reduc": 12, "learn": 12, "curv": 12, "familiar": 12, "sure": 12, "behaviour": 12, "follow": [12, 16], "wherev": 12, "flexibl": [12, 17], "enough": 12, "accommod": 12, "divid": 12, "four": 12, "main": 12, "compon": 12, "central": 12, "opt": 12, "elimin": 12, "inherit": 12, "unnecessari": 12, "clear": 12, "specifi": 12, "least": 12, "one": [12, 17, 18, 19], "anoth": 12, "purpos": 12, "capabl": 12, "plan": 12, "prevent": 12, "travers": 12, "abov": 12, "emul": 12, "custom": 12, "behavior": 12, "natur": 12, "appropri": [12, 14], "Not": 12, "uniformli": 12, "applic": 12, "determin": 12, "uri": 12, "openli": 12, "compil": 12, "straightforward": 12, "align": 12, "some": [12, 16, 17, 18], "aspect": 12, "fulli": 12, "note": [12, 16], "feasibl": 12, "along": 12, "semant": 12, "signific": 12, "deviat": 12, "definit": 12, "choos": 12, "distinct": 12, "clariti": 12, "guidelin": 12, "embrac": 12, "convent": 12, "avoid": 12, "confus": 12, "terminologi": 12, "subsequ": 12, "subsect": 12, "snippet": 12, "intend": 12, "primarili": 12, "refer": [12, 16], "therefor": 12, "comment": 12, "docstr": 12, "sudo": 12, "adapt": 12, "def": 12, "final": 12, "exclud": 12, "drive": 12, "ani": 12, "suffix": 12, "parent": 12, "as_uri": 12, "reconstruct": 12, "is_dir": 12, "fals": 12, "kind": 12, "is_fil": 12, "regular": 12, "pathslik": 12, "yiel": 12, "notafileerror": 12, "filenotfounderror": 12, "If": 12, "write": [12, 16, 17, 19], "after": 12, "yield": 12, "alreadi": 12, "overwritten": 12, "writen": 12, "rm": 12, "otherwis": 12, "thrown": 12, "rmdir": 12, "recurs": 12, "stai": 12, "close": 12, "won": 12, "non": 12, "subdir": 12, "permissionerror": 12, "pathseg": 12, "call": 12, "equival": 12, "combin": 12, "each": [12, 19], "given": 12, "turn": 12, "walk": 12, "tupl": 12, "top": 12, "down": 12, "bottom": 12, "up": 12, "try": 12, "mimik": 12, "doc": [12, 16], "org": [12, 16], "html": [12, 16], "dirpath": 12, "dirnam": 12, "iterdir": 12, "noth": 12, "direct": 12, "children": 12, "overload": 12, "join": 12, "see": [12, 14], "__truediv__": 12, "member": 12, "indic": 12, "clearli": 12, "implment": 12, "bucketpath": 12, "serv": 12, "bf": 12, "bfss": 12, "accss": 12, "localpath": 12, "bfsl": 12, "encapsul": 12, "exactli": 12, "chang": [12, 14], "option": 12, "valu": 12, "other": [12, 16, 17], "potenti": 12, "self": 12, "rectrict": 12, "protect": 12, "stop": 12, "proect": 12, "whith": 12, "proection": 12, "throw": 12, "pathbuild": 12, "credentails_stor": 12, "init": 12, "besid": 12, "credentail_stor": 12, "yet": 12, "pleas": [12, 19], "bellow": [12, 19], "tbd": 12, "alias": 12, "pass": 12, "__call__": 12, "assembl": 12, "apropri": 12, "_determine_typ": 12, "facori": 12, "_create_udf_path": 12, "_create_bucket_path": 12, "_create_chroot_path": 12, "udf_path": 12, "tar": 12, "gz": 12, "http_bucket_path": 12, "8888": 12, "https_bucket_path": 12, "chroot_path": 12, "sub": 12, "subsub": 12, "readonly_path": 12, "ro": 12, "as_udf_path": 12, "udfpath": 12, "git": 14, "com": 14, "run": [14, 19], "date": 14, "latest": [14, 15, 18], "tag": 14, "changes_0": 14, "md": 14, "push": 14, "further": 14, "detail": [14, 19], "cd": 14, "yml": 14, "number": 14, "x": 14, "y": 14, "z": 14, "origin": 14, "d": 14, "remot": 14, "lead": 14, "start": 14, "begin": [14, 16], "finish": 14, "redo": 14, "manual": 14, "scenario": 14, "publish": 14, "wa": 14, "got": 14, "interrupt": 14, "solut": 14, "pip": 15, "found": 15, "here": 15, "come": 16, "handi": 16, "localhost": [16, 17, 19], "6666": [16, 17, 19], "w": [16, 17, 19], "default_bucket": [16, 17, 19], "io": [16, 17], "65": [16, 17], "file1": [16, 17], "bin": [16, 17], "open": [16, 17, 18], "myfile1": 16, "txt": [16, 17, 19], "rb": [16, 17], "destin": [16, 17], "file_lik": [16, 17], "bytesio": [16, 17], "b": [16, 17, 19], "file2": [16, 17], "conent": 16, "text": [16, 17], "abcd": [16, 17], "_": [16, 17], "rang": [16, 17, 19], "10": [16, 17], "as_byt": [16, 17, 19], "as_fil": [16, 17], "myfil": [16, 17, 19], "my_utf8_str": [16, 17], "as_str": [16, 17], "utf8": [16, 17], "my_ascii_str": [16, 17], "ascii": [16, 17], "del": 16, "your": 16, "messag": 16, "those": 16, "correctli": 16, "proper": 16, "might": 16, "appear": 16, "expect": 16, "explicityli": 16, "bucketfs_logg": 16, "notset": 16, "11": 16, "lot": 16, "approri": 16, "setlevel": 16, "debug": 16, "multipl": 17, "request": 17, "myfile2": 17, "back": 17, "caller": 17, "recept": 17, "memori": 17, "prefer": 17, "tangibl": [17, 19], "as_hash": 17, "With": 18, "public": 18, "releas": 18, "want": 18, "artefact": 18, "repositori": 18, "exasol_bucketfs_utils_python": 18, "github_release_file_bucketfs_upload": 18, "githubreleasefilebucketfsupload": 18, "release_upload": 18, "file_to_download_nam": 18, "github_us": 18, "repository_nam": 18, "release_nam": 18, "path_inside_bucket": 18, "port": 18, "straight": 19, "forward": 19, "fairli": 19, "worker": 19, "cluster": 19, "node": 19, "hold": 19, "tri": 19, "illustr": 19, "manner": 19, "look": 19, "advanc": 19, "artifact": 19}, "objects": {"exasol.bucketfs": [[0, 0, 1, "", "Bucket"], [0, 3, 1, "", "BucketFsError"], [0, 0, 1, "", "MappedBucket"], [0, 4, 1, "", "as_bytes"], [0, 4, 1, "", "as_file"], [0, 4, 1, "", "as_hash"], [0, 4, 1, "", "as_string"]], "exasol.bucketfs.Bucket": [[0, 1, 1, "", "__init__"], [0, 1, 1, "", "delete"], [0, 1, 1, "", "download"], [0, 2, 1, "", "files"], [0, 2, 1, "", "name"], [0, 1, 1, "", "upload"]], "exasol.bucketfs.MappedBucket": [[0, 1, 1, "", "__init__"], [0, 2, 1, "", "chunk_size"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:exception", "4": "py:function"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "exception", "Python exception"], "4": ["py", "function", "Python function"]}, "titleterms": {"api": 0, "refer": [0, 17], "exasol": [0, 15], "bucketf": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 17, 19], "servic": [0, 17], "bucket": [0, 12, 16, 17], "as_byt": 0, "as_str": 0, "as_fil": 0, "as_hash": 0, "mappedbucket": [0, 16], "bucketfserror": 0, "chang": [1, 8], "util": [2, 3, 4, 12], "python": [2, 3, 4, 5, 6, 7, 8, 9, 10], "0": [2, 3, 4, 5, 6, 7, 8, 9, 10], "1": 2, "releas": [2, 3, 4, 5, 6, 7, 8, 9, 10, 14], "2022": [2, 3, 4, 5, 6, 7, 8], "01": 2, "18": 2, "summari": [2, 3, 4, 5, 6, 7, 8, 9], "featur": [2, 3, 4, 5, 6, 7, 10, 15], "enhanc": [2, 3, 4, 5, 6, 7], "bug": [2, 3, 4, 5], "fix": [2, 3, 4, 5], "document": [2, 4, 5, 6, 7, 8, 10, 12, 13, 15], "refactor": [2, 3, 4, 5, 7], "secur": [2, 3, 7, 9], "2": 3, "04": 3, "29": 3, "3": 4, "07": 4, "20": 4, "4": 5, "09": 5, "28": 5, "5": 6, "10": 6, "12": [6, 8], "6": 7, "11": 7, "7": 8, "22": 8, "8": 9, "2023": 9, "03": 9, "21": 9, "depend": [9, 10, 14], "9": 10, "2024": 10, "02": 10, "16": 10, "intern": [10, 11], "unreleas": 11, "ad": 11, "design": [12, 13], "path": 12, "": [12, 14, 17], "problem": 12, "descript": 12, "delimit": 12, "challeng": 12, "current": 12, "interact": 12, "propos": 12, "solut": 12, "desgin": 12, "goal": 12, "architectur": 12, "overview": 12, "interfac": 12, "backend": 12, "extens": 12, "chroot": 12, "readonli": 12, "creation": 12, "detail": 12, "pathlik": 12, "concret": 12, "modifi": 12, "factori": 12, "builder": 12, "exampl": 12, "develop": 14, "guid": [14, 19], "set": 14, "up": [14, 19], "workspac": 14, "checkout": 14, "project": 14, "instal": [14, 15], "setup": 14, "pre": 14, "commit": 14, "hook": 14, "creat": 14, "prerequisit": [14, 15], "trigger": 14, "what": 14, "do": 14, "fail": 14, "The": [14, 16, 17], "dure": 14, "check": 14, "One": 14, "step": 14, "partial": 14, "advanc": 16, "list": [16, 17], "file": [16, 17], "upload": [16, 17], "download": [16, 17], "from": [16, 17], "delet": [16, 17], "configur": [16, 17], "log": [16, 17], "basic": 17, "get": 17, "class": 17, "avail": 17, "convert": 17, "github": 18, "artifact": 18, "user": 19, "quickstart": 19, "follow": 19}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"\ud83e\uddf0 API Reference": [[0, "api-reference"]], "exasol.bucketfs.Service": [[0, "exasol-bucketfs-service"]], "exasol.bucketfs.Bucket": [[0, "exasol-bucketfs-bucket"]], "exasol.bucketfs.as_bytes": [[0, "exasol-bucketfs-as-bytes"]], "exasol.bucketfs.as_string": [[0, "exasol-bucketfs-as-string"]], "exasol.bucketfs.as_file": [[0, "exasol-bucketfs-as-file"]], "exasol.bucketfs.as_hash": [[0, "exasol-bucketfs-as-hash"]], "exasol.bucketfs.MappedBucket": [[0, "exasol-bucketfs-mappedbucket"]], "exasol.bucketfs.BucketFsError": [[0, "exasol-bucketfs-bucketfserror"]], "\ud83d\udcdd Changes": [[1, "changes"]], "BucketFs Utils Python 0.1.0, released 2022-01-18": [[2, "bucketfs-utils-python-0-1-0-released-2022-01-18"]], "Summary": [[2, "summary"], [3, "summary"], [4, "summary"], [5, "summary"], [6, "summary"], [7, "summary"], [8, "summary"], [9, "summary"]], "Features / Enhancements": [[2, "features-enhancements"], [3, "features-enhancements"], [4, "features-enhancements"], [5, "features-enhancements"], [6, "features-enhancements"], [7, "features-enhancements"]], "Bug Fixes": [[2, "bug-fixes"], [3, "bug-fixes"], [4, "bug-fixes"], [5, "bug-fixes"]], "Documentation": [[2, "documentation"], [4, "documentation"], [5, "documentation"], [6, "documentation"], [7, "documentation"], [8, "documentation"], [10, "documentation"]], "Refactoring": [[2, "refactoring"], [3, "refactoring"], [4, "refactoring"], [5, "refactoring"], [7, "refactoring"]], "Security": [[2, "security"], [3, "security"], [7, "security"], [9, "security"]], "BucketFs Utils Python 0.2.0, released 2022-04-29": [[3, "bucketfs-utils-python-0-2-0-released-2022-04-29"]], "BucketFs Utils Python 0.3.0, released 2022-07-20": [[4, "bucketfs-utils-python-0-3-0-released-2022-07-20"]], "BucketFs Python 0.4.0, released 2022-09-28": [[5, "bucketfs-python-0-4-0-released-2022-09-28"]], "BucketFs Python 0.5.0, released 2022-10-12": [[6, "bucketfs-python-0-5-0-released-2022-10-12"]], "BucketFs Python 0.6.0, released 2022-11-11": [[7, "bucketfs-python-0-6-0-released-2022-11-11"]], "BucketFs Python 0.7.0, released 2022-12-22": [[8, "bucketfs-python-0-7-0-released-2022-12-22"]], "Changes": [[8, "changes"]], "BucketFs Python 0.8.0, released 2023-03-21": [[9, "bucketfs-python-0-8-0-released-2023-03-21"]], "Dependencies": [[9, "dependencies"], [10, "dependencies"]], "BucketFs Python 0.9.0, released 2024-02-16": [[10, "bucketfs-python-0-9-0-released-2024-02-16"]], "Feature": [[10, "feature"]], "Internal": [[10, "internal"], [11, "internal"]], "Unreleased": [[11, "unreleased"]], "Added": [[11, "added"]], "Design Document Bucket Path(s)": [[12, "design-document-bucket-path-s"]], "Problem Description": [[12, "problem-description"]], "Delimitation": [[12, "delimitation"]], "Challenges with Current BucketFS Interactions": [[12, "challenges-with-current-bucketfs-interactions"]], "Proposed Solution": [[12, "proposed-solution"]], "Desgin": [[12, "desgin"]], "Design Goals": [[12, "design-goals"]], "Architecture": [[12, "architecture"]], "Overview": [[12, "overview"]], "Interface": [[12, "interface"]], "Backends": [[12, "backends"]], "Extensions": [[12, "extensions"]], "Chroot": [[12, "chroot"]], "ReadOnly": [[12, "readonly"]], "Path Creation": [[12, "path-creation"]], "Detailed Design": [[12, "detailed-design"]], "Pathlike": [[12, "pathlike"]], "Concrete Paths (Backends)": [[12, "concrete-paths-backends"]], "Modifiers (Extensions)": [[12, "modifiers-extensions"]], "Factory & Builders": [[12, "factory-builders"]], "Examples": [[12, "examples"]], "Utilities": [[12, "utilities"]], "\ud83d\udcd1 Design Documents": [[13, "design-documents"]], "\ud83d\udee0 Developer Guide": [[14, "developer-guide"]], "Setting up the workspace": [[14, "setting-up-the-workspace"]], "Checkout the Project": [[14, "checkout-the-project"]], "Install project dependencies": [[14, "install-project-dependencies"]], "Setup pre-commit hook(s)": [[14, "setup-pre-commit-hook-s"]], "Creating a Release": [[14, "creating-a-release"]], "Prerequisites": [[14, "prerequisites"]], "Triggering the Release": [[14, "triggering-the-release"]], "What to do if the release failed?": [[14, "what-to-do-if-the-release-failed"]], "The release failed during pre-release checks": [[14, "the-release-failed-during-pre-release-checks"]], "One of the release steps failed (Partial Release)": [[14, "one-of-the-release-steps-failed-partial-release"]], "Exasol Bucketfs": [[15, "exasol-bucketfs"]], "\ud83d\ude80 Features": [[15, "features"]], "\ud83d\udd0c\ufe0f Prerequisites": [[15, "prerequisites"]], "\ud83d\udcbe Installation": [[15, "installation"]], "\ud83d\udcda Documentation": [[15, "documentation"]], "Advanced": [[16, "advanced"]], "The MappedBucket": [[16, "the-mappedbucket"]], "List files in a Bucket": [[16, "list-files-in-a-bucket"], [17, "list-files-in-a-bucket"]], "Upload files to a Bucket": [[16, "upload-files-to-a-bucket"], [17, "upload-files-to-a-bucket"]], "Download files from a Bucket": [[16, "download-files-from-a-bucket"], [17, "download-files-from-a-bucket"]], "Delete files from Bucket": [[16, "delete-files-from-bucket"], [17, "delete-files-from-bucket"]], "Configure logging": [[16, "configure-logging"], [17, "configure-logging"]], "Basic\u2019s": [[17, "basic-s"]], "The Bucketfs Service": [[17, "the-bucketfs-service"]], "List buckets": [[17, "list-buckets"]], "Get a Bucket reference": [[17, "get-a-bucket-reference"]], "Bucket class": [[17, "bucket-class"]], "Available Converters": [[17, "available-converters"]], "Github Artifacts": [[18, "github-artifacts"]], "\ud83d\udc64 User Guide": [[19, "user-guide"]], "Bucketfs": [[19, "bucketfs"]], "Quickstart": [[19, "quickstart"]], "Follow Up": [[19, "follow-up"]]}, "indexentries": {"bucket (class in exasol.bucketfs)": [[0, "exasol.bucketfs.Bucket"]], "bucketfserror": [[0, "exasol.bucketfs.BucketFsError"]], "mappedbucket (class in exasol.bucketfs)": [[0, "exasol.bucketfs.MappedBucket"]], "__init__() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.__init__"]], "__init__() (exasol.bucketfs.mappedbucket method)": [[0, "exasol.bucketfs.MappedBucket.__init__"]], "as_bytes() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_bytes"]], "as_file() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_file"]], "as_hash() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_hash"]], "as_string() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_string"]], "chunk_size (exasol.bucketfs.mappedbucket property)": [[0, "exasol.bucketfs.MappedBucket.chunk_size"]], "delete() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.delete"]], "download() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.download"]], "files (exasol.bucketfs.bucket property)": [[0, "exasol.bucketfs.Bucket.files"]], "name (exasol.bucketfs.bucket property)": [[0, "exasol.bucketfs.Bucket.name"]], "upload() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.upload"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["api", "changes/changelog", "changes/changes_0.1.0", "changes/changes_0.2.0", "changes/changes_0.3.0", "changes/changes_0.4.0", "changes/changes_0.5.0", "changes/changes_0.6.0", "changes/changes_0.7.0", "changes/changes_0.8.0", "changes/changes_0.9.0", "changes/unreleased", "design/bucketpath", "design/design", "developer_guide/developer_guide", "index", "user_guide/advanced", "user_guide/basics", "user_guide/upload_github_release_to_bucket", "user_guide/user_guide"], "filenames": ["api.rst", "changes/changelog.md", "changes/changes_0.1.0.md", "changes/changes_0.2.0.md", "changes/changes_0.3.0.md", "changes/changes_0.4.0.md", "changes/changes_0.5.0.md", "changes/changes_0.6.0.md", "changes/changes_0.7.0.md", "changes/changes_0.8.0.md", "changes/changes_0.9.0.md", "changes/unreleased.md", "design/bucketpath.rst", "design/design.rst", "developer_guide/developer_guide.rst", "index.rst", "user_guide/advanced.rst", "user_guide/basics.rst", "user_guide/upload_github_release_to_bucket.rst", "user_guide/user_guide.rst"], "titles": ["\ud83e\uddf0 API Reference", "\ud83d\udcdd Changes", "BucketFs Utils Python 0.1.0, released 2022-01-18", "BucketFs Utils Python 0.2.0, released 2022-04-29", "BucketFs Utils Python 0.3.0, released 2022-07-20", "BucketFs Python 0.4.0, released 2022-09-28", "BucketFs Python 0.5.0, released 2022-10-12", "BucketFs Python 0.6.0, released 2022-11-11", "BucketFs Python 0.7.0, released 2022-12-22", "BucketFs Python 0.8.0, released 2023-03-21", "BucketFs Python 0.9.0, released 2024-02-16", "Unreleased", "Design Document Bucket Path(s)", "\ud83d\udcd1 Design Documents", "\ud83d\udee0 Developer Guide", "Exasol Bucketfs", "Advanced", "Basic\u2019s", "Github Artifacts", "\ud83d\udc64 User Guide"], "terms": {"class": [0, 12], "url": [0, 5, 16, 17, 19], "str": [0, 12], "credenti": [0, 12, 16, 17, 19], "map": 0, "none": [0, 5, 12], "verifi": 0, "bool": [0, 12], "true": [0, 12], "sourc": [0, 3, 4, 18], "base": [0, 11, 12], "object": [0, 2, 12, 16, 17], "provid": [0, 2, 7, 12, 16, 17], "simpl": [0, 12], "us": [0, 3, 7, 9, 11, 12, 17, 18], "access": [0, 6, 12], "list": [0, 3, 4, 6, 12, 15, 19], "all": [0, 6, 12, 15, 16, 19], "avail": [0, 6, 7, 19], "__init__": [0, 12], "creat": [0, 12], "new": [0, 3, 5, 7, 12, 14], "instanc": 0, "paramet": [0, 12], "e": [0, 9, 12], "g": [0, 9, 12], "http": [0, 12, 16, 17, 18, 19], "": [0, 5, 7, 13, 15, 18, 19], "127": [0, 12], "0": [0, 1, 11, 12, 14, 16, 17, 19], "1": [0, 1, 5, 11, 12, 16], "2580": 0, "A": [0, 12, 17], "contain": [0, 2, 17], "usernam": [0, 16, 17, 19], "password": [0, 16, 17, 18, 19], "bucket1": 0, "foo": 0, "bar": 0, "either": [0, 12], "boolean": 0, "which": [0, 7, 12, 14, 16, 17], "case": [0, 11, 12, 16, 17], "control": 0, "whether": 0, "we": [0, 3, 9, 12], "server": 0, "tl": [0, 10], "certif": 0, "string": [0, 2, 3, 5, 12, 16, 17], "must": [0, 12, 14], "path": [0, 3, 4, 5, 13, 16, 17, 18], "ca": 0, "bundl": 0, "default": [0, 12, 16, 17, 19], "properti": [0, 12], "mutablemap": 0, "name": [0, 2, 3, 4, 5, 12], "implement": [0, 2, 11, 12], "On": 0, "premis": 0, "where": [0, 12, 16], "thi": [0, 2, 3, 4, 7, 12, 16, 17, 18, 19], "i": [0, 2, 4, 7, 12, 15, 16, 19], "host": [0, 17, 18], "authent": 0, "delet": [0, 3, 12, 14, 15, 19], "specif": [0, 3, 12], "file": [0, 2, 3, 12, 15, 18, 19], "point": [0, 12], "shall": [0, 12], "rais": [0, 12], "oper": [0, 12], "couldn": 0, "t": [0, 12], "execut": [0, 12], "successfulli": [0, 12, 14], "download": [0, 2, 15, 19], "chunk_siz": [0, 12], "int": [0, 12], "8192": [0, 12], "iter": [0, 12, 17], "bytestr": [0, 12], "return": [0, 12], "an": [0, 5, 12, 17, 18], "binari": 0, "chunk": [0, 12, 17], "repres": [0, 12], "upload": [0, 2, 4, 14, 15, 18, 19], "data": [0, 12, 16, 17, 19], "binaryio": [0, 12], "onto": 0, "associ": [0, 12], "raw": [0, 16, 17], "content": [0, 12, 16, 17, 19], "transform": 0, "set": [0, 12, 16, 17], "byte": [0, 16, 17], "like": [0, 9, 12, 16, 17], "concaten": 0, "singl": [0, 17], "continu": 0, "encod": [0, 16, 17], "utf": [0, 16, 17], "8": [0, 1, 4, 15, 16, 17], "convert": [0, 12], "represent": 0, "filenam": [0, 12, 16, 17], "written": 0, "algorithm": 0, "sha1": 0, "calcul": 0, "hash": 0, "input": [0, 5], "checksum": 0, "hex": 0, "digest": 0, "wrap": 0, "variou": [0, 12], "conveni": [0, 16], "featur": [0, 12, 16], "index": 0, "even": [0, 12, 16], "though": [0, 16], "veri": [0, 16], "interfac": [0, 11], "function": [0, 12, 18], "should": [0, 11, 12, 16, 17], "care": 0, "mai": [0, 12, 16, 17], "obviou": [0, 16], "do": [0, 7, 12, 16], "involv": [0, 16], "interact": [0, 15, 16, 17], "background": [0, 16], "sync": [0, 16], "etc": [0, 12, 16], "keep": [0, 17], "mind": 0, "when": [0, 12, 17], "size": 0, "except": [0, 12], "arg": [0, 12], "kwarg": [0, 12], "error": [0, 12], "occur": 0, "while": [0, 12], "f": [0, 12, 16, 17], "unreleas": 1, "9": 1, "7": [1, 2], "6": [1, 2, 19], "5": [1, 19], "4": [1, 6, 10, 11, 14, 19], "3": [1, 12, 15, 16, 19], "2": [1, 5, 16, 19], "code": [2, 3, 4, 7, 8, 12], "initi": 2, "version": [2, 3, 4, 5, 9, 10, 14], "It": [2, 12, 16], "allow": [2, 12], "you": [2, 16, 18], "from": [2, 3, 4, 11, 12, 14, 15, 18, 19], "insid": 2, "udf": [2, 4, 5, 12], "altern": 2, "can": [2, 11, 12, 15, 17, 18, 19], "read": [2, 12], "also": [2, 12, 19], "local": [2, 12, 14], "bucket": [2, 3, 4, 5, 6, 11, 13, 15, 18, 19], "system": [2, 10, 11, 12], "ad": [2, 3, 4, 5, 6, 8, 10, 12], "fileobj": 2, "fileboj": 2, "29": 2, "add": [2, 4, 6, 7, 8, 12], "sphinx": 2, "13": 2, "joblib": 2, "obj": 2, "languag": 2, "45": 2, "droid": 2, "github": [2, 10, 14, 19], "workflow": [2, 10, 12, 14], "prepar": [2, 5], "49": 2, "complaint": 2, "regard": [2, 12, 17], "changelog": [2, 14], "47": 2, "15": 2, "remov": [2, 3, 4, 7, 12], "dephel": 2, "depend": [2, 7, 8, 11, 12, 17, 19], "becaus": [2, 3], "maintain": [2, 12], "anymor": 2, "42": 2, "move": 2, "locat": [2, 12], "over": [2, 12], "exasol_data_science_utils_python": 2, "n": 2, "method": [3, 4, 5, 12], "introduc": [3, 12], "two": [3, 12], "certain": 3, "under": 3, "furthermor": [3, 4], "numpi": [3, 4], "build": [3, 4, 11], "against": 3, "buffer": 3, "overflow": 3, "vulner": [3, 7, 9], "55": 3, "61": 3, "54": 3, "posixpath": 3, "convers": 3, "alter": 3, "session": 3, "58": [3, 9], "type": [3, 12], "hint": 3, "51": 3, "bucketfsloc": [4, 5], "gener": [4, 5, 12, 16, 17], "upgrad": 4, "generate_bucket_udf_path": 4, "bucketfsloct": 4, "In": [4, 12, 14, 17], "addit": [4, 12], "ar": [4, 12, 16], "72": [4, 5], "63": 4, "correct": 4, "fileobject": 4, "mock": 4, "66": 4, "localf": 4, "74": 4, "53": 4, "again": 4, "38": 4, "replac": 4, "old": [4, 7], "bash": 4, "script": [4, 16], "sphinx_github": 4, "page": 4, "migrat": 4, "nox": [4, 7], "68": 4, "instal": 4, "instruct": 4, "readm": 4, "first": 5, "pypi": [5, 14], "test": 5, "handl": [5, 12, 16], "base_path": 5, "empti": [5, 12], "79": 5, "joinpath": [5, 12], "81": 5, "updat": [5, 8, 9, 10, 11], "poetri": [5, 9, 11, 14], "ci": [5, 14], "project": [5, 7, 8, 11], "prerequisit": 5, "adjust": [5, 12], "contributor": 5, "support": [6, 8, 10, 11, 12], "servic": [6, 12, 15, 16, 19], "inform": [6, 12], "how": 6, "trigger": 6, "doe": [7, 12], "major": 7, "api": [7, 12, 15], "rework": 7, "still": [7, 16, 17], "consid": [7, 12], "deprec": 7, "futur": [7, 12], "integr": [7, 12], "more": [7, 17, 19], "easili": 7, "abil": 7, "standard": [7, 12], "built": 7, "mechan": 7, "achiev": 7, "desir": 7, "outcom": 7, "without": [7, 16], "need": [7, 12, 14, 16], "extend": [7, 12], "exist": [7, 12], "entir": [7, 12], "match": [7, 14], "structur": [7, 12], "packag": [7, 11, 14], "exasol": [7, 8, 11, 12, 14, 16, 17, 18, 19], "warn": 7, "issu": [7, 9, 12, 14], "evalu": 7, "cve": [7, 9], "42969": 7, "silenc": 7, "The": [7, 11, 12, 15, 19], "affect": 7, "our": [7, 9, 12], "itself": [7, 12], "nor": [7, 12], "pull": 7, "librari": [7, 9, 12, 15, 16], "check": [7, 9], "search": 7, "pytest": 7, "track": 7, "toolbox": [8, 10], "fix": [8, 10, 14], "invalid": 8, "command": 8, "develop": [8, 12], "guid": 8, "exampl": [8, 10, 14, 18], "basic": [8, 19], "user": [8, 9, 12, 17, 18], "setup": [8, 11, 19], "section": [8, 11, 19], "pre": 8, "commit": 8, "hook": 8, "attent": [9, 12, 16], "have": [9, 12, 19], "been": 9, "address": [9, 12], "henc": 9, "advis": 9, "own": 9, "tree": [9, 12], "scanner": 9, "trivi": 9, "intern": [9, 12], "lock": [9, 12], "0286": 9, "23931": 9, "restrict": [9, 12, 17], "typeguard": [9, 10], "configur": [10, 11, 19], "ssl": 10, "valid": 10, "overview": [10, 11, 19], "typo": 10, "60": 10, "lockfil": 10, "pin": [10, 12], "log": [11, 14], "bucketf": [11, 14, 16, 18], "logger": [11, 16], "referenc": 11, "via": [11, 12], "import": [11, 12, 16, 17, 18, 19], "get": [11, 16, 19], "getlogg": [11, 16], "For": [11, 12, 14, 19], "most": [11, 17], "suffici": [11, 16], "just": [11, 12], "root": [11, 12, 16], "order": [11, 12, 14, 17], "retriev": 11, "basicconfig": [11, 16, 17], "level": [11, 12, 16, 17], "info": [11, 16, 17], "view": 11, "directori": [11, 12], "pathlik": 11, "protocol": [11, 12], "describ": [11, 16], "design": 11, "document": [11, 19], "extract": 11, "bucketlik": 11, "relock": 11, "abatilo": 11, "action": [11, 12, 14], "v2": 11, "v3": 11, "python": [11, 12, 14, 15, 16], "v5": 11, "pyproject": 11, "toml": 11, "restructur": 11, "diffrent": 12, "context": 12, "outsid": 12, "db": 12, "within": 12, "common": 12, "task": 12, "pretti": 12, "tediou": 12, "due": [12, 19], "fact": [12, 19], "know": 12, "concept": 12, "so": 12, "simplifi": 12, "streamlin": 12, "frequent": 12, "uniform": 12, "accross": 12, "actual": 12, "behind": 12, "abstract": 12, "filesystem": 12, "part": 12, "share": 12, "its": 12, "howev": 12, "experi": 12, "present": 12, "sever": 12, "particularli": 12, "term": 12, "versatil": 12, "eas": 12, "across": 12, "differ": 12, "both": 12, "extern": 12, "databas": [12, 19], "defin": 12, "dual": 12, "mode": 12, "complex": [12, 19], "ineffici": 12, "especi": 12, "focus": 12, "manag": 12, "aim": 12, "ensur": [12, 16], "reflect": 12, "scope": 12, "These": 12, "relev": 12, "logic": 12, "conceal": 12, "end": 12, "contextu": 12, "face": 12, "difficulti": 12, "switch": 12, "between": 12, "versu": 12, "dure": 12, "lack": 12, "seamless": 12, "transit": 12, "hinder": 12, "product": 12, "additon": 12, "inher": 12, "understood": 12, "tradit": 12, "absenc": 12, "complic": 12, "make": 12, "what": 12, "cumbersom": 12, "time": 12, "consum": 12, "forc": 12, "lower": 12, "onli": 12, "counterintuit": 12, "There": 12, "notabl": 12, "underli": 12, "inconsist": 12, "pattern": [12, 16], "being": 12, "To": 12, "identifi": 12, "layer": 12, "approach": 12, "pathlib": 12, "modul": 12, "mirror": 12, "By": [12, 16], "adopt": 12, "similar": 12, "proven": 12, "decis": 12, "leverag": 12, "intuit": 12, "model": 12, "fit": 12, "requir": 12, "focu": 12, "essenti": [12, 16], "although": 12, "inspir": 12, "includ": [12, 16], "necessari": 12, "effect": 12, "diverg": 12, "area": 12, "tailor": 12, "enhanc": 12, "facilit": 12, "unifi": 12, "wai": 12, "regardless": 12, "meet": 12, "uniqu": 12, "practic": 12, "improv": 12, "effici": [12, 17], "primari": 12, "work": 12, "usag": [12, 17], "additionali": 12, "wan": 12, "compat": 12, "wide": 12, "possibl": 12, "implent": 12, "persist": 12, "process": [12, 14], "reduc": 12, "learn": 12, "curv": 12, "familiar": 12, "sure": 12, "behaviour": 12, "follow": [12, 16], "wherev": 12, "flexibl": [12, 17], "enough": 12, "accommod": 12, "divid": 12, "four": 12, "main": 12, "compon": 12, "central": 12, "opt": 12, "elimin": 12, "inherit": 12, "unnecessari": 12, "clear": 12, "specifi": 12, "least": 12, "one": [12, 17, 18, 19], "anoth": 12, "purpos": 12, "capabl": 12, "plan": 12, "prevent": 12, "travers": 12, "abov": 12, "emul": 12, "custom": 12, "behavior": 12, "natur": 12, "appropri": [12, 14], "Not": 12, "uniformli": 12, "applic": 12, "determin": 12, "uri": 12, "openli": 12, "compil": 12, "straightforward": 12, "align": 12, "some": [12, 16, 17, 18], "aspect": 12, "fulli": 12, "note": [12, 16], "feasibl": 12, "along": 12, "semant": 12, "signific": 12, "deviat": 12, "definit": 12, "choos": 12, "distinct": 12, "clariti": 12, "guidelin": 12, "embrac": 12, "convent": 12, "avoid": 12, "confus": 12, "terminologi": 12, "subsequ": 12, "subsect": 12, "snippet": 12, "intend": 12, "primarili": 12, "refer": [12, 16], "therefor": 12, "comment": 12, "docstr": 12, "sudo": 12, "adapt": 12, "def": 12, "final": 12, "exclud": 12, "drive": 12, "ani": 12, "suffix": 12, "parent": 12, "as_uri": 12, "reconstruct": 12, "is_dir": 12, "fals": 12, "kind": 12, "is_fil": 12, "regular": 12, "pathslik": 12, "yiel": 12, "notafileerror": 12, "filenotfounderror": 12, "If": 12, "write": [12, 16, 17, 19], "after": 12, "yield": 12, "alreadi": 12, "overwritten": 12, "writen": 12, "rm": 12, "otherwis": 12, "thrown": 12, "rmdir": 12, "recurs": 12, "stai": 12, "close": 12, "won": 12, "non": 12, "subdir": 12, "permissionerror": 12, "pathseg": 12, "call": 12, "equival": 12, "combin": 12, "each": [12, 19], "given": 12, "turn": 12, "walk": 12, "tupl": 12, "top": 12, "down": 12, "bottom": 12, "up": 12, "try": 12, "mimik": 12, "doc": [12, 16], "org": [12, 16], "html": [12, 16], "dirpath": 12, "dirnam": 12, "iterdir": 12, "noth": 12, "direct": 12, "children": 12, "overload": 12, "join": 12, "see": [12, 14], "__truediv__": 12, "member": 12, "indic": 12, "clearli": 12, "implment": 12, "bucketpath": 12, "serv": 12, "bf": 12, "bfss": 12, "accss": 12, "localpath": 12, "bfsl": 12, "encapsul": 12, "exactli": 12, "chang": [12, 14], "option": 12, "valu": 12, "other": [12, 16, 17], "potenti": 12, "self": 12, "rectrict": 12, "protect": 12, "stop": 12, "proect": 12, "whith": 12, "proection": 12, "throw": 12, "pathbuild": 12, "credentails_stor": 12, "init": 12, "besid": 12, "credentail_stor": 12, "yet": 12, "pleas": [12, 19], "bellow": [12, 19], "tbd": 12, "alias": 12, "pass": 12, "__call__": 12, "assembl": 12, "apropri": 12, "_determine_typ": 12, "facori": 12, "_create_udf_path": 12, "_create_bucket_path": 12, "_create_chroot_path": 12, "udf_path": 12, "tar": 12, "gz": 12, "http_bucket_path": 12, "8888": 12, "https_bucket_path": 12, "chroot_path": 12, "sub": 12, "subsub": 12, "readonly_path": 12, "ro": 12, "as_udf_path": 12, "udfpath": 12, "git": 14, "com": 14, "run": [14, 19], "date": 14, "latest": [14, 15, 18], "tag": 14, "changes_0": 14, "md": 14, "push": 14, "further": 14, "detail": [14, 19], "cd": 14, "yml": 14, "number": 14, "x": 14, "y": 14, "z": 14, "origin": 14, "d": 14, "remot": 14, "lead": 14, "start": 14, "begin": [14, 16], "finish": 14, "redo": 14, "manual": 14, "scenario": 14, "publish": 14, "wa": 14, "got": 14, "interrupt": 14, "solut": 14, "pip": 15, "found": 15, "here": 15, "come": 16, "handi": 16, "localhost": [16, 17, 19], "6666": [16, 17, 19], "w": [16, 17, 19], "default_bucket": [16, 17, 19], "io": [16, 17], "65": [16, 17], "file1": [16, 17], "bin": [16, 17], "open": [16, 17, 18], "myfile1": 16, "txt": [16, 17, 19], "rb": [16, 17], "destin": [16, 17], "file_lik": [16, 17], "bytesio": [16, 17], "b": [16, 17, 19], "file2": [16, 17], "conent": 16, "text": [16, 17], "abcd": [16, 17], "_": [16, 17], "rang": [16, 17, 19], "10": [16, 17], "as_byt": [16, 17, 19], "as_fil": [16, 17], "myfil": [16, 17, 19], "my_utf8_str": [16, 17], "as_str": [16, 17], "utf8": [16, 17], "my_ascii_str": [16, 17], "ascii": [16, 17], "del": 16, "your": 16, "messag": 16, "those": 16, "correctli": 16, "proper": 16, "might": 16, "appear": 16, "expect": 16, "explicityli": 16, "bucketfs_logg": 16, "notset": 16, "11": 16, "lot": 16, "approri": 16, "setlevel": 16, "debug": 16, "multipl": 17, "request": 17, "myfile2": 17, "back": 17, "caller": 17, "recept": 17, "memori": 17, "prefer": 17, "tangibl": [17, 19], "as_hash": 17, "With": 18, "public": 18, "releas": 18, "want": 18, "artefact": 18, "repositori": 18, "exasol_bucketfs_utils_python": 18, "github_release_file_bucketfs_upload": 18, "githubreleasefilebucketfsupload": 18, "release_upload": 18, "file_to_download_nam": 18, "github_us": 18, "repository_nam": 18, "release_nam": 18, "path_inside_bucket": 18, "port": 18, "straight": 19, "forward": 19, "fairli": 19, "worker": 19, "cluster": 19, "node": 19, "hold": 19, "tri": 19, "illustr": 19, "manner": 19, "look": 19, "advanc": 19, "artifact": 19}, "objects": {"exasol.bucketfs": [[0, 0, 1, "", "Bucket"], [0, 3, 1, "", "BucketFsError"], [0, 0, 1, "", "MappedBucket"], [0, 4, 1, "", "as_bytes"], [0, 4, 1, "", "as_file"], [0, 4, 1, "", "as_hash"], [0, 4, 1, "", "as_string"]], "exasol.bucketfs.Bucket": [[0, 1, 1, "", "__init__"], [0, 1, 1, "", "delete"], [0, 1, 1, "", "download"], [0, 2, 1, "", "files"], [0, 2, 1, "", "name"], [0, 1, 1, "", "upload"]], "exasol.bucketfs.MappedBucket": [[0, 1, 1, "", "__init__"], [0, 2, 1, "", "chunk_size"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:exception", "4": "py:function"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "exception", "Python exception"], "4": ["py", "function", "Python function"]}, "titleterms": {"api": 0, "refer": [0, 17], "exasol": [0, 15], "bucketf": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 17, 19], "servic": [0, 17], "bucket": [0, 12, 16, 17], "as_byt": 0, "as_str": 0, "as_fil": 0, "as_hash": 0, "mappedbucket": [0, 16], "bucketfserror": 0, "chang": [1, 8], "util": [2, 3, 4, 12], "python": [2, 3, 4, 5, 6, 7, 8, 9, 10], "0": [2, 3, 4, 5, 6, 7, 8, 9, 10], "1": 2, "releas": [2, 3, 4, 5, 6, 7, 8, 9, 10, 14], "2022": [2, 3, 4, 5, 6, 7, 8], "01": 2, "18": 2, "summari": [2, 3, 4, 5, 6, 7, 8, 9], "featur": [2, 3, 4, 5, 6, 7, 10, 15], "enhanc": [2, 3, 4, 5, 6, 7], "bug": [2, 3, 4, 5], "fix": [2, 3, 4, 5], "document": [2, 4, 5, 6, 7, 8, 10, 12, 13, 15], "refactor": [2, 3, 4, 5, 7], "secur": [2, 3, 7, 9], "2": 3, "04": 3, "29": 3, "3": 4, "07": 4, "20": 4, "4": 5, "09": 5, "28": 5, "5": 6, "10": 6, "12": [6, 8], "6": 7, "11": 7, "7": 8, "22": 8, "8": 9, "2023": 9, "03": 9, "21": 9, "depend": [9, 10, 14], "9": 10, "2024": 10, "02": 10, "16": 10, "intern": [10, 11], "unreleas": 11, "ad": 11, "design": [12, 13], "path": 12, "": [12, 14, 17], "problem": 12, "descript": 12, "delimit": 12, "challeng": 12, "current": 12, "interact": 12, "propos": 12, "solut": 12, "desgin": 12, "goal": 12, "architectur": 12, "overview": 12, "interfac": 12, "backend": 12, "extens": 12, "chroot": 12, "readonli": 12, "creation": 12, "detail": 12, "pathlik": 12, "concret": 12, "modifi": 12, "factori": 12, "builder": 12, "exampl": 12, "develop": 14, "guid": [14, 19], "set": 14, "up": [14, 19], "workspac": 14, "checkout": 14, "project": 14, "instal": [14, 15], "setup": 14, "pre": 14, "commit": 14, "hook": 14, "creat": 14, "prerequisit": [14, 15], "trigger": 14, "what": 14, "do": 14, "fail": 14, "The": [14, 16, 17], "dure": 14, "check": 14, "One": 14, "step": 14, "partial": 14, "advanc": 16, "list": [16, 17], "file": [16, 17], "upload": [16, 17], "download": [16, 17], "from": [16, 17], "delet": [16, 17], "configur": [16, 17], "log": [16, 17], "basic": 17, "get": 17, "class": 17, "avail": 17, "convert": 17, "github": 18, "artifact": 18, "user": 19, "quickstart": 19, "follow": 19}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"\ud83e\uddf0 API Reference": [[0, "api-reference"]], "exasol.bucketfs.Service": [[0, "exasol-bucketfs-service"]], "exasol.bucketfs.Bucket": [[0, "exasol-bucketfs-bucket"]], "exasol.bucketfs.as_bytes": [[0, "exasol-bucketfs-as-bytes"]], "exasol.bucketfs.as_string": [[0, "exasol-bucketfs-as-string"]], "exasol.bucketfs.as_file": [[0, "exasol-bucketfs-as-file"]], "exasol.bucketfs.as_hash": [[0, "exasol-bucketfs-as-hash"]], "exasol.bucketfs.MappedBucket": [[0, "exasol-bucketfs-mappedbucket"]], "exasol.bucketfs.BucketFsError": [[0, "exasol-bucketfs-bucketfserror"]], "\ud83d\udcdd Changes": [[1, "changes"]], "BucketFs Utils Python 0.1.0, released 2022-01-18": [[2, "bucketfs-utils-python-0-1-0-released-2022-01-18"]], "Summary": [[2, "summary"], [3, "summary"], [4, "summary"], [5, "summary"], [6, "summary"], [7, "summary"], [8, "summary"], [9, "summary"]], "Features / Enhancements": [[2, "features-enhancements"], [3, "features-enhancements"], [4, "features-enhancements"], [5, "features-enhancements"], [6, "features-enhancements"], [7, "features-enhancements"]], "Bug Fixes": [[2, "bug-fixes"], [3, "bug-fixes"], [4, "bug-fixes"], [5, "bug-fixes"]], "Documentation": [[2, "documentation"], [4, "documentation"], [5, "documentation"], [6, "documentation"], [7, "documentation"], [8, "documentation"], [10, "documentation"]], "Refactoring": [[2, "refactoring"], [3, "refactoring"], [4, "refactoring"], [5, "refactoring"], [7, "refactoring"]], "Security": [[2, "security"], [3, "security"], [7, "security"], [9, "security"]], "BucketFs Utils Python 0.2.0, released 2022-04-29": [[3, "bucketfs-utils-python-0-2-0-released-2022-04-29"]], "BucketFs Utils Python 0.3.0, released 2022-07-20": [[4, "bucketfs-utils-python-0-3-0-released-2022-07-20"]], "BucketFs Python 0.4.0, released 2022-09-28": [[5, "bucketfs-python-0-4-0-released-2022-09-28"]], "BucketFs Python 0.5.0, released 2022-10-12": [[6, "bucketfs-python-0-5-0-released-2022-10-12"]], "BucketFs Python 0.6.0, released 2022-11-11": [[7, "bucketfs-python-0-6-0-released-2022-11-11"]], "BucketFs Python 0.7.0, released 2022-12-22": [[8, "bucketfs-python-0-7-0-released-2022-12-22"]], "Changes": [[8, "changes"]], "BucketFs Python 0.8.0, released 2023-03-21": [[9, "bucketfs-python-0-8-0-released-2023-03-21"]], "Dependencies": [[9, "dependencies"], [10, "dependencies"]], "BucketFs Python 0.9.0, released 2024-02-16": [[10, "bucketfs-python-0-9-0-released-2024-02-16"]], "Feature": [[10, "feature"]], "Internal": [[10, "internal"], [11, "internal"]], "Unreleased": [[11, "unreleased"]], "Added": [[11, "added"]], "Design Document Bucket Path(s)": [[12, "design-document-bucket-path-s"]], "Problem Description": [[12, "problem-description"]], "Delimitation": [[12, "delimitation"]], "Challenges with Current BucketFS Interactions": [[12, "challenges-with-current-bucketfs-interactions"]], "Proposed Solution": [[12, "proposed-solution"]], "Desgin": [[12, "desgin"]], "Design Goals": [[12, "design-goals"]], "Architecture": [[12, "architecture"]], "Overview": [[12, "overview"]], "Interface": [[12, "interface"]], "Backends": [[12, "backends"]], "Extensions": [[12, "extensions"]], "Chroot": [[12, "chroot"]], "ReadOnly": [[12, "readonly"]], "Path Creation": [[12, "path-creation"]], "Detailed Design": [[12, "detailed-design"]], "Pathlike": [[12, "pathlike"]], "Concrete Paths (Backends)": [[12, "concrete-paths-backends"]], "Modifiers (Extensions)": [[12, "modifiers-extensions"]], "Factory & Builders": [[12, "factory-builders"]], "Examples": [[12, "examples"]], "Utilities": [[12, "utilities"]], "\ud83d\udcd1 Design Documents": [[13, "design-documents"]], "\ud83d\udee0 Developer Guide": [[14, "developer-guide"]], "Setting up the workspace": [[14, "setting-up-the-workspace"]], "Checkout the Project": [[14, "checkout-the-project"]], "Install project dependencies": [[14, "install-project-dependencies"]], "Setup pre-commit hook(s)": [[14, "setup-pre-commit-hook-s"]], "Creating a Release": [[14, "creating-a-release"]], "Prerequisites": [[14, "prerequisites"]], "Triggering the Release": [[14, "triggering-the-release"]], "What to do if the release failed?": [[14, "what-to-do-if-the-release-failed"]], "The release failed during pre-release checks": [[14, "the-release-failed-during-pre-release-checks"]], "One of the release steps failed (Partial Release)": [[14, "one-of-the-release-steps-failed-partial-release"]], "Exasol Bucketfs": [[15, "exasol-bucketfs"]], "\ud83d\ude80 Features": [[15, "features"]], "\ud83d\udd0c\ufe0f Prerequisites": [[15, "prerequisites"]], "\ud83d\udcbe Installation": [[15, "installation"]], "\ud83d\udcda Documentation": [[15, "documentation"]], "Advanced": [[16, "advanced"]], "The MappedBucket": [[16, "the-mappedbucket"]], "List files in a Bucket": [[16, "list-files-in-a-bucket"], [17, "list-files-in-a-bucket"]], "Upload files to a Bucket": [[16, "upload-files-to-a-bucket"], [17, "upload-files-to-a-bucket"]], "Download files from a Bucket": [[16, "download-files-from-a-bucket"], [17, "download-files-from-a-bucket"]], "Delete files from Bucket": [[16, "delete-files-from-bucket"], [17, "delete-files-from-bucket"]], "Configure logging": [[16, "configure-logging"], [17, "configure-logging"]], "Basic\u2019s": [[17, "basic-s"]], "The Bucketfs Service": [[17, "the-bucketfs-service"]], "List buckets": [[17, "list-buckets"]], "Get a Bucket reference": [[17, "get-a-bucket-reference"]], "Bucket class": [[17, "bucket-class"]], "Available Converters": [[17, "available-converters"]], "Github Artifacts": [[18, "github-artifacts"]], "\ud83d\udc64 User Guide": [[19, "user-guide"]], "Bucketfs": [[19, "bucketfs"]], "Quickstart": [[19, "quickstart"]], "Follow Up": [[19, "follow-up"]]}, "indexentries": {"bucket (class in exasol.bucketfs)": [[0, "exasol.bucketfs.Bucket"]], "bucketfserror": [[0, "exasol.bucketfs.BucketFsError"]], "mappedbucket (class in exasol.bucketfs)": [[0, "exasol.bucketfs.MappedBucket"]], "__init__() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.__init__"]], "__init__() (exasol.bucketfs.mappedbucket method)": [[0, "exasol.bucketfs.MappedBucket.__init__"]], "as_bytes() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_bytes"]], "as_file() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_file"]], "as_hash() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_hash"]], "as_string() (in module exasol.bucketfs)": [[0, "exasol.bucketfs.as_string"]], "chunk_size (exasol.bucketfs.mappedbucket property)": [[0, "exasol.bucketfs.MappedBucket.chunk_size"]], "delete() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.delete"]], "download() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.download"]], "files (exasol.bucketfs.bucket property)": [[0, "exasol.bucketfs.Bucket.files"]], "name (exasol.bucketfs.bucket property)": [[0, "exasol.bucketfs.Bucket.name"]], "upload() (exasol.bucketfs.bucket method)": [[0, "exasol.bucketfs.Bucket.upload"]]}}) \ No newline at end of file