diff -r 7685cec9fd3c -r f2ddfa555b0f doc/api/python/nokia.nokiaccm-pysrc.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/api/python/nokia.nokiaccm-pysrc.html Fri Sep 11 11:54:49 2009 +0100 @@ -0,0 +1,478 @@ + + + + + nokia.nokiaccm + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package nokia :: + Module nokiaccm + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Module nokia.nokiaccm

+
+  1  #============================================================================  
+  2  #Name        : nokiaccm.py  
+  3  #Part of     : Helium  
+  4   
+  5  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+  6  #All rights reserved. 
+  7  #This component and the accompanying materials are made available 
+  8  #under the terms of the License "Eclipse Public License v1.0" 
+  9  #which accompanies this distribution, and is available 
+ 10  #at the URL "http://www.eclipse.org/legal/epl-v10.html". 
+ 11  # 
+ 12  #Initial Contributors: 
+ 13  #Nokia Corporation - initial contribution. 
+ 14  # 
+ 15  #Contributors: 
+ 16  # 
+ 17  #Description: 
+ 18  #=============================================================================== 
+ 19   
+ 20  """ Nokia specific interface to Synergy sessions. """ 
+ 21   
+ 22  import logging 
+ 23  import netrc 
+ 24  import os 
+ 25  import os.path 
+ 26  import sys 
+ 27  import fileutils 
+ 28   
+ 29  import ccm 
+ 30  import nokia.gscm 
+ 31   
+ 32   
+ 33  # Uncomment this line to enable logging in this module, or configure logging elsewhere 
+ 34  #logging.basicConfig(level=logging.DEBUG) 
+ 35  _logger = logging.getLogger("nokia.nokiaccm") 
+ 36   
+ 37   
+
38 -def open_session(username=None, password=None, engine=None, dbpath=None, database=None, reuse=True): +
39 """Provides a Session object. + 40 + 41 Attempts to return a Session, based either on existing Synergy + 42 sessions or by creating a new one. + 43 + 44 - If a .netrc file can be found on the user's personal drive, + 45 that will be read to obtain Synergy login information if it + 46 is defined there. This will be used to fill in any missing + 47 parameters not passed in the call to open_session(). + 48 + 49 The format of the .netrc file entries should be: + 50 + 51 machine synergy login USERNAME password foobar account DATABASE_PATH@SERVER + 52 + 53 If the details refer to a specific database, the machine can be the database name, + 54 instead of "synergy". + 55 - If an existing session is running that matches the supplied + 56 parameters, it will reuse that. + 57 + 58 """ + 59 # See if a .netrc file can be used + 60 if password == None or username == None or engine == None or dbpath == None: + 61 if sys.platform == "win32": + 62 os.environ['HOME'] = "H:" + os.sep + 63 _logger.debug('Opening .netrc file') + 64 try: + 65 netrc_file = netrc.netrc() + 66 netrc_info = None + 67 # If settings for a specific database + 68 if database != None: + 69 netrc_info = netrc_file.authenticators(database) + 70 + 71 # if not found just try generic one + 72 if netrc_info == None: + 73 netrc_info = netrc_file.authenticators('synergy') + 74 + 75 if netrc_info != None: + 76 (n_username, n_account, n_password) = netrc_info + 77 if username == None: + 78 username = n_username + 79 if password == None: + 80 password = n_password + 81 if n_account != None: + 82 (n_dbpath, n_engine) = n_account.split('@') + 83 if dbpath == None and n_dbpath is not None: + 84 _logger.info('Database path set using .netrc (%s)' % n_dbpath) + 85 dbpath = n_dbpath + 86 if engine == None and n_engine is not None: + 87 _logger.info('Database engine set using .netrc (%s)' % n_engine) + 88 engine = n_engine + 89 except IOError: + 90 _logger.debug('Error accessing .netrc file') + 91 + 92 # using environment username in case username is not defined. + 93 if username == None: + 94 username = os.environ['USERNAME'] + 95 + 96 # looking for dbpath using GSCM database + 97 if dbpath == None and database != None: + 98 _logger.info('Database path set using the GSCM database.') + 99 dbpath = nokia.gscm.get_db_path(database) +100 +101 # looking for engine host using GSCM database +102 if engine == None and database != None: +103 _logger.info('Database engine set using the GSCM database.') +104 engine = nokia.gscm.get_engine_host(database) +105 +106 +107 _sessions = [] +108 # See if any currently running sessions can be used, only if no password submitted, else use a brand new session! +109 if password == None and reuse: +110 current_sessions = ccm.running_sessions() +111 for current_session in current_sessions: +112 if current_session.dbpath == dbpath: +113 return current_session +114 else: +115 if ccm.CCM_BIN == None: +116 raise ccm.CCMException("Could not find CM/Synergy executable in the path.") +117 # Looking for router address using GSCM database +118 router_address = None +119 if database == None and dbpath != None: +120 database = os.path.basename(dbpath) +121 +122 lock = fileutils.Lock(ccm.CCM_SESSION_LOCK) +123 try: +124 lock.lock(wait=True) +125 # if we have the database name we can switch to the correct Synergy router +126 if database != None: +127 router_address = nokia.gscm.get_router_address(database) +128 if sys.platform == "win32" and router_address != None: +129 routerfile = open(os.path.join(os.path.dirname(ccm.CCM_BIN), "../etc/_router.adr"), 'r') +130 current_router = routerfile.read().strip() +131 routerfile.close() +132 if current_router != router_address.strip(): +133 _logger.info('Updating %s' % (os.path.normpath(os.path.join(os.path.dirname(ccm.CCM_BIN), "../etc/_router.adr")))) +134 routerfile = open(os.path.join(os.path.dirname(ccm.CCM_BIN), "../etc/_router.adr"), "w+") +135 routerfile.write("%s\n" % router_address) +136 routerfile.close() +137 +138 # If no existing sessions were available, start a new one +139 new_session = ccm.Session.start(username, password, engine, dbpath) +140 lock.unlock() +141 return new_session +142 finally: +143 lock.unlock() +144 raise ccm.CCMException("Cannot open session for user '%s'" % username) +
145 +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +