コード例 #1
0
ファイル: test_helper.py プロジェクト: benjisg/MavensMate
def delete_metadata(client, metadata={}):
    print '>>> attempting to delete: ', metadata
    tmp, tmp_unpackaged = util.put_tmp_directory_on_disk(True)
    package_xml = util.get_package_xml_contents(metadata)
    util.put_package_xml_in_directory(tmp_unpackaged, package_xml, True)
    empty_package_xml = util.get_empty_package_xml_contents()
    util.put_empty_package_xml_in_directory(tmp_unpackaged, empty_package_xml)
    zip_file = util.zip_directory(tmp, tmp)
    delete_result = client.delete(zipFile=zip_file, rollbackOnError=True)
    util.delete_directory(tmp)
コード例 #2
0
ファイル: metadata.py プロジェクト: vazexqi/mm
    def listMetadataAdvanced(self, metadata_type):
        try:
            metadata_type_def = mm_util.get_meta_type_by_name(metadata_type)
            if metadata_type_def == None:
                return []
            has_children_metadata = False
            if 'childXmlNames' in metadata_type_def and type(metadata_type_def['childXmlNames']) is list:
                has_children_metadata = True
            is_folder_metadata = metadata_type_def['inFolder']
            if is_folder_metadata == True:
                metadata_request_type = self.__transformFolderMetadataNameForListRequest(metadata_type)
            else:
                metadata_request_type = metadata_type
            list_response = self.listMetadata(metadata_request_type, True, mm_util.SFDC_API_VERSION) 
            debug('--------------->')
            debug(list_response)
            if type(list_response) is not list:
                list_response = [list_response]
            #print list_response
            object_hash = {} #=> {"Account" => [ {"fields" => ["foo", "bar"]}, "listviews" => ["foo", "bar"] ], "Contact" => ... }

            if has_children_metadata == True and len(list_response) > 0: #metadata objects like customobject, workflow, etc.
                request_names = []
                for element in list_response:
                    #if element['fullName'] != 'PersonAccount':
                    request_names.append(element['fullName'])
                retrieve_result = self.retrieve(package={
                    metadata_request_type : request_names
                })
                #print '>>>> ',retrieve_result
                tmp = mm_util.put_tmp_directory_on_disk()
                mm_util.extract_base64_encoded_zip(retrieve_result.zipFile, tmp)

                #iterate extracted directory
                for dirname, dirnames, filenames in os.walk(os.path.join(tmp,"unpackaged",metadata_type_def['directoryName'])):
                    for f in filenames:
                        #f => Account.object
                        full_file_path = os.path.join(dirname, f)
                        data = mm_util.parse_xml_from_file(full_file_path)
                        c_hash = {}
                        for child_type in metadata_type_def['childXmlNames']:
                            child_type_def = mm_util.get_meta_type_by_name(child_type)
                            if child_type_def == None: #TODO handle newer child types
                                continue
                            tag_name = child_type_def['tagName']
                            items = []
                            try:
                                if tag_name in data[metadata_request_type]:
                                    if type(data[metadata_request_type][tag_name]) is not list:
                                        data[metadata_request_type][tag_name] = [data[metadata_request_type][tag_name]]
                                    for i, val in enumerate(data[metadata_request_type][tag_name]):
                                        items.append(val['fullName'])
                            except BaseException, e:
                                #print 'exception >>>> ', e.message
                                pass

                            c_hash[tag_name] = items

                        base_name = f.split(".")[0]
                        object_hash[base_name] = c_hash

                shutil.rmtree(tmp)
            #print '>>> ',object_hash
            return_elements = []
            for element in list_response:
                if config.connection.get_plugin_client_setting('mm_ignore_managed_metadata') == True:
                    if 'manageableState' in element and element["manageableState"] != "unmanaged":
                        continue

                children = []
                full_name = element['fullName']
                #if full_name == "PersonAccount":
                #    full_name = "Account" 
                #print 'processing: ', element
                if has_children_metadata == True:
                    if not full_name in object_hash:
                        continue
                    object_detail = object_hash[full_name]
                    if object_detail == None:
                        continue

                    for child in metadata_type_def['childXmlNames']:
                        child_type_def = mm_util.get_meta_type_by_name(child)
                        if child_type_def == None: #TODO: handle more complex types
                            continue
                        tag_name = child_type_def['tagName']
                        if len(object_detail[tag_name]) > 0:
                            gchildren = []
                            for gchild_el in object_detail[tag_name]:
                                gchildren.append({
                                    "text"      : gchild_el,
                                    "isFolder"  : False,
                                    "checked"   : False,
                                    "level"     : 4,
                                    "leaf"      : True,
                                    "id"        : metadata_type_def['xmlName']+"."+full_name+"."+tag_name+"."+gchild_el,
                                    "select"    : False,
                                    "title"     : gchild_el
                                })
                                children = sorted(children, key=itemgetter('text')) 
                          
                            children.append({
                                "text"      : child_type_def['tagName'],
                                "isFolder"  : True,
                                "cls"       : "folder",
                                "children"  : gchildren,
                                "checked"   : False,
                                "level"     : 3,
                                "id"        : metadata_type_def['xmlName']+"."+full_name+"."+tag_name,
                                "select"    : False,
                                "title"     : child_type_def['tagName']
                            })
                                            
                #if this type has folders, run queries to grab all metadata in the folders
                if is_folder_metadata == True:
                    if element["manageableState"] != "unmanaged":
                        continue
                    #print element["fullName"]
                    list_request = {
                        "type"      : metadata_type,
                        "folder"    : element["fullName"]
                    }
                    list_basic_response = self.listMetadata(list_request, True, config.connection.sfdc_api_version) 

                    if type(list_basic_response) is not list:
                        list_basic_response = [list_basic_response]

                    for folder_element in list_basic_response:
                        children.append({
                            "text"      : folder_element['fullName'].split("/")[1],
                            "leaf"      : True,
                            "isFolder"  : False,
                            "checked"   : False,
                            "level"     : 3,
                            "id"        : folder_element['fullName'].replace('/', '.'),
                            "select"    : False,
                            "title"     : folder_element['fullName'].split("/")[1]

                        })
                    
                children = sorted(children, key=itemgetter('text')) 
                is_leaf = True
                cls = ''
                if is_folder_metadata:
                    is_leaf = False
                    cls = 'folder'
                if has_children_metadata:
                    is_leaf = False
                    cls = 'folder'
                if metadata_type_def['xmlName'] == 'Workflow':
                    is_leaf = True
                    cls = ''
                #print '>>> ',element
                return_elements.append({
                    "text"      : element['fullName'],
                    "isFolder"  : is_folder_metadata or has_children_metadata,
                    "cls"       : cls,
                    "leaf"      : is_leaf,
                    "children"  : children,
                    "checked"   : False,
                    "level"     : 2,
                    "id"        : metadata_type_def['xmlName']+'.'+full_name.replace(' ', ''),
                    "select"    : False,
                    "title"     : element['fullName']
                })

            return_elements = sorted(return_elements, key=itemgetter('text')) 
            # if list_response == []:
            #     return list_response

            # return list_response
            return return_elements