Update requirements
authorKali Kaneko <kali@leap.se>
Fri, 23 Aug 2013 09:40:17 +0000 (11:40 +0200)
committerKali Kaneko <kali@leap.se>
Fri, 23 Aug 2013 09:40:17 +0000 (11:40 +0200)
* Use requirements.pip
* Update reqs

changes/bug_update-deps [new file with mode: 0644]
pkg/__init__.py [new file with mode: 0644]
pkg/requirements.pip
pkg/utils.py [new file with mode: 0644]
setup.py

diff --git a/changes/bug_update-deps b/changes/bug_update-deps
new file mode 100644 (file)
index 0000000..e34ff59
--- /dev/null
@@ -0,0 +1,2 @@
+  o Requirements in setup are taken fro requirements.pip
+  o Updated requirements.
diff --git a/pkg/__init__.py b/pkg/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index 141c325..9617d92 100644 (file)
@@ -1,10 +1,8 @@
-jsonschema<=0.8
+jsonschema  #<=0.8 -- are we done with this conflict?
 pyxdg
-protobuf
+protobuf>=2.4.1
+protobuf.socketrpc
 pyopenssl
 python-dateutil
-autopep8
-python-gnupg
-PyCrypto
 
-https://protobuf-socket-rpc.googlecode.com/files/protobuf.socketrpc-1.3.2.tar.gz
+#autopep8 -- ???
diff --git a/pkg/utils.py b/pkg/utils.py
new file mode 100644 (file)
index 0000000..deace14
--- /dev/null
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+# utils.py
+# Copyright (C) 2013 LEAP
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Utils to help in the setup process
+"""
+
+import os
+import re
+import sys
+
+
+def get_reqs_from_files(reqfiles):
+    """
+    Returns the contents of the top requirement file listed as a
+    string list with the lines
+
+    @param reqfiles: requirement files to parse
+    @type reqfiles: list of str
+    """
+    for reqfile in reqfiles:
+        if os.path.isfile(reqfile):
+            return open(reqfile, 'r').read().split('\n')
+
+
+def parse_requirements(reqfiles=['requirements.txt',
+                                 'requirements.pip',
+                                 'pkg/requirements.pip']):
+    """
+    Parses the requirement files provided.
+
+    Checks the value of LEAP_VENV_SKIP_PYSIDE to see if it should
+    return PySide as a dep or not. Don't set, or set to 0 if you want
+    to install it through pip.
+
+    @param reqfiles: requirement files to parse
+    @type reqfiles: list of str
+    """
+
+    requirements = []
+    skip_pyside = os.getenv("LEAP_VENV_SKIP_PYSIDE", "0") != "0"
+    for line in get_reqs_from_files(reqfiles):
+        # -e git://foo.bar/baz/master#egg=foobar
+        if re.match(r'\s*-e\s+', line):
+            pass
+            # do not try to do anything with externals on vcs
+            #requirements.append(re.sub(r'\s*-e\s+.*#egg=(.*)$', r'\1',
+                                #line))
+        # http://foo.bar/baz/foobar/zipball/master#egg=foobar
+        elif re.match(r'\s*https?:', line):
+            requirements.append(re.sub(r'\s*https?:.*#egg=(.*)$', r'\1',
+                                line))
+        # -f lines are for index locations, and don't get used here
+        elif re.match(r'\s*-f\s+', line):
+            pass
+
+        # argparse is part of the standard library starting with 2.7
+        # adding it to the requirements list screws distro installs
+        elif line == 'argparse' and sys.version_info >= (2, 7):
+            pass
+        elif line == 'PySide' and skip_pyside:
+            pass
+        # do not include comments
+        elif line.lstrip().startswith('#'):
+            pass
+        else:
+            if line != '':
+                requirements.append(line)
+
+    return requirements
index b675675..3cefe1b 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -19,20 +19,8 @@ setup file for leap.common
 """
 from setuptools import setup, find_packages
 
-# XXX parse pkg/requirements.pip
-requirements = [
-    "jsonschema",
-    "pyxdg",
-    'protobuf>=2.4.1',
-    'protobuf.socketrpc',
-    "PyOpenSSL",
-    "python-dateutil",
-    "PyCrypto",
-]
-
-#dependency_links = [
-    #"https://protobuf-socket-rpc.googlecode.com/files/protobuf.socketrpc-1.3.2.tar.gz#egg=protobuf.socketrpc"
-#]
+from pkg import utils
+parsed_reqs = utils.parse_requirements()
 
 tests_requirements = [
     'mock',
@@ -73,7 +61,7 @@ setup(
     #packages=find_packages('src', exclude=['leap.common.tests']),
     packages=find_packages('src'),
     test_suite='leap.common.tests',
-    install_requires=requirements,
+    install_requires=parsed_reqs,
     #dependency_links=dependency_links,
     tests_require=tests_requirements,
     include_package_data=True