summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsebres <serg.brester@sebres.de>2016-08-11 19:57:40 +0200
committersebres <serg.brester@sebres.de>2016-08-11 21:35:13 +0200
commit08af8de98171ad37a190dfaafccd629c83afe1a1 (patch)
treef6b155698086c15e264104b35d06fa2b55f24232
parent77f451c4a38f60fabfa58e8b0a17d399bf7c7f05 (diff)
downloadfail2ban-08af8de98171ad37a190dfaafccd629c83afe1a1.tar.gz
compatibility fix (virtualenv, running test cases in py3)
-rw-r--r--MANIFEST1
-rwxr-xr-xbin/fail2ban-testcases3
-rw-r--r--fail2ban/helpers.py18
-rw-r--r--fail2ban/setup.py42
-rw-r--r--fail2ban/tests/misctestcase.py33
-rwxr-xr-xsetup.py18
6 files changed, 70 insertions, 45 deletions
diff --git a/MANIFEST b/MANIFEST
index 36110c83..512b1d03 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -200,6 +200,7 @@ fail2ban/server/strptime.py
fail2ban/server/ticket.py
fail2ban/server/transmitter.py
fail2ban/server/utils.py
+fail2ban/setup.py
fail2ban-testcases-all
fail2ban-testcases-all-python3
fail2ban/tests/action_d/__init__.py
diff --git a/bin/fail2ban-testcases b/bin/fail2ban-testcases
index dcc55421..34d392e4 100755
--- a/bin/fail2ban-testcases
+++ b/bin/fail2ban-testcases
@@ -38,7 +38,8 @@ if os.path.exists("fail2ban/__init__.py"):
from fail2ban.version import version
from fail2ban.tests.utils import gatherTests
-from fail2ban.helpers import updatePyExec, FormatterWithTraceBack, getLogger
+from fail2ban.helpers import FormatterWithTraceBack, getLogger
+from fail2ban.setup import updatePyExec
from fail2ban.server.mytime import MyTime
from optparse import OptionParser, Option
diff --git a/fail2ban/helpers.py b/fail2ban/helpers.py
index 99210b17..7660e64a 100644
--- a/fail2ban/helpers.py
+++ b/fail2ban/helpers.py
@@ -118,24 +118,6 @@ class FormatterWithTraceBack(logging.Formatter):
return logging.Formatter.format(self, record)
-def updatePyExec(bindir, executable=None):
- """Update fail2ban-python link to current python version (where f2b-modules located/installed)
- """
- bindir = os.path.realpath(bindir)
- if executable is None:
- executable = sys.executable
- pypath = os.path.join(bindir, 'fail2ban-python')
- # if not exists or point to another version - update link:
- isfile = os.path.isfile(pypath)
- if not isfile or os.path.realpath(pypath) != os.path.realpath(executable):
- if isfile:
- os.unlink(pypath)
- os.symlink(executable, pypath)
- # extend current environment path (e.g. if fail2ban not yet installed):
- if bindir not in os.environ["PATH"].split(os.pathsep):
- os.environ["PATH"] = os.environ["PATH"] + os.pathsep + bindir;
-
-
def getLogger(name):
"""Get logging.Logger instance with Fail2Ban logger name convention
"""
diff --git a/fail2ban/setup.py b/fail2ban/setup.py
new file mode 100644
index 00000000..87d50e66
--- /dev/null
+++ b/fail2ban/setup.py
@@ -0,0 +1,42 @@
+# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: t -*-
+# vi: set ft=python sts=4 ts=4 sw=4 noet :
+
+# This file is part of Fail2Ban.
+#
+# Fail2Ban 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 2 of the License, or
+# (at your option) any later version.
+#
+# Fail2Ban 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 Fail2Ban; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+__author__ = "Serg G. Brester"
+__license__ = "GPL"
+
+import os
+import sys
+
+
+def updatePyExec(bindir, executable=None):
+ """Update fail2ban-python link to current python version (where f2b-modules located/installed)
+ """
+ bindir = os.path.realpath(bindir)
+ if executable is None:
+ executable = sys.executable
+ pypath = os.path.join(bindir, 'fail2ban-python')
+ # if not exists or point to another version - update link:
+ isfile = os.path.isfile(pypath)
+ if not isfile or os.path.realpath(pypath) != os.path.realpath(executable):
+ if isfile:
+ os.unlink(pypath)
+ os.symlink(executable, pypath)
+ # extend current environment path (e.g. if fail2ban not yet installed):
+ if bindir not in os.environ["PATH"].split(os.pathsep):
+ os.environ["PATH"] = os.environ["PATH"] + os.pathsep + bindir;
diff --git a/fail2ban/tests/misctestcase.py b/fail2ban/tests/misctestcase.py
index b910d94c..7028eeb1 100644
--- a/fail2ban/tests/misctestcase.py
+++ b/fail2ban/tests/misctestcase.py
@@ -71,16 +71,21 @@ class HelpersTest(unittest.TestCase):
self.assertEqual(splitwords(' 1\n 2, 3'), ['1', '2', '3'])
+if sys.version_info >= (2,7):
+ def _sh_call(cmd):
+ import subprocess, locale
+ ret = subprocess.check_output(cmd, shell=True)
+ if sys.version_info >= (3,):
+ ret = ret.decode(locale.getpreferredencoding(), 'replace')
+ return str(ret).rstrip()
+else:
+ def _sh_call(cmd):
+ import subprocess
+ ret = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read()
+ return str(ret).rstrip()
+
def _getSysPythonVersion():
- import subprocess, locale
- sysVerCmd = "fail2ban-python -c 'import sys; print(tuple(sys.version_info))'"
- if sys.version_info >= (2,7):
- sysVer = subprocess.check_output(sysVerCmd, shell=True)
- else:
- sysVer = subprocess.Popen(sysVerCmd, shell=True, stdout=subprocess.PIPE).stdout.read()
- if sys.version_info >= (3,):
- sysVer = sysVer.decode(locale.getpreferredencoding(), 'replace')
- return str(sysVer).rstrip()
+ return _sh_call("fail2ban-python -c 'import sys; print(tuple(sys.version_info))'")
class SetupTest(unittest.TestCase):
@@ -144,9 +149,13 @@ class SetupTest(unittest.TestCase):
'etc/fail2ban/jail.conf'):
self.assertTrue(os.path.exists(os.path.join(tmp, f)),
msg="Can't find %s" % f)
- self.assertEqual(
- os.path.realpath(os.path.join(tmp, 'usr/local/bin/fail2ban-python')),
- os.path.realpath(sys.executable))
+ # Because the install (test) path in virtual-env differs from some development-env,
+ # it is not a `tmp + '/usr/local/bin/'`, so search for it:
+ installedPath = _sh_call('find ' + tmp+ ' -name fail2ban-python').split('\n')
+ self.assertTrue(len(installedPath) > 0)
+ for installedPath in installedPath:
+ self.assertEqual(
+ os.path.realpath(installedPath), os.path.realpath(sys.executable))
finally:
# clean up
diff --git a/setup.py b/setup.py
index fa66d4d6..be1fe685 100755
--- a/setup.py
+++ b/setup.py
@@ -47,20 +47,7 @@ import sys
import warnings
from glob import glob
-
-def updatePyExec(bindir, executable=None):
- """Update fail2ban-python link to current python version (where f2b-modules located/installed)
- """
- bindir = os.path.realpath(bindir)
- if executable is None:
- executable = sys.executable
- pypath = os.path.join(bindir, 'fail2ban-python')
- # if not exists or point to another version - update link:
- isfile = os.path.isfile(pypath)
- if not isfile or os.path.realpath(pypath) != os.path.realpath(executable):
- if isfile:
- os.unlink(pypath)
- os.symlink(executable, pypath)
+from fail2ban.setup import updatePyExec
# Wrapper to install python binding (to current python version):
@@ -78,6 +65,9 @@ class install_scripts_f2b(install_scripts):
return outputs
+# Update fail2ban-python env to current python version (where f2b-modules located/installed)
+updatePyExec(os.path.join(os.path.dirname(__file__), 'bin'))
+
if setuptools and "test" in sys.argv:
import logging
logSys = logging.getLogger("fail2ban")