summaryrefslogtreecommitdiffstats
path: root/dhpython/_defaults.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xdhpython/_defaults.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/dhpython/_defaults.py b/dhpython/_defaults.py
new file mode 100755
index 0000000..cf7537b
--- /dev/null
+++ b/dhpython/_defaults.py
@@ -0,0 +1,99 @@
+#! /usr/bin/python3
+# Copyright © 2013 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 logging
+from configparser import ConfigParser
+from os import environ
+from os.path import exists
+from subprocess import Popen, PIPE
+
+SUPPORTED = {
+ 'cpython2': [(2, 7)],
+ 'cpython3': [(3, 8)],
+ 'pypy': [(4, 0)]}
+DEFAULT = {
+ 'cpython2': (2, 7),
+ 'cpython3': (3, 8),
+ 'pypy': (4, 0)}
+
+log = logging.getLogger('dhpython')
+
+
+def cpython_versions(major):
+ result = [None, None]
+ ver = '' if major == 2 else '3'
+ supported = environ.get("DEBPYTHON{}_SUPPORTED".format(ver))
+ default = environ.get("DEBPYTHON{}_DEFAULT".format(ver))
+ if not supported or not default:
+ config = ConfigParser()
+ config.read("/usr/share/python{}/debian_defaults".format(ver))
+ if not default:
+ default = config.get('DEFAULT', 'default-version', fallback='')[6:]
+ if not supported:
+ supported = config.get('DEFAULT', 'supported-versions', fallback='')\
+ .replace('python', '')
+ if default:
+ try:
+ result[0] = tuple(int(i) for i in default.split('.'))
+ except Exception as err:
+ log.warn('invalid debian_defaults file: %s', err)
+ if supported:
+ try:
+ result[1] = tuple(tuple(int(j) for j in i.strip().split('.'))
+ for i in supported.split(','))
+ except Exception as err:
+ log.warn('invalid debian_defaults file: %s', err)
+ return result
+
+
+def from_file(fpath):
+ if not exists(fpath):
+ raise ValueError("missing interpreter: %s" % fpath)
+ command = "{} --version".format(fpath)
+ with Popen(command, shell=True, stdout=PIPE) as process:
+ stdout, stderr = process.communicate()
+ stdout = str(stdout, 'utf-8')
+
+ print(stdout)
+
+
+cpython2 = cpython_versions(2)
+cpython3 = cpython_versions(3)
+if cpython2[0]:
+ DEFAULT['cpython2'] = cpython2[0]
+if cpython3[0]:
+ DEFAULT['cpython3'] = cpython3[0]
+if cpython2[1]:
+ SUPPORTED['cpython2'] = cpython2[1]
+if cpython3[1]:
+ SUPPORTED['cpython3'] = cpython3[1]
+#from_file('/usr/bin/pypy')
+
+
+if __name__ == '__main__':
+ from sys import argv, stderr
+ if len(argv) != 3:
+ print('invalid number of arguments', file=stderr)
+ exit(1)
+ if argv[1] == 'default':
+ print('.'.join(str(i) for i in DEFAULT[argv[2]]))
+ elif argv[1] == 'supported':
+ print(','.join(('.'.join(str(i) for i in v) for v in SUPPORTED[argv[2]])))