Abstracting the methods to get URL or extra dir
authorFrederic Massart <fred@moodle.com>
Wed, 5 Nov 2014 02:20:16 +0000 (10:20 +0800)
committerFrederic Massart <fred@moodle.com>
Wed, 5 Nov 2014 02:21:52 +0000 (10:21 +0800)
mdk/commands/create.py
mdk/commands/doctor.py
mdk/commands/install.py
mdk/moodle.py
mdk/phpunit.py
mdk/workplace.py

index ba85f9c..f89ccda 100644 (file)
@@ -199,7 +199,8 @@ class CreateCommand(Command):
                 'dbname': dbname,
                 'dropDb': dropDb,
                 'fullname': fullname,
-                'dataDir': self.Wp.getPath(name, 'data')
+                'dataDir': self.Wp.getPath(name, 'data'),
+                'wwwroot': self.Wp.getUrl(name)
             }
             try:
                 M.install(**kwargs)
index 60352ab..d80d395 100644 (file)
@@ -24,7 +24,6 @@ http://github.com/FMCorz/mdk
 
 import os
 import shutil
-import imp
 import subprocess
 from .. import git
 from ..command import Command
@@ -358,16 +357,13 @@ class DoctorCommand(Command):
 
         instances = self.Wp.resolveMultiple(self.Wp.list())
 
-        wwwroot = '%s://%s/' % (self.C.get('scheme'), self.C.get('host'))
-        if self.C.get('path') != '' and self.C.get('path') != None:
-            wwwroot = wwwroot + self.C.get('path') + '/'
 
         for M in instances:
             if not M.isInstalled():
                 continue
             else:
                 actual = M.get('wwwroot')
-                expected = wwwroot + M.get('identifier')
+                expected = self.Wp.getUrl(M.get('identifier'))
                 if actual != expected:
                     print '  %s: Found %s, not %s' % (M.get('identifier'), actual, expected)
                     if args.fix:
index 5e595e0..2fe16e2 100644 (file)
@@ -93,7 +93,8 @@ class InstallCommand(Command):
         kwargs = {
             'engine': engine,
             'fullname': fullname,
-            'dataDir': dataDir
+            'dataDir': dataDir,
+            'wwwroot': self.Wp.getUrl(name)
         }
         M.install(**kwargs)
 
index 4341b6d..318eb33 100644 (file)
@@ -398,12 +398,14 @@ class Moodle(object):
             info[k] = v
         return info
 
-    def install(self, dbname=None, engine=None, dataDir=None, fullname=None, dropDb=False):
+    def install(self, dbname=None, engine=None, dataDir=None, fullname=None, dropDb=False, wwwroot=None):
         """Launch the install script of an Instance"""
 
         if self.isInstalled():
             raise InstallException('Instance already installed!')
 
+        if not wwwroot:
+            raise InstallException('Cannot install without a value for wwwroot')
         if dataDir == None or not os.path.isdir(dataDir):
             raise InstallException('Cannot install instance without knowing where the data directory is')
         if dbname == None:
@@ -430,12 +432,6 @@ class Moodle(object):
             db.createdb(dbname)
         db.selectdb(dbname)
 
-        # Defining wwwroot.
-        wwwroot = '%s://%s/' % (C.get('scheme'), C.get('host'))
-        if C.get('path') != '' and C.get('path') != None:
-            wwwroot = wwwroot + C.get('path') + '/'
-        wwwroot = wwwroot + self.identifier
-
         logging.info('Installing %s...' % self.identifier)
         cli = 'admin/cli/install.php'
         params = (wwwroot, dataDir, engine, dbname, C.get('db.%s.user' % engine), C.get('db.%s.passwd' % engine), C.get('db.%s.host' % engine), fullname, self.identifier, C.get('login'), C.get('passwd'))
index fa461d4..b72c0a3 100644 (file)
@@ -63,19 +63,11 @@ class PHPUnit(object):
 
     def getCoverageDir(self):
         """Get the Coverage directory, and create it if required"""
-        path = os.path.join(self.Wp.getPath(self.M.get('identifier'), 'extra'), 'coverage')
-        if not os.path.exists(path):
-            mkdir(path, 0777)
-        return path
+        return self.Wp.getExtraDir(self.M.get('identifier'), 'coverage')
 
     def getCoverageUrl(self):
         """Return the code coverage URL"""
-        # TODO Constructing the URL should be done elsewhere...
-        wwwroot = '%s://%s/' % (C.get('scheme'), C.get('host'))
-        if C.get('path') != '' and C.get('path') != None:
-            wwwroot = wwwroot + C.get('path') + '/'
-        wwwroot = wwwroot + C.get('mdkDir') + '/' + self.M.get('identifier') + '/coverage'
-        return wwwroot
+        return self.Wp.getUrl(self.M.get('identifier'), extra='coverage')
 
     def init(self, force=False, prefix=None):
         """Initialise the PHPUnit environment"""
index 2e84e5b..a9dff86 100644 (file)
@@ -276,6 +276,18 @@ class Workplace(object):
         else:
             return os.path.join(self.cache, 'moodle.git')
 
+    def getExtraDir(self, name, subdir=None):
+        """Return the path to the extra directory of an instance
+
+        This also creates the directory if does not exist.
+        """
+        path = self.getPath(name, 'extra')
+        if subdir:
+            path = os.path.join(path, subdir)
+        if not os.path.exists(path):
+            mkdir(path, 0777)
+        return path
+
     def getMdkWebDir(self):
         """Return (and create) the special MDK web directory."""
         mdkExtra = os.path.join(self.www, self.mdkDir)
@@ -296,6 +308,21 @@ class Workplace(object):
         else:
             return base
 
+    def getUrl(self, name, extra=None):
+        """Return the URL to an instance, or to its extra directory if extra is passed"""
+        base = '%s://%s' % (C.get('scheme'), C.get('host'))
+
+        if C.get('path') != '' and C.get('path') != None:
+            base = '%s/%s' % (base, C.get('path'))
+
+        wwwroot = None
+        if not extra:
+            wwwroot = '%s/%s' % (base, name)
+        else:
+            wwwroot = '%s/%s/%s/%s' % (base, self.mdkDir, name, extra)
+
+        return wwwroot
+
     def isMoodle(self, name):
         """Checks whether a Moodle instance exist under this name"""
         d = os.path.join(self.path, name)