From 15cba140f00e97fbda35407d57a7f910dbd0a82e Mon Sep 17 00:00:00 2001
From: Philip ABBET <philip.abbet@idiap.ch>
Date: Wed, 9 Nov 2016 09:41:08 +0100
Subject: [PATCH] Now use the 'docker' branch of beat.core

---
 beat/web/backend/tests.py  |  8 ++------
 beat/web/backend/utils.py  | 35 +++++++++++++++++++++++++++++++++++
 beat/web/backend/views.py  |  2 +-
 beat/web/scripts/worker.py |  2 +-
 buildout.cfg               |  4 ++--
 5 files changed, 41 insertions(+), 10 deletions(-)
 mode change 100644 => 100755 beat/web/backend/tests.py
 mode change 100644 => 100755 beat/web/backend/utils.py
 mode change 100644 => 100755 beat/web/backend/views.py
 mode change 100644 => 100755 beat/web/scripts/worker.py

diff --git a/beat/web/backend/tests.py b/beat/web/backend/tests.py
old mode 100644
new mode 100755
index 977a23842..cebfc4368
--- a/beat/web/backend/tests.py
+++ b/beat/web/backend/tests.py
@@ -2093,10 +2093,8 @@ class Working(BaseBackendTestCase):
 
     def setUp(self):
 
-        from beat.core.async import resolve_cpulimit_path
-        self.cpulimit = resolve_cpulimit_path(None)
-
         from . import utils
+        self.cpulimit = utils.resolve_cpulimit_path(None)
         self.process = utils.resolve_process_path()
         self.environments = utils.find_environments(None)
         self.env1_execute = self.environments['environment (1)']['execute']
@@ -2548,10 +2546,8 @@ class WorkingExternally(TransactionTestCase):
 
     def setUp(self):
 
-        from beat.core.async import resolve_cpulimit_path
-        self.cpulimit = resolve_cpulimit_path(None)
-
         from . import utils
+        self.cpulimit = utils.resolve_cpulimit_path(None)
         self.process = utils.resolve_process_path()
         self.environments = utils.find_environments(None)
 
diff --git a/beat/web/backend/utils.py b/beat/web/backend/utils.py
old mode 100644
new mode 100755
index bda58d941..209cd9bdf
--- a/beat/web/backend/utils.py
+++ b/beat/web/backend/utils.py
@@ -32,6 +32,7 @@ import sys
 import fnmatch
 import glob
 import time
+import distutils.spawn
 
 import logging
 logger = logging.getLogger(__name__)
@@ -409,3 +410,37 @@ def pick_execute(split, environments):
     # Check we have a compatible environment to execute the user algorithm
     envinfo = environments.get(split.job.block.environment.fullname())
     return envinfo['execute'] if envinfo else None
+
+
+def resolve_cpulimit_path(exe):
+  '''Returns the path to cpulimit'''
+  FIXED_LOCATIONS = [
+          '/usr/local/bin/cpulimit',
+          '/opt/local/bin/cpulimit',
+          '/usr/bin/cpulimit',
+          ]
+  default = os.path.join(
+          os.path.dirname(os.path.realpath(sys.argv[0])),
+          'cpulimit',
+          )
+  retval = exe or default
+  # See if we find it in parallel, installed with our interpreter
+  if not os.path.exists(retval):
+    cand = os.path.join(os.path.dirname(sys.executable), 'cpulimit')
+    if os.path.exists(cand): retval = cand
+  # Try to see if the PATH variable is set
+  if not os.path.exists(retval):
+    try:
+      retval = distutils.spawn.find_executable('cpulimit')
+    except KeyError: #missing PATH variable
+      retval = None
+  # Try fixed locations
+  if not retval:
+    for k in FIXED_LOCATIONS:
+      if os.path.exists(k):
+        retval = k
+  if not retval:
+    raise IOError("I cannot the find a `cpulimit' binary on your system or " \
+            "the value you provided is not valid (%s) or the symbolic link " \
+            "(%s) is not properly set" % (exe, default))
+  return retval
diff --git a/beat/web/backend/views.py b/beat/web/backend/views.py
old mode 100644
new mode 100755
index e954598b6..c86e05641
--- a/beat/web/backend/views.py
+++ b/beat/web/backend/views.py
@@ -42,7 +42,7 @@ from django.contrib.auth.decorators import login_required
 from django.http import HttpResponseForbidden
 from django.contrib import messages
 
-from beat.core.async import resolve_cpulimit_path
+from .utils import resolve_cpulimit_path
 
 from ..experiments.models import Experiment
 
diff --git a/beat/web/scripts/worker.py b/beat/web/scripts/worker.py
old mode 100644
new mode 100755
index c4a257ce3..a78c66c4f
--- a/beat/web/scripts/worker.py
+++ b/beat/web/scripts/worker.py
@@ -126,7 +126,7 @@ def main(user_input=None):
             arguments['--name'])
 
     # figure out paths to programs I need to use
-    from beat.core.async import resolve_cpulimit_path
+    from ..backend.utils import resolve_cpulimit_path
     cpulimit = resolve_cpulimit_path(arguments['--cpulimit'])
     logger.debug("(path) cpulimit: `%s'", cpulimit)
     process = utils.resolve_process_path()
diff --git a/buildout.cfg b/buildout.cfg
index ba44f3b0f..50747a188 100644
--- a/buildout.cfg
+++ b/buildout.cfg
@@ -15,7 +15,7 @@ develop = .
 versions = versions
 
 [versions]
-django = >=1.8,<1.9
+django = >=1.9,<1.10
 django-rest-swagger = >=0.3.2,<0.3.3
 django-guardian = >=1.3
 djangorestframework = >=3.2,<3.3
@@ -85,7 +85,7 @@ eggs = alabaster
        wsgiref
 
 [sources]
-beat.core = git git@gitlab.idiap.ch:beat/beat.core
+beat.core = git git@gitlab.idiap.ch:beat/beat.core branch=docker
 beat.cmdline = git git@gitlab.idiap.ch:beat/beat.cmdline
 beat.backend.python = git git@gitlab.idiap.ch:beat/beat.backend.python
 beat.examples = git git@gitlab.idiap.ch:beat/beat.examples egg=false
-- 
GitLab