sf.py

Go to the documentation of this file.
00001 from vyperlogix.classes.CooperativeClass import Cooperative
00002 from vyperlogix.hash import lists
00003 
00004 import logging
00005 
00006 from vyperlogix import misc
00007 from vyperlogix.misc import ObjectTypeName
00008 
00009 from vyperlogix.classes import SmartObject
00010 
00011 __copyright__ = """\
00012 (c). Copyright 1990-2008, Vyper Logix Corp., All Rights Reserved.
00013 
00014 Published under Creative Commons License 
00015 (http://creativecommons.org/licenses/by-nc/3.0/) 
00016 restricted to non-commercial educational use only., 
00017 
00018 See also: http://www.VyperLogix.com and http://www.pypi.info for details.
00019 
00020 THE AUTHOR VYPER LOGIX CORP DISCLAIMS ALL WARRANTIES WITH REGARD TO
00021 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
00022 FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
00023 INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
00024 FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
00025 NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
00026 WITH THE USE OR PERFORMANCE OF THIS SOFTWARE !
00027 
00028 USE AT YOUR OWN RISK.
00029 """
00030 
00031 BAD_INFO_LIST = [None, [], [{}], {}, '', 'fail', 'warn']
00032 
00033 class SalesForceBaseQuery(Cooperative):
00034     def __init__(self,username,password):
00035         self.__username__ = username
00036         self.__password__ = password
00037         self.__sfdc__ = None
00038 
00039         from pyax.connection import Connection
00040         from pyax.exceptions import ApiFault
00041         try:
00042             self.__sfdc__ = Connection.connect(self.username, self.password)
00043             return True
00044         except AttributeError, details:
00045             from vyperlogix.misc import _utils
00046             info_string = _utils.formattedException(details=details)
00047             print >>sys.stderr, info_string
00048         except ApiFault, details:
00049             from vyperlogix.misc import _utils
00050             info_string = _utils.formattedException(details=details)
00051             print >>sys.stderr, info_string
00052         return False
00053 
00054     def dictFromSOQL(self, ret):
00055         d = lists.HashedLists2()
00056         try:
00057             for k in ret.keys():
00058                 v = ret[k]
00059                 for vk in v.keys():
00060                     d[vk] = v[vk]
00061         except Exception, details:
00062             from vyperlogix.misc import _utils
00063             info_string = _utils.formattedException(details=details)
00064             logging.warning(info_string)
00065         return d
00066 
00067     def get_username(self):
00068         return self.__username__
00069 
00070     username = property(get_username)
00071 
00072     def get_password(self):
00073         return self.__password__
00074 
00075     password = property(get_password)
00076 
00077     def get_sfdc(self):
00078         return self.__sfdc__
00079 
00080     sfdc = property(get_sfdc)
00081 
00082 class SalesForceQuery(Cooperative):
00083     ##
00084     # This object connects with any other object that holds an sfdc object.
00085     def __init__(self,sfdc):
00086         try:
00087             self.__sfdc__ = sfdc.sfdc
00088         except:
00089             self.__sfdc__ = sfdc
00090         self.__lastError__ = ''
00091 
00092     def sfdc():
00093         doc = "sfdc property"
00094         def fget(self):
00095             return self.__sfdc__
00096         def fset(self, sfdc):
00097             self.__sfdc__ = sfdc
00098         return locals()
00099     sfdc = property(**sfdc())
00100     
00101     def lastError():
00102         doc = "lastError property"
00103         def fget(self):
00104             return self.__lastError__
00105         return locals()
00106     lastError = property(**lastError())
00107     
00108     def sf_query(self,soql,callback=None):
00109         from pyax.exceptions import ApiFault
00110         try:
00111             ret = self.sfdc.queryAll(soql,callback=callback)
00112             return ret
00113         except ApiFault, details:
00114             from vyperlogix.misc import _utils
00115             info_string = _utils.formattedException(details=details)
00116             self.__lastError__ = info_string
00117         return None
00118 
00119     def contains_sf_objects(self,objects):
00120         try:
00121             return False if any([( item.has_key('done') and item.has_key('size') ) for item in objects]) else True
00122         except:
00123             pass
00124         return True if (objects is not None) else False
00125     
00126     def getObjectsFromSOQL(self,soql,callback=None,useRealObjects=True):
00127         try:
00128             ret = self.sf_query(soql,callback=callback)
00129             if (ret not in BAD_INFO_LIST):
00130                 objects = []
00131                 for k in ret.keys():
00132                     v = ret[k]
00133                     if (not useRealObjects):
00134                         val = lists.copyAsDict(v)
00135                         objects.append(val.asDict())
00136                     else:
00137                         objects.append(v)
00138                 if (not self.contains_sf_objects(objects)):
00139                     objects = [SmartObject.SmartObject(objects[0])]
00140                 return objects
00141         except Exception, details:
00142             from vyperlogix.misc import _utils
00143             info_string = _utils.formattedException(details=details)
00144             self.__lastError__ = info_string
00145 
00146         return None
00147 
00148 if __name__ == "__main__":
00149     import sys
00150     print >>sys.stdout, __copyright__
00151     print >>sys.stderr, __copyright__
00152 
00153 

© Copyright 2008-2009 Vyper Logix Corp., All Right Reserved; If you reference this document or any part of this document you must use the citation verbatim (including the link) "© Copyright 2008-2009 Vyper Logix Corp., All Right Reserved."

Notice: This source code contained in this document is NOT open source and is NOT being distributed as open source.

122,241 lines of code and growing...