Open an (uncompressed) tar archive 'name'. 'mode' is either 'r' to read from an existing archive, 'a' to append data to an existing file or 'w' to create a new file overwriting an existing one. 'mode' defaults to 'r'. If 'fileobj' is given, it is used for
(self, name=None, mode="r", fileobj=None, format=None,
tarinfo=None, dereference=None, ignore_zeros=None, encoding=None,
errors="surrogateescape", pax_headers=None, debug=None,
errorlevel=None, copybufsize=None, stream=False)
| 1743 | extraction_filter = None # The default filter for extraction. |
| 1744 | |
| 1745 | def __init__(self, name=None, mode="r", fileobj=None, format=None, |
| 1746 | tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, |
| 1747 | errors="surrogateescape", pax_headers=None, debug=None, |
| 1748 | errorlevel=None, copybufsize=None, stream=False): |
| 1749 | """Open an (uncompressed) tar archive 'name'. 'mode' is either 'r' to |
| 1750 | read from an existing archive, 'a' to append data to an existing |
| 1751 | file or 'w' to create a new file overwriting an existing one. 'mode' |
| 1752 | defaults to 'r'. |
| 1753 | If 'fileobj' is given, it is used for reading or writing data. If it |
| 1754 | can be determined, 'mode' is overridden by 'fileobj's mode. |
| 1755 | 'fileobj' is not closed, when TarFile is closed. |
| 1756 | """ |
| 1757 | modes = {"r": "rb", "a": "r+b", "w": "wb", "x": "xb"} |
| 1758 | if mode not in modes: |
| 1759 | raise ValueError("mode must be 'r', 'a', 'w' or 'x'") |
| 1760 | self.mode = mode |
| 1761 | self._mode = modes[mode] |
| 1762 | |
| 1763 | if not fileobj: |
| 1764 | if self.mode == "a" and not os.path.exists(name): |
| 1765 | # Create nonexistent files in append mode. |
| 1766 | self.mode = "w" |
| 1767 | self._mode = "wb" |
| 1768 | fileobj = bltn_open(name, self._mode) |
| 1769 | self._extfileobj = False |
| 1770 | else: |
| 1771 | if (name is None and hasattr(fileobj, "name") and |
| 1772 | isinstance(fileobj.name, (str, bytes))): |
| 1773 | name = fileobj.name |
| 1774 | if hasattr(fileobj, "mode"): |
| 1775 | self._mode = fileobj.mode |
| 1776 | self._extfileobj = True |
| 1777 | self.name = os.path.abspath(name) if name else None |
| 1778 | self.fileobj = fileobj |
| 1779 | |
| 1780 | self.stream = stream |
| 1781 | |
| 1782 | # Init attributes. |
| 1783 | if format is not None: |
| 1784 | self.format = format |
| 1785 | if tarinfo is not None: |
| 1786 | self.tarinfo = tarinfo |
| 1787 | if dereference is not None: |
| 1788 | self.dereference = dereference |
| 1789 | if ignore_zeros is not None: |
| 1790 | self.ignore_zeros = ignore_zeros |
| 1791 | if encoding is not None: |
| 1792 | self.encoding = encoding |
| 1793 | self.errors = errors |
| 1794 | |
| 1795 | if pax_headers is not None and self.format == PAX_FORMAT: |
| 1796 | self.pax_headers = pax_headers |
| 1797 | else: |
| 1798 | self.pax_headers = {} |
| 1799 | |
| 1800 | if debug is not None: |
| 1801 | self.debug = debug |
| 1802 | if errorlevel is not None: |
nothing calls this directly
no test coverage detected