Return-Path: X-Original-To: apmail-ambari-commits-archive@www.apache.org Delivered-To: apmail-ambari-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 62F1319B9E for ; Mon, 25 Apr 2016 14:21:57 +0000 (UTC) Received: (qmail 4860 invoked by uid 500); 25 Apr 2016 14:21:57 -0000 Delivered-To: apmail-ambari-commits-archive@ambari.apache.org Received: (qmail 4830 invoked by uid 500); 25 Apr 2016 14:21:57 -0000 Mailing-List: contact commits-help@ambari.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@ambari.apache.org Delivered-To: mailing list commits@ambari.apache.org Received: (qmail 4821 invoked by uid 99); 25 Apr 2016 14:21:57 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Apr 2016 14:21:57 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 1342BDFC6E; Mon, 25 Apr 2016 14:21:57 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: dili@apache.org To: commits@ambari.apache.org Message-Id: <09795b2431a241eab550f2f5c8a8d9b2@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: ambari git commit: AMBARI-16043: version_builder.py fails to run against Python 2.6 (dili) Date: Mon, 25 Apr 2016 14:21:57 +0000 (UTC) Repository: ambari Updated Branches: refs/heads/trunk b33b98059 -> 25ed583ee AMBARI-16043: version_builder.py fails to run against Python 2.6 (dili) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/25ed583e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/25ed583e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/25ed583e Branch: refs/heads/trunk Commit: 25ed583ee7926456a3ade0ba0644ccd2608b3aaf Parents: b33b980 Author: Di Li Authored: Mon Apr 25 10:20:32 2016 -0400 Committer: Di Li Committed: Mon Apr 25 10:20:32 2016 -0400 ---------------------------------------------------------------------- contrib/version-builder/version_builder.py | 38 +++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/25ed583e/contrib/version-builder/version_builder.py ---------------------------------------------------------------------- diff --git a/contrib/version-builder/version_builder.py b/contrib/version-builder/version_builder.py index 965d80a..2e3fc7f 100644 --- a/contrib/version-builder/version_builder.py +++ b/contrib/version-builder/version_builder.py @@ -119,7 +119,7 @@ class VersionBuilder: if manifest_element is None: raise Exception("Element 'manifest' is not found") - service_element = manifest_element.find("./service[@id='{0}']".format(id)) + service_element = self.findByAttributeValue(manifest_element, "./service", "id", id) if service_element is None: service_element = ET.SubElement(manifest_element, "service") @@ -138,7 +138,7 @@ class VersionBuilder: if manifest_element is None: raise Exception("'manifest' element is not found") - service_element = manifest_element.find("./service[@id='{0}']".format(manifest_id)) + service_element = self.findByAttributeValue(manifest_element, "./service", "id", manifest_id) if service_element is None: raise Exception("Cannot add an available service for {0}; it's not on the manifest".format(manifest_id)) @@ -146,7 +146,7 @@ class VersionBuilder: if available_element is None: raise Exception("'available-services' is not found") - service_element = available_element.find("./service[@idref='{0}']".format(manifest_id)) + service_element = self.findByAttributeValue(available_element, "./service", "idref", manifest_id) if service_element is not None: available_element.remove(service_element) @@ -168,12 +168,15 @@ class VersionBuilder: if repo_parent is None: raise Exception("'repository-info' element is not found") - os_element = repo_parent.find("./os[@family='{0}']".format(os_family)) + os_element = self.findByAttributeValue(repo_parent, "./os", "family", os_family) if os_element is None: os_element = ET.SubElement(repo_parent, 'os') os_element.set('family', os_family) - repo_element = os_element.find("./repo/[reponame='{0}']".format(repo_name)) + if self.useNewSyntax(): + repo_element = os_element.find("./repo/[reponame='{0}']".format(repo_name)) + else: + repo_element = self.findByValue(os_element, "./repo/reponame", repo_name) if repo_element is not None: os_element.remove(repo_element) @@ -202,7 +205,32 @@ class VersionBuilder: except: raise Exception("xmllint command does not appear to be available") + + def findByAttributeValue(self, root, element, attribute, value): + if self.useNewSyntax(): + return root.find("./{0}[@{1}='{2}']".format(element, attribute, value)) + else: + for node in root.findall("{0}".format(element)): + if node.attrib[attribute] == value: + return node + return None; + def findByValue(self, root, element, value): + for node in root.findall("{0}".format(element)): + if node.text == value: + return node + return None + + def useNewSyntax(self): + #Python2.7 and newer shipps with ElementTree that supports a different syntax for XPath queries + major=sys.version_info[0] + minor=sys.version_info[1] + if major > 3 : + return True + elif major == 2: + return (minor > 6) + else: + return False; def update_simple(parent, name, value): """