From 4eaa4d446943246d63de3197d668170491d45e64 Mon Sep 17 00:00:00 2001 From: Sinisa Veseli <sveseli@aps.anl.gov> Date: Thu, 2 Apr 2015 19:17:03 +0000 Subject: [PATCH] removing old prototype code --- src/python/dm/__init__.py | 0 src/python/dm/common/__init__.py | 0 src/python/dm/common/constants/__init__.py | 0 .../dm/common/constants/dmHttpHeaders.py | 9 - src/python/dm/common/constants/dmRole.py | 8 - .../dm/common/constants/dmServiceConstants.py | 6 - src/python/dm/common/constants/dmStatus.py | 13 - src/python/dm/common/exceptions/__init__.py | 0 .../dm/common/exceptions/commandFailed.py | 16 - .../common/exceptions/configurationError.py | 16 - .../dm/common/exceptions/dmException.py | 61 -- .../dm/common/exceptions/dmExceptionMap.py | 26 - .../dm/common/exceptions/internalError.py | 16 - .../dm/common/exceptions/invalidArgument.py | 16 - .../dm/common/exceptions/invalidRequest.py | 16 - src/python/dm/common/objects/__init__.py | 0 src/python/dm/common/objects/dmObject.py | 85 --- .../dm/common/objects/dmObjectManager.py | 29 - src/python/dm/common/service/__init__.py | 0 .../common/service/authorizationController.py | 219 ------- src/python/dm/common/service/dmController.py | 69 --- .../dm/common/service/dmRestWebService.py | 220 ------- src/python/dm/common/utility/__init__.py | 0 .../dm/common/utility/configurationManager.py | 539 ------------------ .../common/utility/consoleLoggingHandler.py | 42 -- .../dm/common/utility/dmModuleManager.py | 81 --- src/python/dm/common/utility/dmSubprocess.py | 137 ----- .../dm/common/utility/loggingManager.py | 332 ----------- .../timedRotatingFileLoggingHandler.py | 28 - src/python/dm/fs_service/__init__.py | 0 src/python/dm/fs_service/impl/__init__.py | 0 .../dm/fs_service/impl/fsControllerImpl.py | 26 - src/python/dm/fs_service/service/__init__.py | 0 .../dm/fs_service/service/fsController.py | 40 -- src/python/dm/fs_service/service/fsService.py | 32 -- .../service/fsServiceRouteMapper.py | 51 -- 36 files changed, 2133 deletions(-) delete mode 100644 src/python/dm/__init__.py delete mode 100644 src/python/dm/common/__init__.py delete mode 100644 src/python/dm/common/constants/__init__.py delete mode 100644 src/python/dm/common/constants/dmHttpHeaders.py delete mode 100644 src/python/dm/common/constants/dmRole.py delete mode 100644 src/python/dm/common/constants/dmServiceConstants.py delete mode 100644 src/python/dm/common/constants/dmStatus.py delete mode 100755 src/python/dm/common/exceptions/__init__.py delete mode 100755 src/python/dm/common/exceptions/commandFailed.py delete mode 100755 src/python/dm/common/exceptions/configurationError.py delete mode 100755 src/python/dm/common/exceptions/dmException.py delete mode 100755 src/python/dm/common/exceptions/dmExceptionMap.py delete mode 100755 src/python/dm/common/exceptions/internalError.py delete mode 100755 src/python/dm/common/exceptions/invalidArgument.py delete mode 100755 src/python/dm/common/exceptions/invalidRequest.py delete mode 100755 src/python/dm/common/objects/__init__.py delete mode 100755 src/python/dm/common/objects/dmObject.py delete mode 100644 src/python/dm/common/objects/dmObjectManager.py delete mode 100755 src/python/dm/common/service/__init__.py delete mode 100644 src/python/dm/common/service/authorizationController.py delete mode 100644 src/python/dm/common/service/dmController.py delete mode 100755 src/python/dm/common/service/dmRestWebService.py delete mode 100755 src/python/dm/common/utility/__init__.py delete mode 100755 src/python/dm/common/utility/configurationManager.py delete mode 100755 src/python/dm/common/utility/consoleLoggingHandler.py delete mode 100755 src/python/dm/common/utility/dmModuleManager.py delete mode 100755 src/python/dm/common/utility/dmSubprocess.py delete mode 100755 src/python/dm/common/utility/loggingManager.py delete mode 100755 src/python/dm/common/utility/timedRotatingFileLoggingHandler.py delete mode 100644 src/python/dm/fs_service/__init__.py delete mode 100644 src/python/dm/fs_service/impl/__init__.py delete mode 100644 src/python/dm/fs_service/impl/fsControllerImpl.py delete mode 100755 src/python/dm/fs_service/service/__init__.py delete mode 100755 src/python/dm/fs_service/service/fsController.py delete mode 100755 src/python/dm/fs_service/service/fsService.py delete mode 100755 src/python/dm/fs_service/service/fsServiceRouteMapper.py diff --git a/src/python/dm/__init__.py b/src/python/dm/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/python/dm/common/__init__.py b/src/python/dm/common/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/python/dm/common/constants/__init__.py b/src/python/dm/common/constants/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/python/dm/common/constants/dmHttpHeaders.py b/src/python/dm/common/constants/dmHttpHeaders.py deleted file mode 100644 index fc8af0e6..00000000 --- a/src/python/dm/common/constants/dmHttpHeaders.py +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python - -####################################################################### - -DM_SESSION_ROLE_HTTP_HEADER = 'Dm-Session-Role' -DM_STATUS_CODE_HTTP_HEADER = 'Dm-Status-Code' -DM_STATUS_MESSAGE_HTTP_HEADER = 'Dm-Status-Message' -DM_EXCEPTION_TYPE_HTTP_HEADER = 'Dm-Exception-Type' - diff --git a/src/python/dm/common/constants/dmRole.py b/src/python/dm/common/constants/dmRole.py deleted file mode 100644 index 801a9391..00000000 --- a/src/python/dm/common/constants/dmRole.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python - -####################################################################### - -DM_ADMIN_ROLE = 'admin' -DM_USER_ROLE = 'user' - - diff --git a/src/python/dm/common/constants/dmServiceConstants.py b/src/python/dm/common/constants/dmServiceConstants.py deleted file mode 100644 index 1a141935..00000000 --- a/src/python/dm/common/constants/dmServiceConstants.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python - -####################################################################### - -DM_SERVICE_PROTOCOL_HTTP = 'http' -DM_SERVICE_PROTOCOL_HTTPS = 'https' diff --git a/src/python/dm/common/constants/dmStatus.py b/src/python/dm/common/constants/dmStatus.py deleted file mode 100644 index 0169057f..00000000 --- a/src/python/dm/common/constants/dmStatus.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python - -####################################################################### - -DM_OK = 0 -DM_ERROR = 1 -DM_CONFIGURATION_ERROR = 2 -DM_INTERNAL_ERROR = 3 -DM_INVALID_ARGUMENT_ERROR = 4 -DM_INVALID_REQUEST_ERROR = 5 -DM_COMMAND_FAILED_ERROR = 6 - - diff --git a/src/python/dm/common/exceptions/__init__.py b/src/python/dm/common/exceptions/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/src/python/dm/common/exceptions/commandFailed.py b/src/python/dm/common/exceptions/commandFailed.py deleted file mode 100755 index b2834472..00000000 --- a/src/python/dm/common/exceptions/commandFailed.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python - -# -# Command failed exception class. -# - -####################################################################### - -from dm.common.constants import dmStatus -from dm.common.exceptions.dmException import DmException - -####################################################################### - -class CommandFailed(DmException): - def __init__ (self, error='', **kwargs): - DmException.__init__(self, error, dmStatus.DM_COMMAND_FAILED_ERROR, **kwargs) diff --git a/src/python/dm/common/exceptions/configurationError.py b/src/python/dm/common/exceptions/configurationError.py deleted file mode 100755 index cd6ae7a9..00000000 --- a/src/python/dm/common/exceptions/configurationError.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python - -# -# Configuration error class. -# - -####################################################################### - -from dm.common.constants import dmStatus -from dm.common.exceptions.dmException import DmException - -####################################################################### - -class ConfigurationError(DmException): - def __init__ (self, error='', **kwargs): - DmException.__init__(self, error, dmStatus.DM_CONFIGURATION_ERROR, **kwargs) diff --git a/src/python/dm/common/exceptions/dmException.py b/src/python/dm/common/exceptions/dmException.py deleted file mode 100755 index 7cd9c2c4..00000000 --- a/src/python/dm/common/exceptions/dmException.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python - -# -# Base DM exception class. -# - -####################################################################### - -import exceptions -import json - -from dm.common.constants import dmStatus - -####################################################################### - -class DmException(exceptions.Exception): - """ - Base DM exception class. - - Usage: - DmException(errorMessage, errorCode) - DmException(args=errorMessage) - DmException(exception=exceptionObject) - """ - def __init__(self, error='', code=dmStatus.DM_ERROR, **kwargs): - args = error - if args == '': - args = kwargs.get('args', '') - ex = kwargs.get('exception', None) - if ex != None: - if isinstance(ex, exceptions.Exception): - exArgs = '%s' % (ex) - if args == '': - args = exArgs - else: - args = "%s (%s)" % (args, exArgs) - exceptions.Exception.__init__(self, args) - self._code = code - - def getArgs(self): - return self.args - - def getErrorCode(self): - return self._code - - def getErrorMessage(self): - return '%s' % (self.args) - - def getClassName(self): - return '%s' % (self.__class__.__name__) - - def getExceptionType(self): - return '%s' % (self.__class__.__name__).split('.')[-1] - - def getJsonRep(self): - return json.dumps({ - 'errorMessage' : self.getErrorMessage(), - 'errorCode' : self.getErrorCode(), - 'exceptionType' : self.getExceptionType(), - }) - diff --git a/src/python/dm/common/exceptions/dmExceptionMap.py b/src/python/dm/common/exceptions/dmExceptionMap.py deleted file mode 100755 index 7729d3e7..00000000 --- a/src/python/dm/common/exceptions/dmExceptionMap.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python - -# -# DM exception map -# - -####################################################################### - -from dm.common.constants import dmStatus - -exceptionMap = { - dmStatus.DM_ERROR : 'dmException.DmException', - dmStatus.DM_CONFIGURATION_ERROR : 'configurationError.ConfigurationError', - dmStatus.DM_INTERNAL_ERROR : 'internalError.InternalError', - dmStatus.DM_INVALID_ARGUMENT_ERROR : 'invalidArgument.InvalidArgument', - dmStatus.DM_INVALID_REQUEST_ERROR : 'invalidRequest.InvalidRequest', - dmStatus.DM_COMMAND_FAILED_ERROR : 'commandFailed.CommandFailed', -} - -####################################################################### -# Testing - -if __name__ == '__main__': - for item in exceptionMap.items(): - print item - diff --git a/src/python/dm/common/exceptions/internalError.py b/src/python/dm/common/exceptions/internalError.py deleted file mode 100755 index a393f0c7..00000000 --- a/src/python/dm/common/exceptions/internalError.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python - -# -# Internal error class. -# - -####################################################################### - -from dm.common.constants import dmStatus -from dm.common.exceptions.dmException import DmException - -####################################################################### - -class InternalError(DmException): - def __init__ (self, error='', **kwargs): - DmException.__init__(self, error, dmStatus.DM_INTERNAL_ERROR, **kwargs) diff --git a/src/python/dm/common/exceptions/invalidArgument.py b/src/python/dm/common/exceptions/invalidArgument.py deleted file mode 100755 index 34b352a2..00000000 --- a/src/python/dm/common/exceptions/invalidArgument.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python - -# -# Invalid argument error class. -# - -####################################################################### - -from dm.common.constants import dmStatus -from dm.common.exceptions.dmException import DmException - -####################################################################### - -class InvalidArgument(DmException): - def __init__ (self, error='', **kwargs): - DmException.__init__(self, error, dmStatus.DM_INVALID_ARGUMENT_ERROR, **kwargs) diff --git a/src/python/dm/common/exceptions/invalidRequest.py b/src/python/dm/common/exceptions/invalidRequest.py deleted file mode 100755 index e285eff3..00000000 --- a/src/python/dm/common/exceptions/invalidRequest.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python - -# -# Invalid request error class. -# - -####################################################################### - -from dm.common.constants import dmStatus -from dm.common.exceptions.dmException import DmException - -####################################################################### - -class InvalidRequest(DmException): - def __init__ (self, error='', **kwargs): - DmException.__init__(self, error, dmStatus.DM_INVALID_REQUEST_ERROR, **kwargs) diff --git a/src/python/dm/common/objects/__init__.py b/src/python/dm/common/objects/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/src/python/dm/common/objects/dmObject.py b/src/python/dm/common/objects/dmObject.py deleted file mode 100755 index c1144b50..00000000 --- a/src/python/dm/common/objects/dmObject.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python - -# -# DM Object class. -# - -####################################################################### - -import UserDict -import UserList -import types -import json - -from dm.common.exceptions.invalidArgument import InvalidArgument -from dm.common.utility import loggingManager - -class DmObject(UserDict.UserDict): - """ Base dm object class. """ - def __init__(self, dict={}): - if isinstance(dict, types.DictType): - UserDict.UserDict.__init__(self, dict) - elif isinstance(dict, UserDict.UserDict): - UserDict.UserDict.__init__(self, dict.data) - else: - raise InvalidArgument('DmObject must be initialized using dictionary.') - self._jsonPreprocessKeyList = [] - self._logger = None - - def getLogger(self): - if not self._logger: - self._logger = loggingManager.getLogger(self.__class__.__name__) - return self._logger - - @classmethod - def getFromDict(cls, dict): - inst = cls() - for key in dict.keys(): - inst[key] = dict[key] - return inst - - def getDictRep(self): - # Dict representation is dict - dictRep = {} - for (key,obj) in self.data.items(): - if isinstance(obj, DmObject): - dictRep[key] = obj.getDictRep() - else: - if obj is not None: - dictRep[key] = obj - return dictRep - - def getDictJsonPreprocessedRep(self): - dictRep = self.getDictRep() - # Convert designated keys into string values. - for key in self._jsonPreprocessKeyList: - value = dictRep.get(key) - if value is not None: - dictRep[key] = '%s' % value - return dictRep - - def getJsonRep(self): - dictRep = self.getDictJsonPreprocessedRep() - return json.dumps(dictRep) - - @classmethod - def fromJsonString(cls, jsonString): - return cls.getFromDict(json.loads(jsonString)) - -####################################################################### -# Testing. - -if __name__ == '__main__': - x = {'name' : 'XYZ', 'one':1, 'two':2 } - o = DmObject(x) - print 'DM Object: ', o - print 'Type of DM object: ', type(o) - print 'JSON Rep: ', o.getJsonRep() - print 'Type of JSON rep: ', type(o.getJsonRep()) - j = '{"name" : "XYZ", "one":1, "two":2 }' - print 'String: ', j - x2 = DmObject.fromJsonString(j) - print 'DM Object 2: ', x2 - print 'Type of DM object 2: ', type(x2) - - diff --git a/src/python/dm/common/objects/dmObjectManager.py b/src/python/dm/common/objects/dmObjectManager.py deleted file mode 100644 index 0d7864ca..00000000 --- a/src/python/dm/common/objects/dmObjectManager.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python - -# -# Base object manager class. -# - -####################################################################### - -import threading -from dm.common.utility import loggingManager - -####################################################################### - -class DmObjectManager: - """ Base object manager class. """ - - def __init__(self): - self._logger = loggingManager.getLogger(self.__class__.__name__) - self._lock = threading.RLock() - - def getLogger(self): - return self._logger - - def acquireLock(self): - self._lock.acquire() - - def releaseLock(self): - self._lock.release() - diff --git a/src/python/dm/common/service/__init__.py b/src/python/dm/common/service/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/src/python/dm/common/service/authorizationController.py b/src/python/dm/common/service/authorizationController.py deleted file mode 100644 index 0c0c20a4..00000000 --- a/src/python/dm/common/service/authorizationController.py +++ /dev/null @@ -1,219 +0,0 @@ -#!/usr/bin/env python - -# -# Authorization controller class -# - -####################################################################### - -import cherrypy -import urllib -from cherrypy.lib import httpauth - -from dm.common.constants import dmStatus -from dm.common.constants import dmRole - -from dm.common.exceptions.dmException import DmException -from dm.common.exceptions.dmHttpError import DmHttpError -from dm.common.exceptions.authorizationError import AuthorizationError -from dm.common.utility import loggingManager -from dm.common.service.dmController import DmController -from dm.common.impl import authManager - -import dmSession - -####################################################################### - -cherrypy.lib.sessions.DmSession = dmSession.DmSession - -SESSION_USERNAME_KEY = '_cp_username' -SESSION_ROLE_KEY = 'role' - -def checkCredentials(username, password): - """ Verifies credentials for username and password.""" - logger = loggingManager.getLogger('checkCredentials') - logger.debug('Checking credential for User: %s, Password: %s' % (username, password)) - logger.debug('Session id: %s' % cherrypy.serving.session.id) - principal = authManager.getInstance().getAuthPrincipal(username, password) - logger.debug('Principal: %s' % (principal)) - if principal: - cherrypy.session[SESSION_ROLE_KEY] = principal.getRole() - logger.debug('Successful login from user: %s (role: %s)' % (username, principal.getRole())) - else: - logger.debug('Login denied for user: %s' % username) - username = cherrypy.session.get(SESSION_USERNAME_KEY, None) - - if username is not None: - cherrypy.request.login = None - cherrypy.session[dmSession.INVALID_DM_SESSION_KEY] = True - raise AuthorizationError('Incorrect username or password.') - return principal - -def parseBasicAuthorizationHeaders(): - try: - logger = loggingManager.getLogger('parseBasicAuthorizationHeader') - username = None - password = None - authorization = cherrypy.request.headers['authorization'] - authorizationHeader = httpauth.parseAuthorization(authorization) - logger.debug('Authorization header: %s' % authorizationHeader) - if authorizationHeader['auth_scheme'] == 'basic': - username = authorizationHeader['username'] - password = authorizationHeader['password'] - logger.debug('Got username/password from headers: %s/%s' % (username, password)) - if username and password: - return (username, password) - else: - raise AuthorizationError('Username and/or password not supplied.') - except Exception, ex: - errorMsg = 'Could not extract username/password from authorization header: %s' % ex - raise AuthorizationError(errorMsg) - -def checkAuth(*args, **kwargs): - """ - A tool that looks in config for 'auth.require'. If found and it - is not None, a login is required and the entry is evaluated as a list of - conditions that the user must fulfill. - """ - logger = loggingManager.getLogger('checkAuth') - conditions = cherrypy.request.config.get('auth.require', None) - logger.debug('Headers: %s' % (cherrypy.request.headers)) - logger.debug('Request params: %s' % (cherrypy.request.params)) - logger.debug('Request query string: %s' % (cherrypy.request.query_string)) - - method = urllib.quote(cherrypy.request.request_line.split()[0]) - params = urllib.quote(cherrypy.request.request_line.split()[1]) - logger.debug('Session: %s' % ((cherrypy.session.__dict__))) - if conditions is not None: - sessionId = cherrypy.serving.session.id - sessionCache = cherrypy.session.cache - logger.debug('Session: %s' % ((cherrypy.session.__dict__))) - logger.debug('Session cache length: %s' % (len(sessionCache))) - logger.debug('Session cache: %s' % (sessionCache)) - # Check session. - if not sessionCache.has_key(sessionId): - errorMsg = 'Invalid or expired session id: %s.' % sessionId - logger.debug(errorMsg) - raise DmHttpError(dmHttpStatus.DM_HTTP_UNAUTHORIZED, 'User Not Authorized', AuthorizationError(errorMsg)) - - username = cherrypy.session.get(SESSION_USERNAME_KEY) - logger.debug('Session id %s is valid (username: %s)' % (sessionId, username)) - if username: - cherrypy.request.login = username - for condition in conditions: - # A condition is just a callable that returns true or false - if not condition(): - logger.debug('Authorization check %s failed for username %s' % (condition.func_name, username)) - errorMsg = 'Authorization check %s failed for user %s.' % (condition.func_name, username) - raise DmHttpError(dmHttpStatus.DM_HTTP_UNAUTHORIZED, 'User Not Authorized', AuthorizationError(errorMsg)) - else: - logger.debug('Username is not supplied') - raise DmHttpError(dmHttpStatus.DM_HTTP_UNAUTHORIZED, 'User Not Authorized', ex) - -# Add before_handler for authorization -cherrypy.tools.auth = cherrypy.Tool('before_handler', checkAuth) -#cherrypy.tools.auth = cherrypy.Tool('on_start_resource', checkAuth) - -def require(*conditions): - """ - A decorator that appends conditions to the auth.require config variable. - """ - def decorate(f): - if not hasattr(f, '_cp_config'): - f._cp_config = dict() - if 'auth.require' not in f._cp_config: - f._cp_config['auth.require'] = [] - f._cp_config['auth.require'].extend(conditions) - return f - return decorate - -# Conditions are callables that return True if the user -# fulfills the conditions they define, False otherwise. -# They can access the current username as cherrypy.request.login -def isAdminRole(): - return (cherrypy.session.get(SESSION_ROLE_KEY, None) == dmRole.DM_ADMIN_ROLE) - -def isUserOrAdminRole(): - role = cherrypy.session.get(SESSION_ROLE_KEY, None) - if role == dmRole.DM_ADMIN_ROLE or role == dmRole.DM_USER_ROLE: - return True - return False - -def isUser(username): - result = (cherrypy.session.get(SESSION_USERNAME_KEY, None) == username) - return result - -def getSessionUser(): - return cherrypy.session.get(SESSION_USERNAME_KEY, None) - -def memberOf(groupname): - return cherrypy.request.login == 'dm' and groupname == 'admin' - -def nameIs(reqd_username): - return lambda: reqd_username == cherrypy.request.login - -def anyOf(*conditions): - """ Returns True if any of the conditions match. """ - def check(): - for c in conditions: - if c(): - return True - return False - return check - -def allOf(*conditions): - """ Returns True if all of the conditions match. """ - def check(): - for c in conditions: - if not c(): - return False - return True - return check - -class AuthController(DmController): - """ Controller to provide login and logout actions. """ - _cp_config = { - 'tools.sessions.on' : True, - 'tools.sessions.storage_type' : 'dm', - 'tools.auth.on' : True - } - - def __init__(self): - DmController.__init__(self) - - def onLogin(self, username): - """ Called on successful login. """ - return - - def onLogout(self, username): - """ Called on logout. """ - return - - @cherrypy.expose - def login(self, username=None, password=None, fromPage='/'): - logger = loggingManager.getLogger('login') - try: - if username is None or password is None: - (username, password) = parseBasicAuthorizationHeaders() - principal = checkCredentials(username, password) - except DmHttpError, ex: - raise - except DmException, ex: - logger.debug('Authorization failed (username %s): %s' % (username, ex)) - self.addDmExceptionHeaders(ex) - raise DmHttpError(dmHttpStatus.DM_HTTP_UNAUTHORIZED, 'User Not Authorized', ex) - - # Authorization worked. - cherrypy.session[SESSION_USERNAME_KEY] = cherrypy.request.login = username - self.onLogin(username) - self.addDmSessionRoleHeaders(principal.getRole()) - self.addDmResponseHeaders() - - @cherrypy.expose - def logout(self, fromPage='/'): - sess = cherrypy.session - username = sess.get(SESSION_USERNAME_KEY, None) - if username: - del sess[SESSION_USERNAME_KEY] - cherrypy.request.login = None - self.onLogout(username) diff --git a/src/python/dm/common/service/dmController.py b/src/python/dm/common/service/dmController.py deleted file mode 100644 index 86501bc9..00000000 --- a/src/python/dm/common/service/dmController.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python - -# -# Base DM controller class. -# - -####################################################################### - -import cherrypy -import httplib -from sys import exc_info -from dm.common.utility import loggingManager -from dm.common.constants import dmStatus -from dm.common.constants import dmHttpHeaders -from dm.common.exceptions.dmException import DmException -from dm.common.exceptions import dmExceptionMap -from dm.common.exceptions.internalError import InternalError - -####################################################################### - -class DmController(object): - """ Base controller class. """ - def __init__(self): - self._logger = loggingManager.getLogger(self.__class__.__name__) - - def getLogger(self): - return self._logger - - @classmethod - def addDmResponseHeaders(cls, status=dmStatus.DM_OK, msg='Success', exceptionType=None): - cherrypy.response.headers[dmHttpHeaders.DM_STATUS_CODE_HTTP_HEADER] = status - cherrypy.response.headers[dmHttpHeaders.DM_STATUS_MESSAGE_HTTP_HEADER] = msg - if exceptionType is not None: - cherrypy.response.headers[dmHttpHeaders.DM_EXCEPTION_TYPE_HTTP_HEADER] = exceptionType - - @classmethod - def addDmSessionRoleHeaders(cls, role): - cherrypy.response.headers[dmHttpHeaders.DM_SESSION_ROLE_HTTP_HEADER] = role - - @classmethod - def addDmExceptionHeaders(cls, ex): - cls.handleException(ex) - - @classmethod - def handleCpException(cls): - cherrypy.response.status = httplib.OK - ex = exc_info()[1] - if ex == None: - ex = InternalError('Internal Webservice Error') - cls.handleException(ex) - - @classmethod - def handleException(cls, ex): - exClass = ex.__class__.__name__.split('.')[-1] - status = None - msg = '%s' % ex - msg = msg.split('\n')[0] - for code in dmExceptionMap.exceptionMap.keys(): - exStr = dmExceptionMap.exceptionMap.get(code).split('.')[-1] - if exStr == exClass: - status = code - if not status: - status = dmStatus.DM_ERROR - cls.addDmResponseHeaders(status, msg, exClass) - - def formatJsonResponse(self, response): - cherrypy.response.headers['Content-Type'] = 'application/json' - return '%s' % (response) - diff --git a/src/python/dm/common/service/dmRestWebService.py b/src/python/dm/common/service/dmRestWebService.py deleted file mode 100755 index 04eaf74e..00000000 --- a/src/python/dm/common/service/dmRestWebService.py +++ /dev/null @@ -1,220 +0,0 @@ -#!/usr/bin/env python - -# -# Base web service class. -# - -#################################################################### -import sys -import cherrypy -from cherrypy.process import plugins -from cherrypy import server - -from dm.common.constants import dmStatus -from dm.common.utility import configurationManager -from dm.common.utility import loggingManager -from dm.common.utility import dmModuleManager - -#################################################################### - -class DmRestWebService: - - DEFAULT_N_SERVER_REQUEST_THREADS = 10 - DEFAULT_SERVER_SOCKET_TIMEOUT = 30 - - class SignalHandler: - def __init__(self, signal, oldSignalHandler): - self._signal = signal - self._oldSignalHandler = oldSignalHandler - self._logger = loggingManager.getInstance().getLogger(self.__class__.__name__) - - def signalHandler(self): - self._logger.debug('%s signal handler called' % self._signal) - dmModuleManager.getInstance().stopModules() - self._oldSignalHandler() - - def __init__(self, routeMapper): - self._configurationManager = configurationManager.getInstance() - self._routeMapper = routeMapper - self._options = None - self._args = None - self._logger = loggingManager.getInstance().getLogger(self.__class__.__name__) - self._logger.info('Initializing service') - - def prepareOptions(self): - from optparse import OptionParser - p = OptionParser() - p.add_option('-d', '--daemon', action="store_true", - dest='daemonFlag', default=False, - help="Run as a daemon.") - p.add_option('-p', '--pidfile', - dest='pidfile', default=None, - help="Store the process id in the given file.") - p.add_option('-P', '--port', - dest='serverPort', default=self.getDefaultServerPort(), - help="Server port.") - p.add_option('-H', '--host', - dest='serverHost', default=self.getDefaultServerHost(), - help="Server host.") - p.add_option('-C', '--ssl-ca-cert', - dest='sslCaCert', default=None, - help='SSL CA certificate path (used for client SSL certificate verification). Requires --ssl-key and --ssl-cert.') - p.add_option('-c', '--ssl-cert', - dest='sslCert', default=None, - help='SSL certificate path. SSL operation requires both --ssl-key and --ssl-cert. Client SSL certificate verification also requires --ssl-ca-cert.') - p.add_option('-k', '--ssl-key', - dest='sslKey', default=None, - help='SSL key path. SSL operation requires both --ssl-key and --ssl-cert. Client SSL certificate verification also requires --ssl-ca-cert.') - p.add_option('', '--n-server-threads', - dest='nServerThreads', default=DmRestWebService.DEFAULT_N_SERVER_REQUEST_THREADS, - help='Number of service request handler threads (defaut: %s).' % DmRestWebService.DEFAULT_N_SERVER_REQUEST_THREADS) - return p - - def initDmModules(self): - pass - - def getDefaultServerHost(self): - return None - - def getDefaultServerPort(self): - return None - - # Instantiate modified signal handler that stops dm modules first, - # and then does the default action. - def modifySignalHandlers(self, engine): - pluginsSignalHandler = plugins.SignalHandler(engine) - handlers = pluginsSignalHandler.handlers - - # Add handler for interrupt - handlers['SIGINT'] = engine.exit - - # Modify all signal handlers - for signal in handlers.keys(): - self._logger.debug('Modifying signal: %s' % signal) - oldSignalHandler = handlers[signal] - self._logger.debug('Old signal handler: %s' % oldSignalHandler) - signalHandler = DmRestWebService.SignalHandler(signal, oldSignalHandler) - self._logger.debug('Setting signal handler to: %s' % signalHandler.signalHandler) - handlers[signal] = signalHandler.signalHandler - pluginsSignalHandler.subscribe() - - def initServerLog(self): - cherrypyLogLevel = self._configurationManager.getCherrypyLogLevel() - cherrypy.log.error_log.setLevel(cherrypyLogLevel) - cherrypy.log.error_file = self._configurationManager.getCherrypyLogFile() - cherrypy.log.error_log.propagate = False - cherrypy.log.access_log.setLevel(cherrypyLogLevel) - cherrypy.log.access_file = self._configurationManager.getCherrypyAccessFile() - cherrypy.log.access_log.propagate = False - - def updateServerConfig(self): - configDict = { - 'server.socket_host' : self._options.serverHost, - 'server.socket_port' : int(self._options.serverPort), - 'server.thread_pool' : int(self._options.nServerThreads), - 'log.screen' : (self._options.daemonFlag != True), - } - cherrypy.config.update(configDict) - - def prepareServer(self): - self._logger.debug('Preparing service configuration') - try: - optionParser = self.prepareOptions() - (self._options, self._args) = optionParser.parse_args() - dispatch = self._routeMapper.setupRoutes() - self._logger.debug('Using route dispatch: %s' % dispatch) - - config = { - '/' : { - 'request.dispatch' : dispatch, - }, - } - - # No root controller as we provided our own. - cherrypy.tree.mount(root=None, config=config) - self.initServerLog() - self.updateServerConfig() - - self._logger.info('Using host %s' % self._options.serverHost) - self._logger.info('Using port %s' % self._options.serverPort) - self._logger.debug('Using %s request handler threads' % self._options.nServerThreads) - except Exception, ex: - self._logger.exception(ex) - sys.exit(dmStatus.DM_ERROR) - - # Run server. - def __runServer(self): - self._logger.info('Starting service') - engine = cherrypy.engine - - # Set up Deamonization - if self._options.daemonFlag: - plugins.Daemonizer(engine).subscribe() - self._logger.debug('Daemon mode: %s' % self._options.daemonFlag) - - if self._options.pidfile != None: - plugins.PIDFile(engine, self._options.pidfile).subscribe() - self._logger.debug('Using PID file: %s' % self._options.pidfile) - - if self._options.sslCert != None and self._options.sslKey != None: - server.ssl_ca_certificate = None - if self._options.sslCaCert != None: - server.ssl_ca_certificate = self._options.sslCaCert - self._configurationManager.setSslCaCertFile(self._options.sslCaCert) - self._logger.info('Using SSL CA cert file: %s' % self._options.sslCaCert) - server.ssl_certificate = self._options.sslCert - self._configurationManager.setSslCertFile(self._options.sslCert) - self._logger.info('Using SSL cert file: %s' % self._options.sslCert) - - server.ssl_private_key = self._options.sslKey - self._configurationManager.setSslKeyFile(self._options.sslKey) - self._logger.info('Using SSL key file: %s' % self._options.sslKey) - - server.ssl_module = 'builtin' - #server.ssl_module = 'pyopenssl' - - # Increase timeout to prevent early SSL connection terminations - server.socket_timeout = DmRestWebService.DEFAULT_SERVER_SOCKET_TIMEOUT - - # Setup the signal handler to stop the application while running. - if hasattr(engine, 'signal_handler'): - engine.signal_handler.subscribe() - if hasattr(engine, 'console_control_handler'): - engine.console_control_handler.subscribe() - self.modifySignalHandlers(engine) - - # Turn off autoreloader. - self._logger.debug('Turning off autoreloader') - engine.autoreload.unsubscribe() - - # Start the engine. - try: - self._logger.debug('Starting engine') - engine.start() - - # Prepare dm services. - # Doing this before engine starts may cause issues with existing timers. - self._logger.debug('Starting modules') - self.initDmModules() - dmModuleManager.getInstance().startModules() - except Exception, ex: - self._logger.exception('Service exiting: %s' % ex) - dmModuleManager.getInstance().stopModules() - return dmStatus.DM_ERROR - self._logger.info('Service ready') - engine.block() - dmModuleManager.getInstance().stopModules() - self._logger.info('Service done') - return dmStatus.DM_OK - - # Run server instance. - def run(self): - self.prepareOptions() - self.prepareServer() - sys.exit(self.__runServer()) - -#################################################################### -# Testing - -if __name__ == '__main__': - pass diff --git a/src/python/dm/common/utility/__init__.py b/src/python/dm/common/utility/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/src/python/dm/common/utility/configurationManager.py b/src/python/dm/common/utility/configurationManager.py deleted file mode 100755 index 2ace128a..00000000 --- a/src/python/dm/common/utility/configurationManager.py +++ /dev/null @@ -1,539 +0,0 @@ -#!/usr/bin/env python - -# -# Configuration manager singleton. -# - -####################################################################### - -import os -import socket -import UserDict -import pwd - -from dm.common.constants import dmServiceConstants -from dm.common.exceptions.configurationError import ConfigurationError - -####################################################################### - -# Defaults. - -DEFAULT_DM_ROOT_DIR = '/opt/dm' -DEFAULT_DM_CONFIG_FILE = '%s/etc/dm.conf' # requires root dir - -DEFAULT_DM_LOG_FILE = '%s/var/log/dm.log' # requires root dir -DEFAULT_DM_LOG_CONFIG_FILE = '%s/etc/dm.log.conf' # requires root dir -DEFAULT_DM_CONSOLE_LOG_LEVEL = 'critical' -DEFAULT_DM_FILE_LOG_LEVEL = 'info' -#DEFAULT_DM_LOG_RECORD_FORMAT = '%(asctime)s,%(msecs)03d [%(levelname)s] %(module)s:%(lineno)d %(user)s@%(host)s %(name)s (%(process)d): %(message)s' -#DEFAULT_DM_LOG_RECORD_FORMAT = '%(asctime)s,%(msecs)03d %(levelname)s %(module)s:%(lineno)d %(process)d: %(message)s' -DEFAULT_DM_LOG_RECORD_FORMAT = '%(asctime)s,%(msecs)03d %(levelname)s %(process)d: %(message)s' -DEFAULT_DM_LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' - -DEFAULT_DM_CHERRYPY_LOG_LEVEL = 'ERROR' -DEFAULT_DM_CHERRYPY_LOG_FILE = '%s/var/log/cherrypy.error' # requires root dir -DEFAULT_DM_CHERRYPY_ACCESS_FILE = '%s/var/log/cherrypy.access' # requires root dir - -DEFAULT_DM_SERVICE_PORT = 10036 # 100DM -DEFAULT_DM_SERVICE_HOST = '0.0.0.0' -DEFAULT_DM_SERVICE_PROTOCOL = dmServiceConstants.DM_SERVICE_PROTOCOL_HTTP -DEFAULT_DM_ADMIN_USERNAME = '' -DEFAULT_DM_ADMIN_PASSWORD = '' - -DEFAULT_DM_DB = 'postgresql' -DEFAULT_DM_DB_HOST = 'localhost' -DEFAULT_DM_DB_PORT = 20036 # 200DM -DEFAULT_DM_DB_PASSWORD = '' -DEFAULT_DM_DB_USER = '' -DEFAULT_DM_DB_SCHEMA = 'dm' -DEFAULT_DM_DB_PASSWORD_FILE = '%s/lib/postgresql/etc/db.passwd' # requires root dir - -# Session cache file -DEFAULT_DM_SESSION_CACHE_FILE = None - -# Enforce session credentials. -DEFAULT_DM_REQUIRE_SESSION_CREDENTIALS = False - -# SSL variables -DEFAULT_DM_SSL_CA_CERT_FILE = None -DEFAULT_DM_SSL_CERT_FILE = None -DEFAULT_DM_SSL_KEY_FILE = None - -# Get singleton instance. -def getInstance(): - """ Get configuration manager singleton instance. """ - from dm.common.utility.configurationManager import ConfigurationManager - try: - cm = ConfigurationManager() - except ConfigurationManager, ex: - cm = ex - return cm - -class ConfigurationManager(UserDict.UserDict): - """ - Singleton class used for keeping system configuration data. The class - initializes its data using predefined defaults, or from certain - environment variables. - - Usage: - from dm.common.utility import configurationManager - cm = configurationManager.getInstance() - cm.setConsoleLogLevel('info') - level = cm.getConsoleLogLevel() - cm['myKey'] = 'myValue' - value = cm.get('myKey') - """ - - # Singleton. - __instance = None - - def __init__(self): - if ConfigurationManager.__instance: - raise ConfigurationManager.__instance - ConfigurationManager.__instance = self - UserDict.UserDict.__init__(self) - self['user'] = pwd.getpwuid(os.getuid())[0] - self['host'] = socket.gethostname() - - self['defaultRootDir'] = DEFAULT_DM_ROOT_DIR - self.__setFromEnvVar('rootDir', 'DM_ROOT_DIR') - - self['defaultConfigFile'] = DEFAULT_DM_CONFIG_FILE % self.getRootDir() - self['defaultLogFile'] = DEFAULT_DM_LOG_FILE % self.getRootDir() - self['defaultLogConfigFile'] = DEFAULT_DM_LOG_CONFIG_FILE % self.getRootDir() - - self['defaultConsoleLogLevel'] = DEFAULT_DM_CONSOLE_LOG_LEVEL - self['defaultFileLogLevel'] = DEFAULT_DM_FILE_LOG_LEVEL - self['defaultLogRecordFormat'] = DEFAULT_DM_LOG_RECORD_FORMAT - self['defaultLogDateFormat'] = DEFAULT_DM_LOG_DATE_FORMAT - - self['defaultCherrypyLogLevel'] = DEFAULT_DM_CHERRYPY_LOG_LEVEL - self['defaultCherrypyLogFile'] = DEFAULT_DM_CHERRYPY_LOG_FILE % self.getRootDir() - self['defaultCherrypyAccessFile'] = DEFAULT_DM_CHERRYPY_ACCESS_FILE % self.getRootDir() - - self['defaultServicePort'] = DEFAULT_DM_SERVICE_PORT - self['defaultServiceHost'] = DEFAULT_DM_SERVICE_HOST - self['defaultServiceProtocol'] = DEFAULT_DM_SERVICE_PROTOCOL - self['defaultAdminUsername'] = DEFAULT_DM_ADMIN_USERNAME - self['defaultAdminPassword'] = DEFAULT_DM_ADMIN_PASSWORD - self['defaultDb'] = DEFAULT_DM_DB - self['defaultDbHost'] = DEFAULT_DM_DB_HOST - self['defaultDbPort'] = DEFAULT_DM_DB_PORT - self['defaultDbPassword'] = DEFAULT_DM_DB_PASSWORD - self['defaultDbPasswordFile'] = DEFAULT_DM_DB_PASSWORD_FILE % self.getRootDir() - self['defaultDbUser'] = DEFAULT_DM_DB_USER - self['defaultDbSchema'] = DEFAULT_DM_DB_SCHEMA - - self['defaultSessionCacheFile'] = DEFAULT_DM_SESSION_CACHE_FILE - self['defaultRequireSessionCredentials'] = DEFAULT_DM_REQUIRE_SESSION_CREDENTIALS - - self['defaultSslCaCertFile'] = DEFAULT_DM_SSL_CA_CERT_FILE - self['defaultSslCertFile'] = DEFAULT_DM_SSL_CERT_FILE - self['defaultSslKeyFile'] = DEFAULT_DM_SSL_KEY_FILE - # Settings that might come from environment variables. - self.__setFromEnvVar('logFile', 'DM_LOG_FILE') - self.__setFromEnvVar('logConfigFile', 'DM_LOG_CONFIG_FILE') - self.__setFromEnvVar('consoleLogLevel', 'DM_CONSOLE_LOG_LEVEL') - self.__setFromEnvVar('fileLogLevel', 'DM_FILE_LOG_LEVEL') - self.__setFromEnvVar('logRecordFormat', 'DM_LOG_RECORD_FORMAT') - self.__setFromEnvVar('logDateFormat', 'DM_LOG_DATE_FORMAT') - - self.__setFromEnvVar('cherrypyLogLevel', 'DM_CHERRYPY_LOG_LEVEL') - self.__setFromEnvVar('cherrypyLogFile', 'DM_CHERRYPY_LOG_FILE') - self.__setFromEnvVar('cherrypyAccessFile', 'DM_CHERRYPY_ACCESS_FILE') - - self.__setFromEnvVar('serviceProtocol', 'DM_SERVICE_PROTOCOL') - self.__setFromEnvVar('serviceHost', 'DM_SERVICE_HOST') - self.__setFromEnvVar('servicePort', 'DM_SERVICE_PORT') - self.__setFromEnvVar('adminUsername', 'DM_ADMIN_USERNAME') - self.__setFromEnvVar('adminPassword', 'DM_ADMIN_PASSWORD') - - self.__setFromEnvVar('sessionCacheFile', 'DM_SESSION_CACHE_FILE') - - self.__setFromEnvVar('sslCaCertFile', 'DM_SSL_CA_CERT_FILE') - self.__setFromEnvVar('sslCertFile', 'DM_SSL_CERT_FILE') - self.__setFromEnvVar('sslKeyFile', 'DM_SSL_KEY_FILE') - - self.__setFromEnvVar('configFile', 'DM_CONFIG_FILE') - self.__setFromEnvVar('dbPasswordFile', 'DM_DB_PASSWORD_FILE') - - # Settings that might come from file. - self.__setFromVarFile('dbPassword', self.getDbPasswordFile()) - - # This function will ignore errors if environment variable is not set. - def __setFromEnvVar(self, key, envVar): - """ - Set value for the specified key from a given environment variable. - This function ignores errors for env. variables that are not set. - """ - try: - self[key] = os.environ[envVar] - except: - pass - - # This function will ignore errors if variable file is not present. - def __setFromVarFile(self, key, varFile): - """ - Set value for the specified key from a given file. The first line - in the file is variable value. - This function ignores errors. - """ - try: - v = open(varFile, 'r').readline() - self[key] = v.lstrip().rstrip() - except Exception, ex: - pass - - def __getKeyValue(self, key, default='__internal__'): - """ - Get value for a given key. - Keys will be of the form 'logFile', and the default keys have - the form 'defaultLogFile'. - """ - defaultKey = "default" + key[0].upper() + key[1:] - defaultValue = self.get(defaultKey, None) - if default != '__internal__': - defaultValue = default - return self.get(key, defaultValue) - - def getHost(self): - return self['host'] - - def getUser(self): - return self['user'] - - def getDefaultRootDir(self): - return self['defaultRootDir'] - - def setRootDir(self, rootDir): - self['rootDir'] = rootDir - - def getRootDir(self, default='__internal__'): - return self.__getKeyValue('rootDir', default) - - def getDefaultLogFile(self): - return self['defaultLogFile'] - - def setLogFile(self, logFile): - self['logFile'] = logFile - - def getLogFile(self, default='__internal__'): - return self.__getKeyValue('logFile', default) - - def hasLogFile(self): - return self.has_key('logFile') - - def getDefaultLogConfigFile(self): - return self['defaultLogConfigFile'] - - def setLogConfigFile(self, logConfigFile): - self['logConfigFile'] = logConfigFile - - def getLogConfigFile(self, default='__internal__'): - return self.__getKeyValue('logConfigFile', default) - - def hasLogConfigFile(self): - return self.has_key('logConfigFile') - - def getDefaultConsoleLogLevel(self): - return self['defaultConsoleLogLevel'] - - def setConsoleLogLevel(self, level): - self['consoleLogLevel'] = level - - def getConsoleLogLevel(self, default='__internal__'): - return self.__getKeyValue('consoleLogLevel', default) - - def hasConsoleLogLevel(self): - return self.has_key('consoleLogLevel') - - def getDefaultFileLogLevel(self): - return self['defaultFileLogLevel'] - - def setFileLogLevel(self, level): - self['fileLogLevel'] = level - - def getFileLogLevel(self, default='__internal__'): - return self.__getKeyValue('fileLogLevel', default) - - def hasFileLogLevel(self): - return self.has_key('fileLogLevel') - - def getDefaultLogRecordFormat(self): - return self['defaultLogRecordFormat'] - - def setLogRecordFormat(self, format): - self['logRecordFormat'] = format - - def getLogRecordFormat(self, default='__internal__'): - return self.__getKeyValue('logRecordFormat', default) - - def hasLogRecordFormat(self): - return self.has_key('logRecordFormat') - - def getDefaultLogDateFormat(self): - return self['defaultLogDateFormat'] - - def setLogDateFormat(self, format): - self['logDateFormat'] = format - - def getLogDateFormat(self, default='__internal__'): - return self.__getKeyValue('logDateFormat', default) - - def hasLogDateFormat(self): - return self.has_key('logDateFormat') - - def getDefaultCherrypyLogLevel(self): - return self['defaultCherrypyLogLevel'] - - def setCherrypyLogLevel(self, level): - self['cherrypyLogLevel'] = level - - def getCherrypyLogLevel(self, default='__internal__'): - return self.__getKeyValue('cherrypyLogLevel', default) - - def hasCherrypyLogLevel(self): - return self.has_key('cherrypyLogLevel') - - def getDefaultCherrypyLogCherrypy(self): - return self['defaultCherrypyLogFile'] - - def setCherrypyLogFile(self, cherrypyLogFile): - self['cherrypyLogFile'] = cherrypyLogFile - - def getCherrypyLogFile(self, default='__internal__'): - return self.__getKeyValue('cherrypyLogFile', default) - - def hasCherrypyLogFile(self): - return self.has_key('cherrypyLogFile') - - def getDefaultCherrypyAccessFile(self): - return self['defaultCherrypyAccessFile'] - - def setCherrypyAccessFile(self, cherrypyAccessFile): - self['cherrypyAccessFile'] = cherrypyAccessFile - - def getCherrypyAccessFile(self, default='__internal__'): - return self.__getKeyValue('cherrypyAccessFile', default) - - def hasCherrypyAccessFile(self): - return self.has_key('cherrypyAccessFile') - - def isDbAvailable(self): - if os.access(self.getDbPasswordFile(), os.R_OK): - return True - return False - - def getDefaultServiceProtocol(self): - return self['defaultServiceProtocol'] - - def setServiceProtocol(self, serviceProtocol): - self['serviceProtocol'] = serviceProtocol - - def getServiceProtocol(self, default='__internal__'): - return self.__getKeyValue('serviceProtocol', default) - - def hasServiceProtocol(self): - return self.has_key('serviceProtocol') - - def getDefaultServicePort(self): - return self['defaultServicePort'] - - def setServicePort(self, servicePort): - self['servicePort'] = servicePort - - def getServicePort(self, default='__internal__'): - return int(self.__getKeyValue('servicePort', default)) - - def hasServicePort(self): - return self.has_key('servicePort') - - def getDefaultServiceHost(self): - return self['defaultServiceHost'] - - def setServiceHost(self, serviceHost): - self['serviceHost'] = serviceHost - - def getServiceHost(self, default='__internal__'): - return self.__getKeyValue('serviceHost', default) - - def hasServiceHost(self): - return self.has_key('serviceHost') - - def getDefaultAdminUsername(self): - return self['defaultAdminUsername'] - - def setAdminUsername(self, adminUsername): - self['adminUsername'] = adminUsername - - def getAdminUsername(self, default='__internal__'): - return self.__getKeyValue('adminUsername', default) - - def hasAdminUsername(self): - return self.has_key('adminUsername') - - def getDefaultAdminPassword(self): - return self['defaultAdminPassword'] - - def setAdminPassword(self, adminPassword): - self['adminPassword'] = adminPassword - - def getAdminPassword(self, default='__internal__'): - return self.__getKeyValue('adminPassword', default) - - def hasAdminPassword(self): - return self.has_key('adminPassword') - - def getDefaultDb(self): - return self['defaultDb'] - - def setDb(self, db): - self['db'] = db - - def getDb(self, default='__internal__'): - return self.__getKeyValue('db', default) - - def hasDb(self): - return self.has_key('db') - - def getDefaultDbHost(self): - return self['defaultDbHost'] - - def setDbHost(self, dbHost): - self['dbHost'] = dbHost - - def getDbHost(self, default='__internal__'): - return self.__getKeyValue('dbHost', default) - - def hasDbHost(self): - return self.has_key('dbHost') - - def getDefaultDbPort(self): - return self['defaultDbPort'] - - def setDbPort(self, dbPort): - self['dbPort'] = dbPort - - def getDbPort(self, default='__internal__'): - return self.__getKeyValue('dbPort', default) - - def hasDbPort(self): - return self.has_key('dbPort') - - def getDefaultDbPassword(self): - return self['defaultDbPassword'] - - def setDbPassword(self, dbPassword): - self['dbPassword'] = dbPassword - - def getDbPassword(self, default='__internal__'): - return self.__getKeyValue('dbPassword', default) - - def hasDbPassword(self): - return self.has_key('dbPassword') - - def getDefaultDbPasswordFile(self): - return self['defaultDbPasswordFile'] - - def getDbPasswordFile(self, default='__internal__'): - return self.__getKeyValue('dbPasswordFile', default) - - def setDbPasswordFile(self, f): - self['dbPasswordFile'] = f - - def hasDbPasswordFile(self): - return self.has_key('dbPasswordFile') - - def getDefaultDbUser(self): - return self['defaultDbUser'] - - def getDbUser(self, default='__internal__'): - return self.__getKeyValue('dbUser', default) - - def setDbUser(self, u): - self['dbUser'] = u - - def hasDbUser(self): - return self.has_key('dbUser') - - def getDbSchema(self): - return self['dbSchema'] - - def getDefaultConfigFile(self): - return self['defaultConfigFile'] - - def setConfigFile(self, configFile): - self['configFile'] = configFile - - def getConfigFile(self, default='__internal__'): - return self.__getKeyValue('configFile', default) - - def hasConfigFile(self): - return self.has_key('configFile') - - def getDefaultSessionCacheFile(self): - return self['defaultSessionCacheFile'] - - def setSessionCacheFile(self, sessionCacheFile): - self['sessionCacheFile'] = sessionCacheFile - - def getSessionCacheFile(self, default='__internal__'): - return self.__getKeyValue('sessionCacheFile', default) - - def hasSessionCacheFile(self): - return self.has_key('sessionCacheFile') - - def getDefaultRequireSessionCredentials(self): - return self['defaultRequireSessionCredentials'] - - def setRequireSessionCredentials(self, requireSessionCredentials): - self['requireSessionCredentials'] = requireSessionCredentials - - def getRequireSessionCredentials(self, default='__internal__'): - return self.__getKeyValue('requireSessionCredentials', default) - - def hasRequireSessionCredentials(self): - return self.has_key('requireSessionCredentials') - - def getDefaultSslCaCertFile(self): - return self['defaultSslCaCertFile'] - - def setSslCaCertFile(self, sslCaCertFile): - self['sslCaCertFile'] = sslCaCertFile - - def getSslCaCertFile(self, default='__internal__'): - return self.__getKeyValue('sslCaCertFile', default) - - def hasSslCaCertFile(self): - return self.has_key('sslCaCertFile') - - def getDefaultSslCertFile(self): - return self['defaultSslCertFile'] - - def setSslCertFile(self, sslCertFile): - self['sslCertFile'] = sslCertFile - - def getSslCertFile(self, default='__internal__'): - return self.__getKeyValue('sslCertFile', default) - - def hasSslCertFile(self): - return self.has_key('sslCertFile') - - def getDefaultSslKeyFile(self): - return self['defaultSslKeyFile'] - - def setSslKeyFile(self, sslKeyFile): - self['sslKeyFile'] = sslKeyFile - - def getSslKeyFile(self, default='__internal__'): - return self.__getKeyValue('sslKeyFile', default) - - def hasSslKeyFile(self): - return self.has_key('sslKeyFile') - -####################################################################### -# Testing. - -if __name__ == '__main__': - cm = getInstance() - print cm diff --git a/src/python/dm/common/utility/consoleLoggingHandler.py b/src/python/dm/common/utility/consoleLoggingHandler.py deleted file mode 100755 index bf586773..00000000 --- a/src/python/dm/common/utility/consoleLoggingHandler.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python - -# -# Console logging handler class -# - -####################################################################### - -import socket -import pwd -import os -from logging import StreamHandler - -####################################################################### - -class ConsoleLoggingHandler(StreamHandler): - """ Class that enables console logging. """ - def __init__(self, *args): - StreamHandler.__init__(self, *args) - self._user = pwd.getpwuid(os.getuid())[0] - self._host = socket.gethostname() - - def emit(self, record): - record.__dict__['user'] = self._user - record.__dict__['host'] = self._host - return StreamHandler.emit(self, record) - -####################################################################### -# Testing. - -if __name__ == '__main__': - import sys - import logging - exec 'sh = ConsoleLoggingHandler(sys.stdout,)' - sh.setLevel(logging.INFO) - rootLogger = logging.getLogger('') - logging.basicConfig(level=logging.DEBUG) - - mainLogger = logging.getLogger('main') - mainLogger.debug("main debug") - mainLogger.info("main info") - diff --git a/src/python/dm/common/utility/dmModuleManager.py b/src/python/dm/common/utility/dmModuleManager.py deleted file mode 100755 index 62a85e90..00000000 --- a/src/python/dm/common/utility/dmModuleManager.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python - -# -# Module manager class. -# - -####################################################################### - -import threading - -####################################################################### - -# Get singleton instance. -def getInstance(): - from dm.common.utility.dmModuleManager import DmModuleManager - try: - mgr = DmModuleManager() - except DmModuleManager, ex: - mgr = ex - return mgr - -class DmModuleManager: - """ Singleton class used for managing dm modules. """ - - # Singleton. - __instanceLock = threading.RLock() - __instance = None - - def __init__(self): - DmModuleManager.__instanceLock.acquire() - try: - if DmModuleManager.__instance: - raise DmModuleManager.__instance - DmModuleManager.__instance = self - from dm.common.utility import loggingManager - self._logger = loggingManager.getLogger(self.__class__.__name__) - self._lock = threading.RLock() - self._moduleList = [] - self._modulesRunning = False - finally: - DmModuleManager.__instanceLock.release() - - def addModule(self, m): - self._lock.acquire() - try: - self._logger.debug('Adding dm module: %s' % m.__class__.__name__) - self._moduleList.append(m) - finally: - self._lock.release() - - def startModules(self): - self._lock.acquire() - try: - if self._modulesRunning: - return - for m in self._moduleList: - self._logger.debug('Starting dm module: %s' % m.__class__.__name__) - m.start() - self._modulesRunning = True - finally: - self._lock.release() - - def stopModules(self): - self._lock.acquire() - try: - if not self._modulesRunning: - return - n = len(self._moduleList) - for i in range(0, n): - m = self._moduleList[n-1-i] - self._logger.debug('Stopping dm module: %s' % m.__class__.__name__) - m.stop() - self._modulesRunning = False - finally: - self._lock.release() - -####################################################################### -# Testing. - -if __name__ == '__main__': - pass diff --git a/src/python/dm/common/utility/dmSubprocess.py b/src/python/dm/common/utility/dmSubprocess.py deleted file mode 100755 index 46a9964c..00000000 --- a/src/python/dm/common/utility/dmSubprocess.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/env python - -# -# Subprocess class -# - -####################################################################### - -import os -import subprocess -import platform - -from dm.common.utility import loggingManager -from dm.common.exceptions.commandFailed import CommandFailed - -####################################################################### - -class DmSubprocess(subprocess.Popen): - - def __init__(self, args, bufsize=0, executable=None, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=None, close_fds=False, shell=True, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, useExceptions=True, quietMode=False): - """ Overrides Popen constructor with defaults more appropriate DM. """ - subprocess.Popen.__init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags) - self._logger = loggingManager.getLogger(self.__class__.__name__) - self._stdout = None - self._stderr = None - self._args = args - self._useExceptions = useExceptions - self._quietMode = quietMode - - def _commandLog(self): - # Not very useful to show the name of this file. - # Walk up the stack to find the caller. - import traceback - stack = traceback.extract_stack() - for i in range(2, len(stack)): - if stack[-i][0] != stack[-1][0]: - fileName, lineNumber, functionName, text = stack[-i] - break - else: - fileName = lineNumber = functionName = text = '?' - - self._logger.debug('From [%s:%s] Invoking: [%s]' % (os.path.basename(fileName), lineNumber, self._args)) - - def run(self, input=None): - """ Run subprocess. """ - if not self._quietMode: - self._commandLog() - (self._stdout, self._stderr) = subprocess.Popen.communicate(self, input) - if not self._quietMode: - self._logger.debug('Exit status: %s' % self.returncode) - if self.returncode != 0 and self._useExceptions: - if not self._quietMode: - self._logger.debug('StdOut: %s' % self._stdout) - self._logger.debug('StdErr: %s' % self._stderr) - error = self._stderr.strip() - if error == '': - error = self._stdout.strip() - raise CommandFailed('%s' % (error)) - return (self._stdout, self._stderr) - - def getLogger(self): - return self._logger - - def getArgs(self): - return self._args - - def getStdOut(self): - return self._stdout - - def getStdErr(self): - return self._stderr - - def getExitStatus(self): - return self.returncode - -# Convenience function for getting subprocess. -def getSubprocess(command): - if platform.system() != 'Windows': - close_fds = True - else: - close_fds = False - p = DmSubprocess(command, close_fds=close_fds) - return p - -# Convenience function for executing command. -def executeCommand(command): - """ Create subprocess and run it, return subprocess object. """ - p = getSubprocess(command) - p.run() - return p - -# Convenience function for executing command that may fail, and we do not -# care about the failure. -def executeCommandAndIgnoreFailure(command): - """ Create subprocess, run it, igore any failures, and return subprocess object. """ - p = getSubprocess(command) - try: - p.run() - except CommandFailed, ex: - p.getLogger().debug('Command failed, stdout: %s, stderr: %s' % (p.getStdOut(), p.getStdErr())) - return p - -def executeCommandAndLogToStdOut(command): - """ Execute command, display output to stdout, maintain log file and return subprocess object. """ - p = getSubprocess(command) - p._commandLog() - - while True: - outp = p.stdout.readline() - if not outp: - break - print outp, - - retval = p.wait() - - p._logger.debug('Exit status: %s' % retval) - - if retval != 0: - error = '' - while True: - err = p.stderr.readline() - if not err: - break - error += err - raise CommandFailed(error) - return p - -####################################################################### -# Testing. - -if __name__ == '__main__': - p = DmSubprocess('ls -l', useExceptions=False) - p.run() - print p.getStdOut() - print p.getStdErr() - print p.getExitStatus() - diff --git a/src/python/dm/common/utility/loggingManager.py b/src/python/dm/common/utility/loggingManager.py deleted file mode 100755 index 98663847..00000000 --- a/src/python/dm/common/utility/loggingManager.py +++ /dev/null @@ -1,332 +0,0 @@ -#!/usr/bin/env python - -# -# Logging manager singleton. -# - -####################################################################### - -import re -import sys -import os.path -import logging -import ConfigParser -from dm.common.utility import configurationManager -from dm.common.exceptions.configurationError import ConfigurationError - -####################################################################### - -# Get singleton instance. -def getInstance(): - from dm.common.utility.loggingManager import LoggingManager - try: - lm = LoggingManager() - except LoggingManager, ex: - lm = ex - return lm - -def getLogger(name='defaultLogger'): - """ Convenience function to obtain logger. """ - return getInstance().getLogger(name) - -def setConsoleLogLevel(level): - """ Convenience function to set the console log level. """ - return getInstance().setConsoleLogLevel(level) - -def setFileLogLevel(level): - """ Convenience function to set the file log level. """ - return getInstance().setFileLogLevel(level) - -class LoggingManager: - """ - Configuration: - The log manager class is initialized via a configuration file - that may have the following sections: - ConsoleLogging # Used for output on the screen - FileLogging # Used for logging into a file - - Each section in the configuration file should have the following - keys: - handler # Indicates which handler class to use - level # Indicates logging level - format # Indicates format for log messages - dateformat # Indicates date format used for log messages - - Given below is an example of a valid configuration file: - - [ConsoleLogging] - handler=ConsoleLoggingHandler(sys.stdout,) - level=info - format=[%(levelname)s] %(message)s - dateformat=%m/%d/%y %H:%M:%S - [FileLogging] - handler=TimedRotatingFileLoggingHandler('/tmp/dm.log') - level=debug - format=%(asctime)s,%(msecs)d [%(levelname)s] %(module)s:%(lineno)d %(user)s@%(host)s %(name)s (%(process)d): %(message)s - dateformat=%m/%d/%y %H:%M:%S - """ - - # Singleton. - __instance = None - - def __init__(self): - if LoggingManager.__instance: - raise LoggingManager.__instance - LoggingManager.__instance = self - self._consoleHandler = None - self._fileHandlerList = [] - self._maxIntLevel = logging.CRITICAL - self._minIntLevel = logging.NOTSET - self._levelRegExList = [] - self._logger = logging.getLogger(self.__class__.__name__) - self._initFlag = False - - def setMinLogLevel(self, minLogLevel=logging.INFO): - self._minIntLevel = minLogLevel - - def parseLevelRegEx(self, levelRegExList): - """ Parse a list of expressions of the form <regex>=<log-level>. """ - lines = levelRegExList.split('\n') - for line in lines: - try: - # Use the right split so we can have '='s in the regex - (regex, level) = line.rsplit('=', 1) - pattern = re.compile(regex) - tuple = (pattern, logging.getLevelName(level.upper())) - self._levelRegExList.append(tuple) - except Exception, ex: - # Do not fail, but log an error. - self._logger.error('Parser error in log configuration file: %s' % line) - self._logger.exception(ex) - - # Get Log Level based on a string representation - def getIntLogLevel(self, levelStr): - level = logging.getLevelName(levelStr) - # Level should be an integer - try: - return int(level) - except ValueError, ex: - raise ConfigurationError('"%s" is not valid log level' % levelStr) - - # Configure log handlers. - def configureHandlers(self): - """ Configure log handlers from the config file. """ - cm = configurationManager.getInstance() - configFile = cm.getLogConfigFile() - configSections = self.__getConfigSections(configFile) - - # Console handler. - defaults = { - 'level' : cm.getConsoleLogLevel(), - 'format' : cm.getLogRecordFormat(), - 'dateformat' : cm.getLogDateFormat(), - 'handler' : 'ConsoleLoggingHandler(sys.stdout,)' - } - consoleHandler = self.__configureHandler(configFile, 'ConsoleLogging', defaults) - - if consoleHandler != None: - self._consoleHandler = consoleHandler - - # File logging. # Do not configure if log directory does - # not exist. - defaults['handler'] = None - defaults['level'] = cm.getFileLogLevel() - if not os.path.exists(configFile): - # No config file, we'll configure default. - defaultLogFile = cm.getLogFile() - defaultLogDir = os.path.dirname(defaultLogFile) - if os.path.exists(defaultLogDir): - handler = 'TimedRotatingFileLoggingHandler("%s")' % defaultLogFile - defaults['handler'] = handler - fileHandler = self.__configureHandler(configFile, 'FileLogging', defaults) - if fileHandler != None: - self._fileHandlerList.append(fileHandler) - - else: - # Parse all file loggers present in the config file - for configSection in configSections: - if configSection.startswith('FileLogging'): - fileHandler = self.__configureHandler(configFile, configSection, defaults) - if fileHandler != None: - self._fileHandlerList.append(fileHandler) - - # Add handlers to the root logger. Use logging class here - # to make sure we can have a logger when we parse the - # logger expressions - rootLogger = logging.getLogger('') - for handler in [self._consoleHandler] + self._fileHandlerList: - rootLogger.addHandler(handler) - - # Get a logger factory based on our current config - self.configureLoggers(configFile, defaultLevel=cm.getFileLogLevel()) - - def configureLoggers(self, configFile, defaultLevel='error'): - configParser = ConfigParser.ConfigParser() - configParser.read(configFile) - - rootLogLevel = 'error' - levelRegEx = '^.*$=%s' % (defaultLevel) - if configParser.has_section('LoggerLevels'): - rootLogLevel = configParser.get('LoggerLevels', 'root', rootLogLevel) - levelRegEx = configParser.get('LoggerLevels', 'levelregex', levelRegEx) - - rootLevelInt = logging.getLevelName(rootLogLevel.upper()) - logging.getLogger('').root.setLevel(rootLevelInt) - logging.getLogger('').debug('Set root logger to %s' % rootLevelInt) - - if not levelRegEx: - return - - # Parse expressions of the form <regex>=<log-level>. """ - lines = levelRegEx.split('\n') - for line in lines: - try: - # Use the right split so we can have '='s in the regex - (regex, level) = line.rsplit('=', 1) - pattern = re.compile(regex) - tuple = (pattern, logging.getLevelName(level.upper())) - self._levelRegExList.append(tuple) - except Exception, ex: - # Do not fail - self._logger.error('Parser error in log configuration file: %s' % line) - self._logger.exception(ex) - - def __getOptionFromConfigFile(self, configParser, configSection, key, defaultValue=None): - """ Get specified option from the configuration file. """ - if configParser.has_section(configSection): - return configParser.get(configSection, key, True) - else: - return defaultValue - - # Get the sections in the config file - def __getConfigSections(self, configFile): - """ Return a list of the sections in the given config file """ - configParser = ConfigParser.RawConfigParser() - configParser.read(configFile) - return configParser.sections() - - # Configure particular handler with given defaults. - def __configureHandler(self, configFile, configSection, defaults): - """ Configure specified handler with a given defaults. """ - configParser = ConfigParser.ConfigParser(defaults) - configParser.read(configFile) - handlerOption = defaults['handler'] - try: - handlerOption = configParser.get(configSection, 'handler', True) - except Exception, ex: - pass - - # If handlerOption is empty, handler cannot be instantiated. - handler = None - if handlerOption != None: - # Handler argument format: MyHandler(arg1, arg2, ...) - # Module will be in lowercase letters, but the class - # should be capitalized. - handlerName = re.sub('\(.*', '', handlerOption) - moduleName = handlerName[0].lower() + handlerName[1:] - try: - exec 'from dm.common.utility import %s' % (moduleName) - exec '_handler = %s.%s' % (moduleName, handlerOption) - except IOError, ex: - errno, _emsg = ex - import errno - - # If the exception raised is an I/O permissions error, ignore - # it and disable this log handler. This allows non-root users - # to use the (system-wide) default log configuration - if _errno != errno.EACCES: - raise - _handler = None - except Exception, ex: - raise ConfigurationError(exception=ex) - - # Only request setting from the config file if it was - # not set via environment variable, or programmatically. - if _handler != None: - try: - _level = self.__getOptionFromConfigFile(configParser, - configSection, 'level', defaults['level']) - intLevel = self.getIntLogLevel(_level.upper()) - _handler.setLevel(intLevel) - - _format = self.__getOptionFromConfigFile(configParser, configSection, 'format', defaults['format']) - _dateformat = self.__getOptionFromConfigFile(configParser, configSection, 'dateformat', defaults['dateformat']) - - _handler.setFormatter(logging.Formatter(_format, _dateformat)) - except Exception, ex: - raise ConfigurationError(exception=ex) - - # Look to see if there is a filter to apply to the handler - filter = None - try: - filter = configParser.get(configSection, 'filter') - except Exception, ex: - pass - - if filter: - _handler.addFilter(logging.Filter(filter)) - return _handler - - def getLogger(self, name='defaultLogger'): - if not self._initFlag: - self._initFlag = True - self.configureHandlers() - logger = logging.getLogger(name) - logger.setLevel(self.getLevel(name)) - return logger - - def getLevel(self, name): - # Match from the known regex list. - level = logging.NOTSET - - # The last regex is most important. - for e in reversed(self._levelRegExList): - (pattern, level) = e - - # If we return not None it is a match - if not None == pattern.match(name): - break - - if level > self._maxIntLevel: - level = self._maxIntLevel - if level < self._minIntLevel: - level = self._minIntLevel - return level - - def setConsoleLogLevel(self, level): - try: - # We need to override the logger levels and the handler - intLevel = self.getIntLogLevel(level.upper()) - self._consoleHandler.setLevel(intLevel) - self._maxIntLevel = intLevel - self._logger.setLevel(intLevel) - except Exception, ex: - raise ConfigurationError(exception=ex) - - def setFileLogLevel(self, level): - try: - # We need to override the logger levels and the handler - intLevel = self.getIntLogLevel(level.upper()) - for handler in self._fileHandlerList: - handler.setLevel(intLevel) - self._maxIntLevel = intLevel - self._logger.setLevel(intLevel) - except Exception, ex: - raise ConfigurationError(exception=ex) - -####################################################################### -# Testing. - -if __name__ == '__main__': - lm = getInstance() - logger = lm.getLogger('Main') - logger.info('Info In Main') - logger = lm.getLogger('Main') - logger.info('Info In Main 2') - logger = lm.getLogger('') - logger.info('Info using root logger') - logger = lm.getLogger('Main.2') - logger.info('Info in Main.2') - logger.debug('You should not see this message') - lm.setConsoleLogLevel('debug') - logger.debug('Debug in Main.2') diff --git a/src/python/dm/common/utility/timedRotatingFileLoggingHandler.py b/src/python/dm/common/utility/timedRotatingFileLoggingHandler.py deleted file mode 100755 index 717fe1ea..00000000 --- a/src/python/dm/common/utility/timedRotatingFileLoggingHandler.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python - -####################################################################### - -import socket -import pwd -import os -from logging.handlers import TimedRotatingFileHandler - -####################################################################### - -class TimedRotatingFileLoggingHandler(TimedRotatingFileHandler): - """ Class that enables logging into files. """ - def __init__(self, filename, when='D', interval=1, backupCount=0, encoding=None): - TimedRotatingFileHandler.__init__(self, filename, when, interval, backupCount, encoding) - self._user = pwd.getpwuid(os.getuid())[0] - self._host = socket.gethostname() - - def emit(self, record): - record.__dict__['user'] = self._user - record.__dict__['host'] = self._host - return TimedRotatingFileHandler.emit(self, record) - -####################################################################### -# Testing. - -if __name__ == '__main__': - pass diff --git a/src/python/dm/fs_service/__init__.py b/src/python/dm/fs_service/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/python/dm/fs_service/impl/__init__.py b/src/python/dm/fs_service/impl/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/python/dm/fs_service/impl/fsControllerImpl.py b/src/python/dm/fs_service/impl/fsControllerImpl.py deleted file mode 100644 index 798464d6..00000000 --- a/src/python/dm/fs_service/impl/fsControllerImpl.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python - -# -# Implementation for file system controller. -# - -####################################################################### - -import threading - -from dm.common.objects.dmObject import DmObject -from dm.common.objects.dmObjectManager import DmObjectManager -from dm.common.utility.dmSubprocess import DmSubprocess - -####################################################################### - -class FsControllerImpl(DmObjectManager): - """ FS controller implementation class. """ - - def __init__(self): - DmObjectManager.__init__(self) - - def getDirectoryList(self, path): - p = DmSubprocess('ls -l %s' % path) - p.run() - return DmObject({'path' : path, 'directoryList' : p.getStdOut()}) diff --git a/src/python/dm/fs_service/service/__init__.py b/src/python/dm/fs_service/service/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/src/python/dm/fs_service/service/fsController.py b/src/python/dm/fs_service/service/fsController.py deleted file mode 100755 index 050121c2..00000000 --- a/src/python/dm/fs_service/service/fsController.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python - -####################################################################### - -import cherrypy - -from dm.common.service.dmController import DmController -from dm.common.objects.dmObject import DmObject -from dm.common.exceptions.dmException import DmException -from dm.common.exceptions.internalError import InternalError -from dm.common.exceptions.invalidRequest import InvalidRequest - -from dm.fs_service.impl.fsControllerImpl import FsControllerImpl - -####################################################################### - -class FsController(DmController): - - def __init__(self): - DmController.__init__(self) - self._fsControllerImpl = FsControllerImpl() - - @cherrypy.expose - def getDirectoryList(self, **kwargs): - try: - if not kwargs.has_key('path'): - raise InvalidRequest('Missing directory path.') - path = kwargs.get('path') - response = '%s' % self._fsControllerImpl.getDirectoryList(path).getJsonRep() - self.getLogger().debug('Returning: %s' % response) - except DmException, ex: - self.getLogger().error('%s' % ex) - self.handleException(ex) - response = ex.getJsonRep() - except Exception, ex: - self.getLogger().error('%s' % ex) - self.handleException(ex) - response = InternalError(ex).getJsonRep() - return self.formatJsonResponse(response) - diff --git a/src/python/dm/fs_service/service/fsService.py b/src/python/dm/fs_service/service/fsService.py deleted file mode 100755 index 49f524d3..00000000 --- a/src/python/dm/fs_service/service/fsService.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -# -# File system controller service -# - -#################################################################### - -from dm.common.service.dmRestWebService import DmRestWebService -from dm.common.utility import dmModuleManager -from dm.fs_service.service import fsServiceRouteMapper - -#################################################################### - -class FsService(DmRestWebService): - - def __init__(self): - DmRestWebService.__init__(self, fsServiceRouteMapper) - - def initDmModules(self): - self._logger.debug('Initializing dm modules') - - # Add modules that will be started. - moduleManager = dmModuleManager.getInstance() - self._logger.debug('Initialized dm modules') - -#################################################################### -# Run service - -if __name__ == '__main__': - service = FsService(); - service.run() diff --git a/src/python/dm/fs_service/service/fsServiceRouteMapper.py b/src/python/dm/fs_service/service/fsServiceRouteMapper.py deleted file mode 100755 index 73cf05c8..00000000 --- a/src/python/dm/fs_service/service/fsServiceRouteMapper.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python - -# -# Route mapper for file system service. -# - -####################################################################### - -import sys -import os - -import cherrypy -from dm.common.utility import loggingManager -from dm.fs_service.service.fsController import FsController - -####################################################################### - -def setupRoutes(): - """ Setup RESTFul routes. """ - - # Static instances shared between different routes - fsController = FsController() - - # Define routes. - # Make sure to have leading '/' for consistency. - routes = [ - # ('GET') routes do not require authorization. - # ('PUT', 'POST', 'DELETE') routes require authorization. - - # - # FS Controller routes - # - - # Get directory listing - { - 'name' : 'getDirectoryList', - 'path' : '/directory/list', - 'controller' : fsController, - 'action' : 'getDirectoryList', - 'method' : ['GET'] - }, - ] - - # Add routes to dispatcher. - d = cherrypy.dispatch.RoutesDispatcher() - logger = loggingManager.getLogger('setupRoutes') - for route in routes: - logger.debug('Connecting route: %s' % route) - d.connect(route['name'], route['path'], action=route['action'], controller=route['controller'], conditions=dict(method=route['method'])) - return d - -- GitLab