コード例 #1
0
def _extractRecordTypeInfo(rtidata):
    data = dict()
    data['available'] = bool_(rtidata[_tPartnerNS.available])
    data['defaultRecordTypeMapping'] = bool_(
        rtidata[_tPartnerNS.defaultRecordTypeMapping])
    data['name'] = text_type(rtidata[_tPartnerNS.name])
    data['recordTypeId'] = text_type(rtidata[_tPartnerNS.recordTypeId])
    return data
コード例 #2
0
def _extractPicklistEntry(pldata):
    data = dict()
    data['active'] = bool_(pldata[_tPartnerNS.active])
    data['validFor'] = [text_type(v) for v in pldata[_tPartnerNS.validFor, ]]
    data['defaultValue'] = bool_(pldata[_tPartnerNS.defaultValue])
    data['label'] = text_type(pldata[_tPartnerNS.label])
    data['value'] = text_type(pldata[_tPartnerNS.value])
    return data
コード例 #3
0
def _extractUserInfo(res):
    data = dict(accessibilityMode=bool_(res[_tPartnerNS.accessibilityMode]),
                currencySymbol=text_type(res[_tPartnerNS.currencySymbol]),
                organizationId=text_type(res[_tPartnerNS.organizationId]),
                organizationMultiCurrency=bool_(
                    res[_tPartnerNS.organizationMultiCurrency]),
                organizationName=text_type(res[_tPartnerNS.organizationName]),
                userDefaultCurrencyIsoCode=text_type(
                    res[_tPartnerNS.userDefaultCurrencyIsoCode]),
                userEmail=text_type(res[_tPartnerNS.userEmail]),
                userFullName=text_type(res[_tPartnerNS.userFullName]),
                userId=text_type(res[_tPartnerNS.userId]),
                userLanguage=text_type(res[_tPartnerNS.userLanguage]),
                userLocale=text_type(res[_tPartnerNS.userLocale]),
                userTimeZone=text_type(res[_tPartnerNS.userTimeZone]),
                userUiSkin=text_type(res[_tPartnerNS.userUiSkin]))
    return data
コード例 #4
0
 def login(self, username, passwd):
     res = BaseClient.login(self, username, passwd)
     data = dict()
     data['passwordExpired'] = bool_(res[_tPartnerNS.passwordExpired])
     data['serverUrl'] = text_type(res[_tPartnerNS.serverUrl])
     data['sessionId'] = text_type(res[_tPartnerNS.sessionId])
     data['userId'] = text_type(res[_tPartnerNS.userId])
     data['userInfo'] = _extractUserInfo(res[_tPartnerNS.userInfo])
     return data
コード例 #5
0
 def upsert(self, externalIdName, sObjects):
     preparedObjects = _prepareSObjects(sObjects)
     res = BaseClient.upsert(self, externalIdName, preparedObjects)
     if not isinstance(res, (tuple, list)):
         res = [res]
     data = list()
     for r in res:
         d = dict()
         data.append(d)
         d['id'] = text_type(r[_tPartnerNS.id])
         d['success'] = success = bool_(r[_tPartnerNS.success])
         if not success:
             d['errors'] = [
                 _extractError(e) for e in r[_tPartnerNS.errors, ]
             ]
         else:
             d['errors'] = list()
         d['isCreated'] = d['created'] = bool_(r[_tPartnerNS.created])
     return data
コード例 #6
0
 def describeTabs(self):
     res = BaseClient.describeTabs(self)
     data = list()
     for r in res:
         tabs = [_extractTab(t) for t in r[_tPartnerNS.tabs, ]]
         d = dict(label=str(r[_tPartnerNS.label]),
                  logoUrl=str(r[_tPartnerNS.logoUrl]),
                  selected=bool_(r[_tPartnerNS.selected]),
                  tabs=tabs)
         data.append(d)
     return data
コード例 #7
0
 def delete(self, ids):
     res = BaseClient.delete(self, ids)
     if not isinstance(res, (tuple, list)):
         res = [res]
     data = list()
     for r in res:
         d = dict()
         data.append(d)
         d['id'] = text_type(r[_tPartnerNS.id])
         d['success'] = success = bool_(r[_tPartnerNS.success])
         if not success:
             d['errors'] = [
                 _extractError(e) for e in r[_tPartnerNS.errors, ]
             ]
         else:
             d['errors'] = list()
     return data
コード例 #8
0
 def update(self, sObjects):
     preparedObjects = _prepareSObjects(sObjects)
     res = BaseClient.update(self, preparedObjects)
     if not isinstance(res, (tuple, list)):
         res = [res]
     data = list()
     for r in res:
         d = dict()
         data.append(d)
         d['id'] = str(r[_tPartnerNS.id])
         d['success'] = success = bool_(r[_tPartnerNS.success])
         if not success:
             d['errors'] = [
                 _extractError(e) for e in r[_tPartnerNS.errors, ]
             ]
         else:
             d['errors'] = list()
     return data
コード例 #9
0
    def sendEmail(self, emails, mass_type='SingleEmailMessage'):
        """
        Send one or more emails from Salesforce.

        Parameters:
            emails - a dictionary or list of dictionaries, each representing
                     a single email as described by https://www.salesforce.com
                     /us/developer/docs/api/Content/sforce_api_calls_sendemail
                     .htm
            massType - 'SingleEmailMessage' or 'MassEmailMessage'.
                       MassEmailMessage is used for mailmerge of up to 250
                       recepients in a single pass.

        Note:
            Newly created Salesforce Sandboxes default to System email only.
            In this situation, sendEmail() will fail with
            NO_MASS_MAIL_PERMISSION.
        """
        preparedEmails = _prepareSObjects(emails)
        if isinstance(preparedEmails, dict):
            # If root element is a dict, then this is a single object not an
            # array
            del preparedEmails['fieldsToNull']
        else:
            # else this is an array, and each elelment should be prepped.
            for listitems in preparedEmails:
                del listitems['fieldsToNull']
        res = BaseClient.sendEmail(self, preparedEmails, mass_type)
        if not isinstance(res, (tuple, list)):
            res = [res]
        data = list()
        for resu in res:
            d = dict()
            data.append(d)
            d['success'] = success = bool_(resu[_tPartnerNS.success])
            if not success:
                d['errors'] = [
                    _extractError(e) for e in resu[_tPartnerNS.errors, ]
                ]
            else:
                d['errors'] = list()
        return data
コード例 #10
0
    def query(self, *args, **kw):
        typeDescs = self.typeDescs

        if len(args) == 1:  # full query string
            queryString = args[0]
        elif len(args) == 2:  # BBB: fields, sObjectType
            queryString = 'select %s from %s' % (args[0], args[1])
            if 'conditionalExpression' in kw:  # BBB: fields, sObjectType,
                # conditionExpression as kwarg
                queryString += ' where %s' % (kw['conditionalExpression'])
        elif len(args) == 3:  # BBB: fields, sObjectType, conditionExpression
            # as positional arg
            whereClause = args[2] and (' where %s' % args[2]) or ''
            queryString = 'select %s from %s%s' % (
                args[0],
                args[1],
                whereClause,
            )
        else:
            raise RuntimeError("Wrong number of arguments to query method.")

        res = BaseClient.query(self, queryString)
        # calculate the union of the sets of record types from each record
        types = reduce(
            lambda a, b: a | b,
            [getRecordTypes(r) for r in res[_tPartnerNS.records, ]],
            set(),
        )
        new_types = types - set(typeDescs.keys())
        if new_types:
            typeDescs.update(self.queryTypesDescriptions(new_types))
        data = QueryRecordSet(
            records=[
                self._extractRecord(r, typeDescs)
                for r in res[_tPartnerNS.records, ]
            ],
            done=bool_(res[_tPartnerNS.done]),
            size=int(text_type(res[_tPartnerNS.size])),
            queryLocator=text_type(res[_tPartnerNS.queryLocator]),
        )
        return data
コード例 #11
0
    def queryMore(self, queryLocator):
        typeDescs = self.typeDescs

        locator = queryLocator
        res = BaseClient.queryMore(self, locator)
        # calculate the union of the sets of record types from each record
        types = reduce(lambda a, b: a | b,
                       [getRecordTypes(r) for r in res[_tPartnerNS.records, ]],
                       set())
        new_types = types - set(typeDescs.keys())
        if new_types:
            typeDescs.update(self.queryTypesDescriptions(new_types))
        data = QueryRecordSet(records=[
            self._extractRecord(r, typeDescs)
            for r in res[_tPartnerNS.records, ]
        ],
                              done=bool_(res[_tPartnerNS.done]),
                              size=int(text_type(res[_tPartnerNS.size])),
                              queryLocator=text_type(
                                  res[_tPartnerNS.queryLocator]))
        return data
コード例 #12
0
 def convert_leads(self, lead_converts):
     preparedLeadConverts = _prepareSObjects(lead_converts)
     del preparedLeadConverts['fieldsToNull']
     res = BaseClient.convertLeads(self, preparedLeadConverts)
     if not isinstance(res, (tuple, list)):
         res = [res]
     data = list()
     for resu in res:
         d = dict()
         data.append(d)
         d['success'] = success = bool_(resu[_tPartnerNS.success])
         if not success:
             d['errors'] = [
                 _extractError(e) for e in resu[_tPartnerNS.errors, ]
             ]
         else:
             d['errors'] = list()
             d['account_id'] = str(resu[_tPartnerNS.accountId])
             d['contact_id'] = str(resu[_tPartnerNS.contactId])
             d['lead_id'] = str(resu[_tPartnerNS.leadId])
             d['opportunity_id'] = str(resu[_tPartnerNS.opportunityId])
     return data
コード例 #13
0
ファイル: marshall.py プロジェクト: hteo1337/pyforce
def booleanMarshaller(fieldname, xml, ns):
    return bool_(xml[getattr(ns, fieldname)])
コード例 #14
0
def _extractTab(tdata):
    data = dict(custom=bool_(tdata[_tPartnerNS.custom]),
                label=text_type(tdata[_tPartnerNS.label]),
                sObjectName=text_type(tdata[_tPartnerNS.sobjectName]),
                url=text_type(tdata[_tPartnerNS.url]))
    return data
コード例 #15
0
 def describeGlobal(self):
     res = BaseClient.describeGlobal(self)
     data = dict()
     data['encoding'] = text_type(res[_tPartnerNS.encoding])
     data['maxBatchSize'] = int(text_type(res[_tPartnerNS.maxBatchSize]))
     sobjects = list()
     for r in res[_tPartnerNS.sobjects, ]:
         d = dict()
         d['activateable'] = bool_(r[_tPartnerNS.activateable])
         d['createable'] = bool_(r[_tPartnerNS.createable])
         d['custom'] = bool_(r[_tPartnerNS.custom])
         try:
             d['customSetting'] = bool_(r[_tPartnerNS.customSetting])
         except KeyError:
             pass
         d['deletable'] = bool_(r[_tPartnerNS.deletable])
         d['deprecatedAndHidden'] = bool_(
             r[_tPartnerNS.deprecatedAndHidden])
         try:
             d['feedEnabled'] = bool_(r[_tPartnerNS.feedEnabled])
         except KeyError:
             pass
         d['keyPrefix'] = text_type(r[_tPartnerNS.keyPrefix])
         d['label'] = text_type(r[_tPartnerNS.label])
         d['labelPlural'] = text_type(r[_tPartnerNS.labelPlural])
         d['layoutable'] = bool_(r[_tPartnerNS.layoutable])
         d['mergeable'] = bool_(r[_tPartnerNS.mergeable])
         d['name'] = text_type(r[_tPartnerNS.name])
         d['queryable'] = bool_(r[_tPartnerNS.queryable])
         d['replicateable'] = bool_(r[_tPartnerNS.replicateable])
         d['retrieveable'] = bool_(r[_tPartnerNS.retrieveable])
         d['searchable'] = bool_(r[_tPartnerNS.searchable])
         d['triggerable'] = bool_(r[_tPartnerNS.triggerable])
         d['undeletable'] = bool_(r[_tPartnerNS.undeletable])
         d['updateable'] = bool_(r[_tPartnerNS.updateable])
         sobjects.append(SObject(**d))
     data['sobjects'] = sobjects
     data['types'] = [text_type(t) for t in res[_tPartnerNS.types, ]]
     if not data['types']:
         # BBB for code written against API < 17.0
         data['types'] = [s.name for s in data['sobjects']]
     return data
コード例 #16
0
def _extractChildRelInfo(crdata):
    data = dict()
    data['cascadeDelete'] = bool_(crdata[_tPartnerNS.cascadeDelete])
    data['childSObject'] = text_type(crdata[_tPartnerNS.childSObject])
    data['field'] = text_type(crdata[_tPartnerNS.field])
    return data
コード例 #17
0
 def describeSObjects(self, sObjectTypes):
     res = BaseClient.describeSObjects(self, sObjectTypes)
     if not isinstance(res, (tuple, list)):
         res = [res]
     data = list()
     for r in res:
         d = dict()
         d['activateable'] = bool_(r[_tPartnerNS.activateable])
         rawreldata = r[_tPartnerNS.ChildRelationships, ]
         relinfo = [_extractChildRelInfo(cr) for cr in rawreldata]
         d['ChildRelationships'] = relinfo
         d['createable'] = bool_(r[_tPartnerNS.createable])
         d['custom'] = bool_(r[_tPartnerNS.custom])
         try:
             d['customSetting'] = bool_(r[_tPartnerNS.customSetting])
         except KeyError:
             pass
         d['deletable'] = bool_(r[_tPartnerNS.deletable])
         d['deprecatedAndHidden'] = bool_(
             r[_tPartnerNS.deprecatedAndHidden])
         try:
             d['feedEnabled'] = bool_(r[_tPartnerNS.feedEnabled])
         except KeyError:
             pass
         fields = r[_tPartnerNS.fields, ]
         fields = [_extractFieldInfo(f) for f in fields]
         field_map = dict()
         for f in fields:
             field_map[f.name] = f
         d['fields'] = field_map
         d['keyPrefix'] = text_type(r[_tPartnerNS.keyPrefix])
         d['label'] = text_type(r[_tPartnerNS.label])
         d['labelPlural'] = text_type(r[_tPartnerNS.labelPlural])
         d['layoutable'] = bool_(r[_tPartnerNS.layoutable])
         d['mergeable'] = bool_(r[_tPartnerNS.mergeable])
         d['name'] = text_type(r[_tPartnerNS.name])
         d['queryable'] = bool_(r[_tPartnerNS.queryable])
         d['recordTypeInfos'] = ([
             _extractRecordTypeInfo(rti)
             for rti in r[_tPartnerNS.recordTypeInfos, ]
         ])
         d['replicateable'] = bool_(r[_tPartnerNS.replicateable])
         d['retrieveable'] = bool_(r[_tPartnerNS.retrieveable])
         d['searchable'] = bool_(r[_tPartnerNS.searchable])
         try:
             d['triggerable'] = bool_(r[_tPartnerNS.triggerable])
         except KeyError:
             pass
         d['undeletable'] = bool_(r[_tPartnerNS.undeletable])
         d['updateable'] = bool_(r[_tPartnerNS.updateable])
         d['urlDetail'] = text_type(r[_tPartnerNS.urlDetail])
         d['urlEdit'] = text_type(r[_tPartnerNS.urlEdit])
         d['urlNew'] = text_type(r[_tPartnerNS.urlNew])
         data.append(SObject(**d))
     return data
コード例 #18
0
def _extractFieldInfo(fdata):
    data = dict()
    data['autoNumber'] = bool_(fdata[_tPartnerNS.autoNumber])
    data['byteLength'] = int(text_type(fdata[_tPartnerNS.byteLength]))
    data['calculated'] = bool_(fdata[_tPartnerNS.calculated])
    data['createable'] = bool_(fdata[_tPartnerNS.createable])
    data['nillable'] = bool_(fdata[_tPartnerNS.nillable])
    data['custom'] = bool_(fdata[_tPartnerNS.custom])
    data['defaultedOnCreate'] = bool_(fdata[_tPartnerNS.defaultedOnCreate])
    data['digits'] = int(text_type(fdata[_tPartnerNS.digits]))
    data['filterable'] = bool_(fdata[_tPartnerNS.filterable])
    try:
        data['htmlFormatted'] = bool_(fdata[_tPartnerNS.htmlFormatted])
    except KeyError:
        data['htmlFormatted'] = False
    data['label'] = text_type(fdata[_tPartnerNS.label])
    data['length'] = int(text_type(fdata[_tPartnerNS.length]))
    data['name'] = text_type(fdata[_tPartnerNS.name])
    data['nameField'] = bool_(fdata[_tPartnerNS.nameField])
    plValues = fdata[_tPartnerNS.picklistValues, ]
    data['picklistValues'] = [_extractPicklistEntry(p) for p in plValues]
    data['precision'] = int(text_type(fdata[_tPartnerNS.precision]))
    data['referenceTo'] = [
        text_type(r) for r in fdata[_tPartnerNS.referenceTo, ]
    ]
    data['restrictedPicklist'] = bool_(fdata[_tPartnerNS.restrictedPicklist])
    data['scale'] = int(text_type(fdata[_tPartnerNS.scale]))
    data['soapType'] = text_type(fdata[_tPartnerNS.soapType])
    data['type'] = text_type(fdata[_tPartnerNS.type])
    data['updateable'] = bool_(fdata[_tPartnerNS.updateable])
    try:
        data['dependentPicklist'] = bool_(fdata[_tPartnerNS.dependentPicklist])
        data['controllerName'] = text_type(fdata[_tPartnerNS.controllerName])
    except KeyError:
        data['dependentPicklist'] = False
        data['controllerName'] = ''
    return Field(**data)