File: generate_fallback_list.py

package info (click to toggle)
python-defaults 2.7.16-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 856 kB
  • sloc: python: 2,342; makefile: 564; sh: 203; perl: 7
file content (77 lines) | stat: -rwxr-xr-x 3,114 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#! /usr/bin/python
# -*- coding: UTF-8 -*-
# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

import os
import sys
from subprocess import Popen, PIPE

skip_sensible_names = True if '--skip-sensible-names' in sys.argv else False
os.chdir(os.path.dirname(__file__))
if os.path.isdir('../debpython'):
    sys.path.append('..')
else:
    sys.path.append('/usr/share/python/debpython/')
from debpython.pydist import sensible_pname


if not os.path.isdir('cache'):
    process = Popen('apt-file -s sources.list -c cache update', shell=True)
    process.communicate()
    if process.returncode != 0:
        sys.stderr.write('Cannot download APT data files')
        exit(1)

# find .egg-info files/directories
process = Popen('apt-file -s sources.list -c cache find -x '
                '"/usr/((share/pyshared)|(lib/python2\.[0-9]/((site)|(dist))-packages)|(share/python-support/[^/]+))/[^/]*\.egg-info"',
                shell=True, stdout=PIPE)
stdout, stderr = process.communicate()
if process.returncode != 0:
    sys.stderr.write('Cannot find packages with Egg metadata')
    exit(2)

processed = set()
result = []
for line in stdout.splitlines():
    pname, path = line.split(': ', 1)
    if pname == 'python-setuptools':
        continue
    egg_name = [i.split('-', 1)[0] for i in path.split('/')\
                if i.endswith('.egg-info')][0]
    if egg_name.endswith('.egg'):
        egg_name = egg_name[:-4]
    if skip_sensible_names and sensible_pname(egg_name) == pname:
        continue
    if egg_name not in processed:
        processed.add(egg_name)
        result.append("%s %s\n" % (egg_name, pname))
        #result.append("%s %s\t%s\n" % (egg_name, pname, path))

result.sort()
fp = open('dist_fallback', 'w')
fp.write('python python\n')
fp.write('setuptools python-pkg-resources\n')
fp.write('wsgiref python (>= 2.5) | python-wsgiref\n')
fp.write('argparse python (>= 2.7) | python-argparse\n')
# wasn't recognized due to .pth file (egg-info is in PIL/ and not in *-packages/)
fp.write('pil python-imaging\n')
fp.writelines(result)