diff --git a/.doctrees/changes/unreleased.doctree b/.doctrees/changes/unreleased.doctree
index 62b05f19..85682b19 100644
Binary files a/.doctrees/changes/unreleased.doctree and b/.doctrees/changes/unreleased.doctree differ
diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle
index b3cd98e1..6f6c2b7e 100644
Binary files a/.doctrees/environment.pickle and b/.doctrees/environment.pickle differ
diff --git a/_sources/changes/unreleased.md.txt b/_sources/changes/unreleased.md.txt
index ec6f3f29..f458b6ac 100644
--- a/_sources/changes/unreleased.md.txt
+++ b/_sources/changes/unreleased.md.txt
@@ -12,3 +12,4 @@
## Internal
- Updated lockfile
+- Pin python-toolbox version in GitHub workflows
diff --git a/changes/unreleased.html b/changes/unreleased.html
index bdc3f162..0b474787 100644
--- a/changes/unreleased.html
+++ b/changes/unreleased.html
@@ -240,6 +240,7 @@
Dependencies
diff --git a/searchindex.js b/searchindex.js
index b55f6ff2..961c734a 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/unreleased", "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/unreleased.md", "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", "Unreleased", "\ud83d\udee0 Developer Guide", "Exasol Bucketfs", "Advanced", "Basic\u2019s", "Github Artifacts", "\ud83d\udc64 User Guide"], "terms": {"class": 0, "url": [0, 5, 13, 14, 16], "str": 0, "credenti": [0, 13, 14, 16], "map": 0, "none": [0, 5], "verifi": 0, "bool": 0, "true": 0, "sourc": [0, 3, 4, 15], "base": 0, "object": [0, 2, 13, 14], "provid": [0, 2, 7, 13, 14], "simpl": 0, "us": [0, 3, 7, 9, 14, 15], "access": [0, 6], "list": [0, 3, 4, 6, 12, 16], "all": [0, 6, 12, 13, 16], "avail": [0, 6, 7, 16], "__init__": 0, "creat": 0, "new": [0, 3, 5, 7, 11], "instanc": 0, "paramet": 0, "e": [0, 9], "g": [0, 9], "http": [0, 13, 14, 15, 16], "": [0, 5, 7, 12, 15, 16], "127": 0, "0": [0, 1, 10, 11, 13, 14, 16], "1": [0, 1, 5], "2580": 0, "A": [0, 14], "contain": [0, 2, 14], "usernam": [0, 13, 14, 16], "password": [0, 13, 14, 15, 16], "bucket1": 0, "foo": 0, "bar": 0, "either": 0, "boolean": 0, "which": [0, 7, 11, 14], "case": [0, 14], "control": 0, "whether": 0, "we": [0, 3, 9], "server": 0, "tl": [0, 10], "certif": 0, "string": [0, 2, 3, 5, 13, 14], "must": [0, 11], "path": [0, 3, 4, 5, 13, 14, 15], "ca": 0, "bundl": 0, "default": [0, 13, 14, 16], "properti": 0, "mutablemap": 0, "name": [0, 2, 3, 4, 5], "where": 0, "thi": [0, 2, 3, 4, 7, 14, 15, 16], "i": [0, 2, 4, 7, 12, 16], "host": [0, 14, 15], "authent": 0, "delet": [0, 3, 11, 12, 16], "specif": [0, 3], "file": [0, 2, 3, 12, 15, 16], "point": 0, "shall": 0, "rais": 0, "oper": 0, "couldn": 0, "t": 0, "execut": 0, "successfulli": [0, 11], "download": [0, 2, 12, 16], "chunk_siz": 0, "int": 0, "8192": 0, "iter": [0, 14], "bytestr": 0, "return": 0, "an": [0, 5, 14, 15], "binari": 0, "chunk": [0, 14], "repres": 0, "upload": [0, 2, 4, 11, 12, 15, 16], "data": [0, 13, 14, 16], "binaryio": 0, "onto": 0, "associ": 0, "raw": [0, 13, 14], "content": [0, 13, 14, 16], "transform": 0, "set": [0, 14], "byte": [0, 13, 14], "like": [0, 9, 13, 14], "concaten": 0, "singl": [0, 14], "continu": 0, "encod": [0, 13, 14], "utf": [0, 13, 14], "8": [0, 1, 4, 12, 13, 14], "convert": 0, "represent": 0, "filenam": [0, 13, 14], "written": 0, "algorithm": 0, "sha1": 0, "calcul": 0, "hash": 0, "input": [0, 5], "checksum": 0, "hex": 0, "digest": 0, "wrap": 0, "variou": 0, "conveni": [0, 13], "featur": [0, 13], "index": 0, "even": [0, 13], "though": [0, 13], "veri": [0, 13], "interfac": 0, "function": [0, 15], "should": [0, 14], "care": 0, "mai": [0, 13, 14], "obviou": [0, 13], "do": [0, 7, 13], "involv": [0, 13], "interact": [0, 12, 13, 14], "background": [0, 13], "sync": [0, 13], "etc": [0, 13], "keep": [0, 14], "mind": 0, "when": [0, 14], "size": 0, "except": 0, "arg": 0, "kwarg": 0, "error": 0, "occur": 0, "while": 0, "f": [0, 13, 14], "unreleas": 1, "7": [1, 2], "6": [1, 2, 16], "5": [1, 16], "4": [1, 6, 10, 11, 16], "3": [1, 12, 16], "2": [1, 5, 16], "code": [2, 3, 4, 7, 8], "initi": 2, "implement": 2, "version": [2, 3, 4, 5, 9, 11], "It": 2, "allow": 2, "you": [2, 15], "from": [2, 3, 4, 11, 12, 15, 16], "insid": 2, "udf": [2, 4, 5], "altern": 2, "can": [2, 12, 14, 15, 16], "read": 2, "also": [2, 16], "local": [2, 11], "bucket": [2, 3, 4, 5, 6, 12, 15, 16], "system": [2, 10], "ad": [2, 3, 4, 5, 6, 8, 10], "fileobj": 2, "fileboj": 2, "29": 2, "add": [2, 4, 6, 7, 8], "sphinx": 2, "13": 2, "joblib": 2, "obj": 2, "languag": 2, "45": 2, "droid": 2, "github": [2, 11, 16], "workflow": [2, 11], "prepar": [2, 5], "49": 2, "complaint": 2, "regard": [2, 14], "changelog": [2, 11], "47": 2, "15": 2, "remov": [2, 3, 4, 7], "dephel": 2, "depend": [2, 7, 8, 14, 16], "becaus": [2, 3], "maintain": 2, "anymor": 2, "42": 2, "move": 2, "locat": 2, "over": 2, "exasol_data_science_utils_python": 2, "n": 2, "method": [3, 4, 5], "introduc": 3, "two": 3, "certain": 3, "under": 3, "furthermor": [3, 4], "numpi": [3, 4], "build": [3, 4], "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, "hint": 3, "51": 3, "bucketfsloc": [4, 5], "gener": [4, 5, 13, 14], "upgrad": 4, "generate_bucket_udf_path": 4, "bucketfsloct": 4, "In": [4, 11, 14], "addit": 4, "ar": 4, "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, "sphinx_github": 4, "page": 4, "migrat": 4, "nox": [4, 7], "68": 4, "instal": 4, "instruct": 4, "readm": 4, "first": 5, "pypi": [5, 11], "test": 5, "handl": 5, "base_path": 5, "empti": 5, "79": 5, "joinpath": 5, "81": 5, "updat": [5, 8, 9, 10], "poetri": [5, 9, 11], "ci": [5, 11], "project": [5, 7, 8], "prerequisit": 5, "adjust": 5, "contributor": 5, "support": [6, 8, 10], "servic": [6, 12, 13, 16], "inform": 6, "how": 6, "trigger": 6, "doe": 7, "major": 7, "api": [7, 12], "rework": 7, "still": [7, 13, 14], "consid": 7, "deprec": 7, "futur": 7, "integr": 7, "more": [7, 14, 16], "easili": 7, "abil": 7, "standard": 7, "built": 7, "mechan": 7, "achiev": 7, "desir": 7, "outcom": 7, "without": 7, "need": [7, 11], "extend": 7, "exist": 7, "entir": 7, "match": [7, 11], "structur": 7, "packag": [7, 11], "exasol": [7, 8, 11, 13, 14, 15, 16], "warn": 7, "issu": [7, 9, 11], "evalu": 7, "cve": [7, 9], "42969": 7, "silenc": 7, "The": [7, 12, 16], "affect": 7, "our": [7, 9], "itself": 7, "nor": 7, "pull": 7, "librari": [7, 9, 12], "check": [7, 9], "search": 7, "pytest": 7, "track": 7, "toolbox": 8, "fix": [8, 10, 11], "invalid": 8, "command": 8, "develop": 8, "guid": 8, "exampl": [8, 10, 11, 15], "basic": [8, 16], "user": [8, 9, 14, 15], "setup": [8, 16], "section": [8, 16], "pre": 8, "commit": 8, "hook": 8, "attent": 9, "have": [9, 16], "been": 9, "address": 9, "henc": 9, "advis": 9, "own": 9, "tree": 9, "scanner": 9, "trivi": 9, "intern": 9, "lock": 9, "0286": 9, "23931": 9, "restrict": [9, 14], "typeguard": [9, 10], "configur": [10, 16], "ssl": 10, "valid": 10, "overview": [10, 16], "bucketf": [10, 11, 13, 15], "typo": 10, "60": 10, "lockfil": 10, "git": 11, "com": 11, "python": [11, 12], "run": [11, 16], "chang": 11, "log": 11, "date": 11, "latest": [11, 12, 15], "tag": 11, "For": [11, 16], "changes_0": 11, "md": 11, "order": [11, 14], "push": 11, "further": 11, "detail": [11, 16], "see": 11, "cd": 11, "yml": 11, "appropri": 11, "number": 11, "x": 11, "y": 11, "z": 11, "origin": 11, "d": 11, "remot": 11, "lead": 11, "start": 11, "process": 11, "begin": 11, "action": 11, "finish": 11, "redo": 11, "manual": 11, "scenario": 11, "publish": 11, "wa": 11, "got": 11, "interrupt": 11, "solut": 11, "pip": 12, "found": 12, "here": 12, "follow": 13, "describ": 13, "pattern": 13, "come": 13, "handi": 13, "import": [13, 14, 15, 16], "localhost": [13, 14, 16], "6666": [13, 14, 16], "w": [13, 14, 16], "write": [13, 14, 16], "default_bucket": [13, 14, 16], "io": [13, 14], "65": [13, 14], "some": [13, 14, 15], "file1": [13, 14], "bin": [13, 14], "open": [13, 14, 15], "myfile1": 13, "txt": [13, 14, 16], "rb": [13, 14], "destin": [13, 14], "file_lik": [13, 14], "bytesio": [13, 14], "b": [13, 14, 16], "file2": [13, 14], "conent": 13, "text": [13, 14], "abcd": [13, 14], "_": [13, 14], "rang": [13, 14, 16], "10": [13, 14], "as_byt": [13, 14, 16], "other": [13, 14], "as_fil": [13, 14], "myfil": [13, 14, 16], "my_utf8_str": [13, 14], "as_str": [13, 14], "utf8": [13, 14], "my_ascii_str": [13, 14], "ascii": [13, 14], "del": 13, "multipl": 14, "one": [14, 15, 16], "request": 14, "myfile2": 14, "back": 14, "caller": 14, "recept": 14, "effici": 14, "flexibl": 14, "memori": 14, "usag": 14, "most": 14, "prefer": 14, "tangibl": [14, 16], "as_hash": 14, "With": 15, "public": 15, "releas": 15, "want": 15, "artefact": 15, "repositori": 15, "exasol_bucketfs_utils_python": 15, "github_release_file_bucketfs_upload": 15, "githubreleasefilebucketfsupload": 15, "release_upload": 15, "file_to_download_nam": 15, "github_us": 15, "repository_nam": 15, "release_nam": 15, "path_inside_bucket": 15, "port": 15, "databas": 16, "straight": 16, "forward": 16, "fairli": 16, "complex": 16, "due": 16, "fact": 16, "each": 16, "worker": 16, "cluster": 16, "node": 16, "hold": 16, "bellow": 16, "tri": 16, "illustr": 16, "manner": 16, "pleas": 16, "look": 16, "document": 16, "get": 16, "advanc": 16, "artifact": 16}, "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, 14], "exasol": [0, 12], "bucketf": [0, 2, 3, 4, 5, 6, 7, 8, 9, 12, 14, 16], "servic": [0, 14], "bucket": [0, 13, 14], "as_byt": 0, "as_str": 0, "as_fil": 0, "as_hash": 0, "mappedbucket": [0, 13], "bucketfserror": 0, "chang": [1, 8], "util": [2, 3, 4], "python": [2, 3, 4, 5, 6, 7, 8, 9], "0": [2, 3, 4, 5, 6, 7, 8, 9], "1": 2, "releas": [2, 3, 4, 5, 6, 7, 8, 9, 11], "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, 12], "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], "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, 11], "unreleas": 10, "intern": 10, "develop": 11, "guid": [11, 16], "set": 11, "up": [11, 16], "workspac": 11, "checkout": 11, "project": 11, "instal": [11, 12], "setup": 11, "pre": 11, "commit": 11, "hook": 11, "": [11, 14], "creat": 11, "prerequisit": [11, 12], "trigger": 11, "what": 11, "do": 11, "fail": 11, "The": [11, 13, 14], "dure": 11, "check": 11, "One": 11, "step": 11, "partial": 11, "advanc": 13, "list": [13, 14], "file": [13, 14], "upload": [13, 14], "download": [13, 14], "from": [13, 14], "delet": [13, 14], "basic": 14, "get": 14, "class": 14, "avail": 14, "convert": 14, "github": 15, "artifact": 15, "user": 16, "quickstart": 16, "follow": 16}, "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"]], "Unreleased": [[10, "unreleased"]], "Feature": [[10, "feature"]], "Internal": [[10, "internal"]], "\ud83d\udee0 Developer Guide": [[11, "developer-guide"]], "Setting up the workspace": [[11, "setting-up-the-workspace"]], "Checkout the Project": [[11, "checkout-the-project"]], "Install project dependencies": [[11, "install-project-dependencies"]], "Setup pre-commit hook(s)": [[11, "setup-pre-commit-hook-s"]], "Creating a Release": [[11, "creating-a-release"]], "Prerequisites": [[11, "prerequisites"]], "Triggering the Release": [[11, "triggering-the-release"]], "What to do if the release failed?": [[11, "what-to-do-if-the-release-failed"]], "The release failed during pre-release checks": [[11, "the-release-failed-during-pre-release-checks"]], "One of the release steps failed (Partial Release)": [[11, "one-of-the-release-steps-failed-partial-release"]], "Exasol Bucketfs": [[12, "exasol-bucketfs"]], "\ud83d\ude80 Features": [[12, "features"]], "\ud83d\udd0c\ufe0f Prerequisites": [[12, "prerequisites"]], "\ud83d\udcbe Installation": [[12, "installation"]], "\ud83d\udcda Documentation": [[12, "documentation"]], "Advanced": [[13, "advanced"]], "The MappedBucket": [[13, "the-mappedbucket"]], "List files in a Bucket": [[13, "list-files-in-a-bucket"], [14, "list-files-in-a-bucket"]], "Upload files to a Bucket": [[13, "upload-files-to-a-bucket"], [14, "upload-files-to-a-bucket"]], "Download files from a Bucket": [[13, "download-files-from-a-bucket"], [14, "download-files-from-a-bucket"]], "Delete files from Bucket": [[13, "delete-files-from-bucket"], [14, "delete-files-from-bucket"]], "Basic\u2019s": [[14, "basic-s"]], "The Bucketfs Service": [[14, "the-bucketfs-service"]], "List buckets": [[14, "list-buckets"]], "Get a Bucket reference": [[14, "get-a-bucket-reference"]], "Bucket class": [[14, "bucket-class"]], "Available Converters": [[14, "available-converters"]], "Github Artifacts": [[15, "github-artifacts"]], "\ud83d\udc64 User Guide": [[16, "user-guide"]], "Bucketfs": [[16, "bucketfs"]], "Quickstart": [[16, "quickstart"]], "Follow Up": [[16, "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/unreleased", "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/unreleased.md", "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", "Unreleased", "\ud83d\udee0 Developer Guide", "Exasol Bucketfs", "Advanced", "Basic\u2019s", "Github Artifacts", "\ud83d\udc64 User Guide"], "terms": {"class": 0, "url": [0, 5, 13, 14, 16], "str": 0, "credenti": [0, 13, 14, 16], "map": 0, "none": [0, 5], "verifi": 0, "bool": 0, "true": 0, "sourc": [0, 3, 4, 15], "base": 0, "object": [0, 2, 13, 14], "provid": [0, 2, 7, 13, 14], "simpl": 0, "us": [0, 3, 7, 9, 14, 15], "access": [0, 6], "list": [0, 3, 4, 6, 12, 16], "all": [0, 6, 12, 13, 16], "avail": [0, 6, 7, 16], "__init__": 0, "creat": 0, "new": [0, 3, 5, 7, 11], "instanc": 0, "paramet": 0, "e": [0, 9], "g": [0, 9], "http": [0, 13, 14, 15, 16], "": [0, 5, 7, 12, 15, 16], "127": 0, "0": [0, 1, 10, 11, 13, 14, 16], "1": [0, 1, 5], "2580": 0, "A": [0, 14], "contain": [0, 2, 14], "usernam": [0, 13, 14, 16], "password": [0, 13, 14, 15, 16], "bucket1": 0, "foo": 0, "bar": 0, "either": 0, "boolean": 0, "which": [0, 7, 11, 14], "case": [0, 14], "control": 0, "whether": 0, "we": [0, 3, 9], "server": 0, "tl": [0, 10], "certif": 0, "string": [0, 2, 3, 5, 13, 14], "must": [0, 11], "path": [0, 3, 4, 5, 13, 14, 15], "ca": 0, "bundl": 0, "default": [0, 13, 14, 16], "properti": 0, "mutablemap": 0, "name": [0, 2, 3, 4, 5], "where": 0, "thi": [0, 2, 3, 4, 7, 14, 15, 16], "i": [0, 2, 4, 7, 12, 16], "host": [0, 14, 15], "authent": 0, "delet": [0, 3, 11, 12, 16], "specif": [0, 3], "file": [0, 2, 3, 12, 15, 16], "point": 0, "shall": 0, "rais": 0, "oper": 0, "couldn": 0, "t": 0, "execut": 0, "successfulli": [0, 11], "download": [0, 2, 12, 16], "chunk_siz": 0, "int": 0, "8192": 0, "iter": [0, 14], "bytestr": 0, "return": 0, "an": [0, 5, 14, 15], "binari": 0, "chunk": [0, 14], "repres": 0, "upload": [0, 2, 4, 11, 12, 15, 16], "data": [0, 13, 14, 16], "binaryio": 0, "onto": 0, "associ": 0, "raw": [0, 13, 14], "content": [0, 13, 14, 16], "transform": 0, "set": [0, 14], "byte": [0, 13, 14], "like": [0, 9, 13, 14], "concaten": 0, "singl": [0, 14], "continu": 0, "encod": [0, 13, 14], "utf": [0, 13, 14], "8": [0, 1, 4, 12, 13, 14], "convert": 0, "represent": 0, "filenam": [0, 13, 14], "written": 0, "algorithm": 0, "sha1": 0, "calcul": 0, "hash": 0, "input": [0, 5], "checksum": 0, "hex": 0, "digest": 0, "wrap": 0, "variou": 0, "conveni": [0, 13], "featur": [0, 13], "index": 0, "even": [0, 13], "though": [0, 13], "veri": [0, 13], "interfac": 0, "function": [0, 15], "should": [0, 14], "care": 0, "mai": [0, 13, 14], "obviou": [0, 13], "do": [0, 7, 13], "involv": [0, 13], "interact": [0, 12, 13, 14], "background": [0, 13], "sync": [0, 13], "etc": [0, 13], "keep": [0, 14], "mind": 0, "when": [0, 14], "size": 0, "except": 0, "arg": 0, "kwarg": 0, "error": 0, "occur": 0, "while": 0, "f": [0, 13, 14], "unreleas": 1, "7": [1, 2], "6": [1, 2, 16], "5": [1, 16], "4": [1, 6, 10, 11, 16], "3": [1, 12, 16], "2": [1, 5, 16], "code": [2, 3, 4, 7, 8], "initi": 2, "implement": 2, "version": [2, 3, 4, 5, 9, 10, 11], "It": 2, "allow": 2, "you": [2, 15], "from": [2, 3, 4, 11, 12, 15, 16], "insid": 2, "udf": [2, 4, 5], "altern": 2, "can": [2, 12, 14, 15, 16], "read": 2, "also": [2, 16], "local": [2, 11], "bucket": [2, 3, 4, 5, 6, 12, 15, 16], "system": [2, 10], "ad": [2, 3, 4, 5, 6, 8, 10], "fileobj": 2, "fileboj": 2, "29": 2, "add": [2, 4, 6, 7, 8], "sphinx": 2, "13": 2, "joblib": 2, "obj": 2, "languag": 2, "45": 2, "droid": 2, "github": [2, 10, 11, 16], "workflow": [2, 10, 11], "prepar": [2, 5], "49": 2, "complaint": 2, "regard": [2, 14], "changelog": [2, 11], "47": 2, "15": 2, "remov": [2, 3, 4, 7], "dephel": 2, "depend": [2, 7, 8, 14, 16], "becaus": [2, 3], "maintain": 2, "anymor": 2, "42": 2, "move": 2, "locat": 2, "over": 2, "exasol_data_science_utils_python": 2, "n": 2, "method": [3, 4, 5], "introduc": 3, "two": 3, "certain": 3, "under": 3, "furthermor": [3, 4], "numpi": [3, 4], "build": [3, 4], "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, "hint": 3, "51": 3, "bucketfsloc": [4, 5], "gener": [4, 5, 13, 14], "upgrad": 4, "generate_bucket_udf_path": 4, "bucketfsloct": 4, "In": [4, 11, 14], "addit": 4, "ar": 4, "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, "sphinx_github": 4, "page": 4, "migrat": 4, "nox": [4, 7], "68": 4, "instal": 4, "instruct": 4, "readm": 4, "first": 5, "pypi": [5, 11], "test": 5, "handl": 5, "base_path": 5, "empti": 5, "79": 5, "joinpath": 5, "81": 5, "updat": [5, 8, 9, 10], "poetri": [5, 9, 11], "ci": [5, 11], "project": [5, 7, 8], "prerequisit": 5, "adjust": 5, "contributor": 5, "support": [6, 8, 10], "servic": [6, 12, 13, 16], "inform": 6, "how": 6, "trigger": 6, "doe": 7, "major": 7, "api": [7, 12], "rework": 7, "still": [7, 13, 14], "consid": 7, "deprec": 7, "futur": 7, "integr": 7, "more": [7, 14, 16], "easili": 7, "abil": 7, "standard": 7, "built": 7, "mechan": 7, "achiev": 7, "desir": 7, "outcom": 7, "without": 7, "need": [7, 11], "extend": 7, "exist": 7, "entir": 7, "match": [7, 11], "structur": 7, "packag": [7, 11], "exasol": [7, 8, 11, 13, 14, 15, 16], "warn": 7, "issu": [7, 9, 11], "evalu": 7, "cve": [7, 9], "42969": 7, "silenc": 7, "The": [7, 12, 16], "affect": 7, "our": [7, 9], "itself": 7, "nor": 7, "pull": 7, "librari": [7, 9, 12], "check": [7, 9], "search": 7, "pytest": 7, "track": 7, "toolbox": [8, 10], "fix": [8, 10, 11], "invalid": 8, "command": 8, "develop": 8, "guid": 8, "exampl": [8, 10, 11, 15], "basic": [8, 16], "user": [8, 9, 14, 15], "setup": [8, 16], "section": [8, 16], "pre": 8, "commit": 8, "hook": 8, "attent": 9, "have": [9, 16], "been": 9, "address": 9, "henc": 9, "advis": 9, "own": 9, "tree": 9, "scanner": 9, "trivi": 9, "intern": 9, "lock": 9, "0286": 9, "23931": 9, "restrict": [9, 14], "typeguard": [9, 10], "configur": [10, 16], "ssl": 10, "valid": 10, "overview": [10, 16], "bucketf": [10, 11, 13, 15], "typo": 10, "60": 10, "lockfil": 10, "pin": 10, "python": [10, 11, 12], "git": 11, "com": 11, "run": [11, 16], "chang": 11, "log": 11, "date": 11, "latest": [11, 12, 15], "tag": 11, "For": [11, 16], "changes_0": 11, "md": 11, "order": [11, 14], "push": 11, "further": 11, "detail": [11, 16], "see": 11, "cd": 11, "yml": 11, "appropri": 11, "number": 11, "x": 11, "y": 11, "z": 11, "origin": 11, "d": 11, "remot": 11, "lead": 11, "start": 11, "process": 11, "begin": 11, "action": 11, "finish": 11, "redo": 11, "manual": 11, "scenario": 11, "publish": 11, "wa": 11, "got": 11, "interrupt": 11, "solut": 11, "pip": 12, "found": 12, "here": 12, "follow": 13, "describ": 13, "pattern": 13, "come": 13, "handi": 13, "import": [13, 14, 15, 16], "localhost": [13, 14, 16], "6666": [13, 14, 16], "w": [13, 14, 16], "write": [13, 14, 16], "default_bucket": [13, 14, 16], "io": [13, 14], "65": [13, 14], "some": [13, 14, 15], "file1": [13, 14], "bin": [13, 14], "open": [13, 14, 15], "myfile1": 13, "txt": [13, 14, 16], "rb": [13, 14], "destin": [13, 14], "file_lik": [13, 14], "bytesio": [13, 14], "b": [13, 14, 16], "file2": [13, 14], "conent": 13, "text": [13, 14], "abcd": [13, 14], "_": [13, 14], "rang": [13, 14, 16], "10": [13, 14], "as_byt": [13, 14, 16], "other": [13, 14], "as_fil": [13, 14], "myfil": [13, 14, 16], "my_utf8_str": [13, 14], "as_str": [13, 14], "utf8": [13, 14], "my_ascii_str": [13, 14], "ascii": [13, 14], "del": 13, "multipl": 14, "one": [14, 15, 16], "request": 14, "myfile2": 14, "back": 14, "caller": 14, "recept": 14, "effici": 14, "flexibl": 14, "memori": 14, "usag": 14, "most": 14, "prefer": 14, "tangibl": [14, 16], "as_hash": 14, "With": 15, "public": 15, "releas": 15, "want": 15, "artefact": 15, "repositori": 15, "exasol_bucketfs_utils_python": 15, "github_release_file_bucketfs_upload": 15, "githubreleasefilebucketfsupload": 15, "release_upload": 15, "file_to_download_nam": 15, "github_us": 15, "repository_nam": 15, "release_nam": 15, "path_inside_bucket": 15, "port": 15, "databas": 16, "straight": 16, "forward": 16, "fairli": 16, "complex": 16, "due": 16, "fact": 16, "each": 16, "worker": 16, "cluster": 16, "node": 16, "hold": 16, "bellow": 16, "tri": 16, "illustr": 16, "manner": 16, "pleas": 16, "look": 16, "document": 16, "get": 16, "advanc": 16, "artifact": 16}, "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, 14], "exasol": [0, 12], "bucketf": [0, 2, 3, 4, 5, 6, 7, 8, 9, 12, 14, 16], "servic": [0, 14], "bucket": [0, 13, 14], "as_byt": 0, "as_str": 0, "as_fil": 0, "as_hash": 0, "mappedbucket": [0, 13], "bucketfserror": 0, "chang": [1, 8], "util": [2, 3, 4], "python": [2, 3, 4, 5, 6, 7, 8, 9], "0": [2, 3, 4, 5, 6, 7, 8, 9], "1": 2, "releas": [2, 3, 4, 5, 6, 7, 8, 9, 11], "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, 12], "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], "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, 11], "unreleas": 10, "intern": 10, "develop": 11, "guid": [11, 16], "set": 11, "up": [11, 16], "workspac": 11, "checkout": 11, "project": 11, "instal": [11, 12], "setup": 11, "pre": 11, "commit": 11, "hook": 11, "": [11, 14], "creat": 11, "prerequisit": [11, 12], "trigger": 11, "what": 11, "do": 11, "fail": 11, "The": [11, 13, 14], "dure": 11, "check": 11, "One": 11, "step": 11, "partial": 11, "advanc": 13, "list": [13, 14], "file": [13, 14], "upload": [13, 14], "download": [13, 14], "from": [13, 14], "delet": [13, 14], "basic": 14, "get": 14, "class": 14, "avail": 14, "convert": 14, "github": 15, "artifact": 15, "user": 16, "quickstart": 16, "follow": 16}, "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"]], "Unreleased": [[10, "unreleased"]], "Feature": [[10, "feature"]], "Internal": [[10, "internal"]], "\ud83d\udee0 Developer Guide": [[11, "developer-guide"]], "Setting up the workspace": [[11, "setting-up-the-workspace"]], "Checkout the Project": [[11, "checkout-the-project"]], "Install project dependencies": [[11, "install-project-dependencies"]], "Setup pre-commit hook(s)": [[11, "setup-pre-commit-hook-s"]], "Creating a Release": [[11, "creating-a-release"]], "Prerequisites": [[11, "prerequisites"]], "Triggering the Release": [[11, "triggering-the-release"]], "What to do if the release failed?": [[11, "what-to-do-if-the-release-failed"]], "The release failed during pre-release checks": [[11, "the-release-failed-during-pre-release-checks"]], "One of the release steps failed (Partial Release)": [[11, "one-of-the-release-steps-failed-partial-release"]], "Exasol Bucketfs": [[12, "exasol-bucketfs"]], "\ud83d\ude80 Features": [[12, "features"]], "\ud83d\udd0c\ufe0f Prerequisites": [[12, "prerequisites"]], "\ud83d\udcbe Installation": [[12, "installation"]], "\ud83d\udcda Documentation": [[12, "documentation"]], "Advanced": [[13, "advanced"]], "The MappedBucket": [[13, "the-mappedbucket"]], "List files in a Bucket": [[13, "list-files-in-a-bucket"], [14, "list-files-in-a-bucket"]], "Upload files to a Bucket": [[13, "upload-files-to-a-bucket"], [14, "upload-files-to-a-bucket"]], "Download files from a Bucket": [[13, "download-files-from-a-bucket"], [14, "download-files-from-a-bucket"]], "Delete files from Bucket": [[13, "delete-files-from-bucket"], [14, "delete-files-from-bucket"]], "Basic\u2019s": [[14, "basic-s"]], "The Bucketfs Service": [[14, "the-bucketfs-service"]], "List buckets": [[14, "list-buckets"]], "Get a Bucket reference": [[14, "get-a-bucket-reference"]], "Bucket class": [[14, "bucket-class"]], "Available Converters": [[14, "available-converters"]], "Github Artifacts": [[15, "github-artifacts"]], "\ud83d\udc64 User Guide": [[16, "user-guide"]], "Bucketfs": [[16, "bucketfs"]], "Quickstart": [[16, "quickstart"]], "Follow Up": [[16, "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