404

[ Avaa Bypassed ]




Upload:

Command:

botdev@18.221.192.226: ~ $
#!/usr/bin/python3

import apt
import os
import subprocess

DEFAULT_DEPENDS_FILE='/usr/share/language-selector/data/pkg_depends'

class LanguageSupport:
    lang_country_map = None

    def __init__(self, apt_cache=None, depends_file=None):
        if apt_cache is None:
            self.apt_cache = apt.Cache()
        else:
            self.apt_cache = apt_cache

        self.pkg_depends = self._parse_pkg_depends(depends_file or
                DEFAULT_DEPENDS_FILE)

    def by_package_and_locale(self, package, locale, installed=False):
        '''Get language support packages for a package and locale.

        Note that this does not include support packages which are not specific
        to a particular trigger package, e. g. general language packs. To get
        those, call this with package==''.

        By default, only return packages which are not installed. If installed
        is True, return all packages instead.
        '''
        packages = []
        depmap = self.pkg_depends.get(package, {})

        # check explicit entries for that locale
        for pkglist in depmap.get(self._langcode_from_locale(locale), {}).values():
            for p in pkglist:
                if p in self.apt_cache:
                    packages.append(p)

        # check patterns for empty locale string (i. e. applies to any locale)
        for pattern_list in depmap.get('', {}).values():
            for pattern in pattern_list:
                for pkg_candidate in self._expand_pkg_pattern(pattern, locale):
                    if pkg_candidate in self.apt_cache:
                        packages.append(pkg_candidate)

        if not installed:
            # filter out installed packages
            packages = [p for p in packages if not self.apt_cache[p].installed]

        # exclude Fcitx packages if GNOME desktop
        desktop = os.environ.get('XDG_CURRENT_DESKTOP')
        if desktop and 'GNOME' in desktop.split(':'):
            for p in list(packages):
                if p.startswith('fcitx'):
                    packages.remove(p)

        # exclude hunspell-de-XX since they conflict with -frami
        for country in ['de', 'at', 'ch']:
            if 'hunspell-de-' + country in packages:
                packages.remove('hunspell-de-' + country)

        # exclude hunspell-gl since it conflicts with hunspell-gl-es
        # https://launchpad.net/bugs/1578821
        if 'hunspell-gl' in packages:
                packages.remove('hunspell-gl')

        return packages

    def by_locale(self, locale, installed=False):
        '''Get language support packages for a locale.

        Return all packages which need to be installed in order to provide
        language support for the given locale for all already installed
        packages. This should be called after adding a new locale to the
        system.

        By default, only return packages which are not installed. If installed
        is True, return all packages instead.
        '''
        packages = []

        for trigger in self.pkg_depends:
            try:
                if trigger == '' or self.apt_cache[trigger].installed:
                    packages += self.by_package_and_locale(trigger, locale, installed)
            except KeyError:
                continue

        return packages

    def by_package(self, package, installed=False):
        '''Get language support packages for a package.

        This will install language support for that package for all available
        system languages. This is a wrapper around available_languages() and
        by_package_and_locale().

        Note that this does not include support packages which are not specific
        to a particular trigger package, e. g. general language packs. To get
        those, call this with package==''.

        By default, only return packages which are not installed. If installed
        is True, return all packages instead.
        '''
        packages = set()
        for lang in self.available_languages():
            packages.update(self.by_package_and_locale(package, lang, installed))
        return packages

    def missing(self, installed=False):
        '''Get language support packages for current system.

        Return all packages which need to be installed in order to provide
        language support all system locales for all already installed
        packages. This should be called after installing the system without
        language support packages (perhaps because there was no network
        available to download them).

        This is a wrapper around available_languages() and by_locale().

        By default, only return packages which are not installed. If installed
        is True, return all packages instead.
        '''
        packages = set()
        for lang in self.available_languages():
                packages.update(self.by_locale(lang, installed))

        return packages

    def available_languages(self):
        '''List available languages in the system.

        The list items can be passed as the "locale" argument of by_locale(),
        by_package_and_locale(), etc.
        '''
        languages = set()

        lang_string = subprocess.check_output(
            ['/usr/share/language-tools/language-options'],
            universal_newlines=True)

        for lang in lang_string.split():
            languages.add(lang)
            if not lang.startswith('zh_'):
                languages.add(lang.split('_')[0])
        if os.path.isdir('/usr/share/locale-langpack/en') == False:
            languages.discard('en')

        return languages

    def _parse_pkg_depends(self, filename):
        '''Parse pkg_depends file.

        Return trigger_package -> langcode -> category -> [dependency,...] map.
        '''
        map = {}
        with open(filename) as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith('#'):
                    continue

                (cat, lc, trigger, dep) = line.split(':')
                map.setdefault(trigger, {}).setdefault(lc, {}).setdefault(cat,
                        []).append(dep)

        return map

    @classmethod
    def _langcode_from_locale(klass, locale):
        '''Turn a locale name into a language code as in pkg_depends.'''

        # special-case Chinese locales, as they are split between -hans and
        # -hant
        if locale.startswith('zh_CN') or locale.startswith('zh_SG'):
            return 'zh-hans'
        # Hong Kong and Taiwan use traditional
        if locale.startswith('zh_'):
            return 'zh-hant'

        return locale.split('_', 1)[0]

    @classmethod
    def _expand_pkg_pattern(klass, pattern, locale):
        '''Return all possible suffixes for given pattern and locale'''

        # people might call this with the pseudo-locales "zh-han[st]", support
        # these as well; we can only guess the country here.
        if locale == 'zh-hans':
            locale = 'zh_CN'
        elif locale == 'zh-hant':
            locale = 'zh_TW'

        locale = locale.split('.', 1)[0].lower()
        variant = None
        country = None
        try:
            (lang, country) = locale.split('_', 1)
            if '@' in country:
                (country, variant) = country.split('@', 1)
        except ValueError:
            lang = locale

        pkgs = [pattern,
                '%s%s' % (pattern, lang)]

        if country:
            pkgs.append('%s%s%s' % (pattern, lang, country))
            pkgs.append('%s%s-%s' % (pattern, lang, country))
        else:
            for country in klass._countries_for_lang(lang):
                pkgs.append('%s%s%s' % (pattern, lang, country))
                pkgs.append('%s%s-%s' % (pattern, lang, country))

        if variant:
            pkgs.append('%s%s-%s' % (pattern, lang, variant))

        if country and variant:
            pkgs.append('%s%s-%s-%s' % (pattern, lang, country, variant))

        # special-case Chinese
        if lang == 'zh':
            if country in ['cn', 'sg']:
                pkgs.append(pattern + 'zh-hans')
            else:
                pkgs.append(pattern + 'zh-hant')

        return pkgs

    @classmethod
    def _countries_for_lang(klass, lang):
        '''Return a list of countries for given language'''

        if klass.lang_country_map is None:
            klass.lang_country_map = {}
            # fill cache
            with open('/usr/share/i18n/SUPPORTED') as f:
                for line in f:
                    line = line.split('#', 1)[0].split(' ')[0]
                    if not line:
                        continue
                    line = line.split('.', 1)[0].split('@')[0]
                    try:
                        (l, c) = line.split('_')
                    except ValueError:
                        continue
                    c = c.lower()
                    klass.lang_country_map.setdefault(l, set()).add(c)

        return klass.lang_country_map.get(lang, [])

def apt_cache_add_language_packs(resolver, cache, depends_file=None):
    '''Add language support for packages marked for installation.
    
    For all packages which are marked for installation in the given apt.Cache()
    object, mark the corresponding language packs and support packages for
    installation as well.

    This function can be used as an aptdaemon modify_cache_after plugin.
    '''
    ls = LanguageSupport(cache, depends_file)
    support_pkgs = set()
    for pkg in cache.get_changes():
        if pkg.marked_install:
            support_pkgs.update(ls.by_package(pkg.name))

    for pkg in support_pkgs:
        cache[pkg].mark_install(from_user=False)

def packagekit_what_provides_locale(cache, type, search, depends_file=None):
    '''PackageKit WhatProvides plugin for locale().'''

    if not search.startswith('locale('):
        raise NotImplementedError('cannot handle query type ' + search)

    locale = search.split('(', 1)[1][:-1]
    ls = LanguageSupport(cache, depends_file)
    pkgs = ls.by_locale(locale, installed=True)
    return [cache[p] for p in pkgs]


Filemanager

Name Type Size Permission Actions
Automat-0.6.0.egg-info Folder 0755
CommandNotFound Folder 0755
ConfigArgParse-0.11.0.egg-info Folder 0755
Crypto Folder 0755
DistUpgrade Folder 0755
HweSupportStatus Folder 0755
Jinja2-2.10.egg-info Folder 0755
LanguageSelector Folder 0755
MarkupSafe-1.0.egg-info Folder 0755
OpenSSL Folder 0755
PyJWT-1.5.3.egg-info Folder 0755
SecretStorage-2.3.1.egg-info Folder 0755
Twisted-17.9.0.egg-info Folder 0755
UpdateManager Folder 0755
__pycache__ Folder 0755
acme Folder 0755
acme-0.31.0.egg-info Folder 0755
apport Folder 0755
apt Folder 0755
aptsources Folder 0755
asn1crypto Folder 0755
asn1crypto-0.24.0.egg-info Folder 0755
attr Folder 0755
attrs-17.4.0.egg-info Folder 0755
automat Folder 0755
bcrypt Folder 0755
bcrypt-3.1.4.egg-info Folder 0755
blinker Folder 0755
certbot Folder 0755
certbot-0.31.0.egg-info Folder 0755
certbot_apache Folder 0755
certbot_apache-0.31.0.egg-info Folder 0755
certifi Folder 0755
certifi-2018.1.18.egg-info Folder 0755
chardet Folder 0755
chardet-3.0.4.egg-info Folder 0755
click Folder 0755
click-6.7.egg-info Folder 0755
cloud_init-23.1.2.egg-info Folder 0755
cloudinit Folder 0755
colorama Folder 0755
colorama-0.3.7.egg-info Folder 0755
configobj-5.0.6.egg-info Folder 0755
constantly Folder 0755
constantly-15.1.0.egg-info Folder 0755
cryptography Folder 0755
cryptography-2.1.4.egg-info Folder 0755
dbus Folder 0755
debian Folder 0755
debian_bundle Folder 0755
distro-1.0.1.egg-info Folder 0755
distro_info-0.18ubuntu0.18.04.1.egg-info Folder 0755
distro_info_test Folder 0755
dns Folder 0755
dnspython-1.15.0.egg-info Folder 0755
future Folder 0755
future-0.15.2.egg-info Folder 0755
gi Folder 0755
httplib2 Folder 0755
hyperlink Folder 0755
hyperlink-17.3.1.egg-info Folder 0755
icu Folder 0755
idna Folder 0755
idna-2.6.egg-info Folder 0755
incremental Folder 0755
incremental-16.10.1.egg-info Folder 0755
janitor Folder 0755
jinja2 Folder 0755
josepy Folder 0755
josepy-1.1.0.egg-info Folder 0755
jsonpatch-1.16.egg-info Folder 0755
jsonpointer-1.10.egg-info Folder 0755
jsonschema Folder 0755
jsonschema-2.6.0.egg-info Folder 0755
jwt Folder 0755
keyring Folder 0755
keyring-10.6.0.egg-info Folder 0755
keyrings Folder 0755
keyrings.alt-3.0.egg-info Folder 0755
landscape Folder 0755
language_selector-0.1.egg-info Folder 0755
libfuturize Folder 0755
libpasteurize Folder 0755
markupsafe Folder 0755
mock Folder 0755
mock-2.0.0.egg-info Folder 0755
ndg Folder 0755
ndg_httpsclient-0.4.4.egg-info Folder 0755
netifaces-0.10.4.egg-info Folder 0755
oauthlib Folder 0755
oauthlib-2.0.6.egg-info Folder 0755
parsedatetime Folder 0755
parsedatetime-2.4.egg-info Folder 0755
past Folder 0755
pbr Folder 0755
pbr-3.1.1.egg-info Folder 0755
pexpect Folder 0755
pip Folder 0755
pip-9.0.1.egg-info Folder 0755
pkg_resources Folder 0755
proton Folder 0755
proton_client-0.7.1.egg-info Folder 0755
protonvpn_cli Folder 0755
protonvpn_cli-3.13.0.egg-info Folder 0755
protonvpn_nm_lib Folder 0755
protonvpn_nm_lib-3.16.0.egg-info Folder 0755
ptyprocess Folder 0755
pyOpenSSL-17.5.0.egg-info Folder 0755
pyRFC3339-1.0.egg-info Folder 0755
pyasn1 Folder 0755
pyasn1-0.4.2.egg-info Folder 0755
pyasn1_modules Folder 0755
pygtkcompat Folder 0755
pyrfc3339 Folder 0755
python_debian-0.1.32.egg-info Folder 0755
pytz Folder 0755
pytz-2018.3.egg-info Folder 0755
requests_toolbelt Folder 0755
requests_toolbelt-0.8.0.egg-info Folder 0755
requests_unixsocket Folder 0755
requests_unixsocket-0.1.5.egg-info Folder 0755
secretstorage Folder 0755
serial Folder 0755
service_identity Folder 0755
service_identity-16.0.0.egg-info Folder 0755
setuptools Folder 0755
setuptools-39.0.1.egg-info Folder 0755
six-1.11.0.egg-info Folder 0755
softwareproperties Folder 0755
sos Folder 0755
ssh_import_id Folder 0755
ssh_import_id-5.7.egg-info Folder 0755
systemd Folder 0755
twisted Folder 0755
uaclient Folder 0755
ubuntu_advantage_tools-8001.egg-info Folder 0755
ufw Folder 0755
unattended_upgrades-0.1.egg-info Folder 0755
urllib3 Folder 0755
urllib3-1.22.egg-info Folder 0755
wheel Folder 0755
wheel-0.30.0.egg-info Folder 0755
xdg Folder 0755
yaml Folder 0755
zope Folder 0755
zope.component-4.3.0.egg-info Folder 0755
zope.event-4.2.0.egg-info Folder 0755
zope.hookable-4.0.4.egg-info Folder 0755
zope.interface-4.3.2.egg-info Folder 0755
PAM-0.4.2.egg-info File 193 B 0644
PAM.cpython-36m-x86_64-linux-gnu.so File 19.42 KB 0644
PyICU-1.9.8.egg-info File 10.32 KB 0644
PyICU.py File 1.43 KB 0644
PyYAML-3.12.egg-info File 1.48 KB 0644
README.txt File 119 B 0644
_cffi_backend.cpython-36m-x86_64-linux-gnu.so File 165.56 KB 0644
_dbus_bindings.cpython-36m-x86_64-linux-gnu.so File 155.67 KB 0644
_dbus_glib_bindings.cpython-36m-x86_64-linux-gnu.so File 18.7 KB 0644
_icu.cpython-36m-x86_64-linux-gnu.so File 710.82 KB 0644
_snack.cpython-36m-x86_64-linux-gnu.so File 42.59 KB 0644
_version.py File 21 B 0644
_yaml.cpython-36m-x86_64-linux-gnu.so File 220.16 KB 0644
apport_python_hook.py File 7.87 KB 0644
apt_inst.cpython-36m-x86_64-linux-gnu.so File 50.37 KB 0644
apt_inst.pyi File 227 B 0644
apt_pkg.cpython-36m-x86_64-linux-gnu.so File 338.66 KB 0644
apt_pkg.pyi File 8.69 KB 0644
augeas.py File 23 KB 0644
blinker-1.4.egg-info File 3.81 KB 0644
command_not_found-0.3.egg-info File 189 B 0644
configargparse.py File 40.35 KB 0644
configobj.py File 87.51 KB 0644
deb822.py File 146 B 0644
debconf.py File 6.61 KB 0644
dialog.py File 151.75 KB 0644
distro.py File 37.45 KB 0644
distro_info.py File 10.68 KB 0644
easy_install.py File 126 B 0644
gnupg.py File 52.79 KB 0644
httplib2-0.9.2.egg-info File 2.22 KB 0644
jsonpatch.py File 26.19 KB 0644
jsonpointer.py File 9.15 KB 0644
language_support_pkgs.py File 9.89 KB 0644
lsb_release.py File 14.09 KB 0644
netifaces.cpython-36m-x86_64-linux-gnu.so File 18.59 KB 0644
pexpect-4.2.1.egg-info File 2.23 KB 0644
problem_report.py File 26.28 KB 0644
pyasn1_modules-0.2.1.egg-info File 1.68 KB 0644
pycrypto-2.6.1.egg-info File 666 B 0644
pygobject-3.26.1.egg-info File 1013 B 0644
pyserial-3.4.egg-info File 1.62 KB 0644
python_apt-1.6.6.egg-info File 226 B 0644
python_augeas-0.5.0.egg-info File 238 B 0644
python_gnupg-0.4.1.egg-info File 1.46 KB 0644
pythondialog-3.4.0.egg-info File 13.7 KB 0644
pyxdg-0.25.egg-info File 576 B 0644
six.py File 30.16 KB 0644
snack.py File 30.4 KB 0644
sos-4.4.egg-info File 312 B 0644
systemd_python-234.egg-info File 586 B 0644
ufw-0.36.egg-info File 261 B 0644
validate.py File 46.13 KB 0644
zope.component-4.3.0-nspkg.pth File 529 B 0644
zope.event-4.2.0-nspkg.pth File 299 B 0644
zope.hookable-4.0.4-nspkg.pth File 529 B 0644
zope.interface-4.3.2-nspkg.pth File 529 B 0644