From: "Brian Dolbec" <dolsen@gentoo.org> To: gentoo-commits@lists.gentoo.org Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/ Date: Sat, 14 May 2016 18:33:57 +0000 (UTC) [thread overview] Message-ID: <1463250580.57d1ef7f8f98275b066735c66d0da05ea103a9da.dolsen@gentoo> (raw) commit: 57d1ef7f8f98275b066735c66d0da05ea103a9da Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> AuthorDate: Tue May 3 18:46:22 2016 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Sat May 14 18:29:40 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=57d1ef7f repoman/modules/.../pkgmetadata.py: Move parse_metadata_use into the PkgMetadata class This allows for a complete Q/A processing of all the use flags defined in the xml. pym/repoman/modules/scan/metadata/pkgmetadata.py | 138 +++++++++++------------ 1 file changed, 68 insertions(+), 70 deletions(-) diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py b/pym/repoman/modules/scan/metadata/pkgmetadata.py index 1594b27..7117e7d 100644 --- a/pym/repoman/modules/scan/metadata/pkgmetadata.py +++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py @@ -28,7 +28,6 @@ from repoman.modules.scan.scanbase import ScanBase from portage.exception import InvalidAtom from portage import os -from portage import exception from portage.dep import Atom from .use_flags import USEFlagChecks @@ -43,55 +42,6 @@ metadata_xml_declaration = '<?xml version="1.0" encoding="%s"?>' \ metadata_doctype_name = 'pkgmetadata' -def parse_metadata_use(xml_tree): - """ - Records are wrapped in XML as per GLEP 56 - returns a dict with keys constisting of USE flag names and values - containing their respective descriptions - """ - uselist = {} - - usetags = xml_tree.findall("use") - if not usetags: - return uselist - - # It's possible to have multiple 'use' elements. - for usetag in usetags: - flags = usetag.findall("flag") - if not flags: - # DTD allows use elements containing no flag elements. - continue - - for flag in flags: - pkg_flag = flag.get("name") - if pkg_flag is None: - raise exception.ParseError("missing 'name' attribute for 'flag' tag") - flag_restrict = flag.get("restrict") - - # emulate the Element.itertext() method from python-2.7 - inner_text = [] - stack = [] - stack.append(flag) - while stack: - obj = stack.pop() - if isinstance(obj, basestring): - inner_text.append(obj) - continue - if isinstance(obj.text, basestring): - inner_text.append(obj.text) - if isinstance(obj.tail, basestring): - stack.append(obj.tail) - stack.extend(reversed(obj)) - - if pkg_flag not in uselist: - uselist[pkg_flag] = {} - - # (flag_restrict can be None) - uselist[pkg_flag][flag_restrict] = " ".join("".join(inner_text).split()) - - return uselist - - class PkgMetadata(ScanBase, USEFlagChecks): '''Package metadata.xml checks''' @@ -180,28 +130,23 @@ class PkgMetadata(ScanBase, USEFlagChecks): (xpkg, metadata_doctype_name, doctype_name)) # load USE flags from metadata.xml - try: - self.musedict = parse_metadata_use(_metadata_xml) - except portage.exception.ParseError as e: - metadata_bad = True - self.qatracker.add_error( - "metadata.bad", "%s/metadata.xml: %s" % (xpkg, e)) - else: - for atom in chain(*self.musedict.values()): - if atom is None: - continue - try: - atom = Atom(atom) - except InvalidAtom as e: + self.musedict, metadata_bad = self._parse_metadata_use( + _metadata_xml, xpkg, metadata_bad) + for atom in chain(*self.musedict.values()): + if atom is None: + continue + try: + atom = Atom(atom) + except InvalidAtom as e: + self.qatracker.add_error( + "metadata.bad", + "%s/metadata.xml: Invalid atom: %s" % (xpkg, e)) + else: + if atom.cp != xpkg: self.qatracker.add_error( "metadata.bad", - "%s/metadata.xml: Invalid atom: %s" % (xpkg, e)) - else: - if atom.cp != xpkg: - self.qatracker.add_error( - "metadata.bad", - "%s/metadata.xml: Atom contains " - "unexpected cat/pn: %s" % (xpkg, atom)) + "%s/metadata.xml: Atom contains " + "unexpected cat/pn: %s" % (xpkg, atom)) # Only carry out if in package directory or check forced if not metadata_bad: @@ -237,6 +182,59 @@ class PkgMetadata(ScanBase, USEFlagChecks): % (xpkg, myflag)) return False + def _parse_metadata_use(self, xml_tree, xpkg, metadata_bad): + """ + Records are wrapped in XML as per GLEP 56 + returns a dict with keys constisting of USE flag names and values + containing their respective descriptions + """ + uselist = {} + + usetags = xml_tree.findall("use") + if not usetags: + return uselist, metadata_bad + + # It's possible to have multiple 'use' elements. + for usetag in usetags: + flags = usetag.findall("flag") + if not flags: + # DTD allows use elements containing no flag elements. + continue + + for flag in flags: + pkg_flag = flag.get("name") + if pkg_flag is None: + metadata_bad = True + self.qatracker.add_error( + "metadata.bad", + "%s/metadata.xml: line: %s, '%s', missing attribute: name" + % (xpkg, flag.sourceline, flag.text)) + continue + flag_restrict = flag.get("restrict") + + # emulate the Element.itertext() method from python-2.7 + inner_text = [] + stack = [] + stack.append(flag) + while stack: + obj = stack.pop() + if isinstance(obj, basestring): + inner_text.append(obj) + continue + if isinstance(obj.text, basestring): + inner_text.append(obj.text) + if isinstance(obj.tail, basestring): + stack.append(obj.tail) + stack.extend(reversed(obj)) + + if pkg_flag not in uselist: + uselist[pkg_flag] = {} + + # (flag_restrict can be None) + uselist[pkg_flag][flag_restrict] = " ".join("".join(inner_text).split()) + + return uselist, metadata_bad + @property def runInPkgs(self): '''Package level scans'''
WARNING: multiple messages have this Message-ID (diff)
From: "Brian Dolbec" <dolsen@gentoo.org> To: gentoo-commits@lists.gentoo.org Subject: [gentoo-commits] proj/portage:master commit in: pym/repoman/modules/scan/metadata/ Date: Sun, 15 May 2016 23:51:12 +0000 (UTC) [thread overview] Message-ID: <1463250580.57d1ef7f8f98275b066735c66d0da05ea103a9da.dolsen@gentoo> (raw) Message-ID: <20160515235112.g0Ln2Lsder7K0NoAGvN6B7t09K7ey1YFr7MSsZ6m86M@z> (raw) commit: 57d1ef7f8f98275b066735c66d0da05ea103a9da Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> AuthorDate: Tue May 3 18:46:22 2016 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Sat May 14 18:29:40 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=57d1ef7f repoman/modules/.../pkgmetadata.py: Move parse_metadata_use into the PkgMetadata class This allows for a complete Q/A processing of all the use flags defined in the xml. pym/repoman/modules/scan/metadata/pkgmetadata.py | 138 +++++++++++------------ 1 file changed, 68 insertions(+), 70 deletions(-) diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py b/pym/repoman/modules/scan/metadata/pkgmetadata.py index 1594b27..7117e7d 100644 --- a/pym/repoman/modules/scan/metadata/pkgmetadata.py +++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py @@ -28,7 +28,6 @@ from repoman.modules.scan.scanbase import ScanBase from portage.exception import InvalidAtom from portage import os -from portage import exception from portage.dep import Atom from .use_flags import USEFlagChecks @@ -43,55 +42,6 @@ metadata_xml_declaration = '<?xml version="1.0" encoding="%s"?>' \ metadata_doctype_name = 'pkgmetadata' -def parse_metadata_use(xml_tree): - """ - Records are wrapped in XML as per GLEP 56 - returns a dict with keys constisting of USE flag names and values - containing their respective descriptions - """ - uselist = {} - - usetags = xml_tree.findall("use") - if not usetags: - return uselist - - # It's possible to have multiple 'use' elements. - for usetag in usetags: - flags = usetag.findall("flag") - if not flags: - # DTD allows use elements containing no flag elements. - continue - - for flag in flags: - pkg_flag = flag.get("name") - if pkg_flag is None: - raise exception.ParseError("missing 'name' attribute for 'flag' tag") - flag_restrict = flag.get("restrict") - - # emulate the Element.itertext() method from python-2.7 - inner_text = [] - stack = [] - stack.append(flag) - while stack: - obj = stack.pop() - if isinstance(obj, basestring): - inner_text.append(obj) - continue - if isinstance(obj.text, basestring): - inner_text.append(obj.text) - if isinstance(obj.tail, basestring): - stack.append(obj.tail) - stack.extend(reversed(obj)) - - if pkg_flag not in uselist: - uselist[pkg_flag] = {} - - # (flag_restrict can be None) - uselist[pkg_flag][flag_restrict] = " ".join("".join(inner_text).split()) - - return uselist - - class PkgMetadata(ScanBase, USEFlagChecks): '''Package metadata.xml checks''' @@ -180,28 +130,23 @@ class PkgMetadata(ScanBase, USEFlagChecks): (xpkg, metadata_doctype_name, doctype_name)) # load USE flags from metadata.xml - try: - self.musedict = parse_metadata_use(_metadata_xml) - except portage.exception.ParseError as e: - metadata_bad = True - self.qatracker.add_error( - "metadata.bad", "%s/metadata.xml: %s" % (xpkg, e)) - else: - for atom in chain(*self.musedict.values()): - if atom is None: - continue - try: - atom = Atom(atom) - except InvalidAtom as e: + self.musedict, metadata_bad = self._parse_metadata_use( + _metadata_xml, xpkg, metadata_bad) + for atom in chain(*self.musedict.values()): + if atom is None: + continue + try: + atom = Atom(atom) + except InvalidAtom as e: + self.qatracker.add_error( + "metadata.bad", + "%s/metadata.xml: Invalid atom: %s" % (xpkg, e)) + else: + if atom.cp != xpkg: self.qatracker.add_error( "metadata.bad", - "%s/metadata.xml: Invalid atom: %s" % (xpkg, e)) - else: - if atom.cp != xpkg: - self.qatracker.add_error( - "metadata.bad", - "%s/metadata.xml: Atom contains " - "unexpected cat/pn: %s" % (xpkg, atom)) + "%s/metadata.xml: Atom contains " + "unexpected cat/pn: %s" % (xpkg, atom)) # Only carry out if in package directory or check forced if not metadata_bad: @@ -237,6 +182,59 @@ class PkgMetadata(ScanBase, USEFlagChecks): % (xpkg, myflag)) return False + def _parse_metadata_use(self, xml_tree, xpkg, metadata_bad): + """ + Records are wrapped in XML as per GLEP 56 + returns a dict with keys constisting of USE flag names and values + containing their respective descriptions + """ + uselist = {} + + usetags = xml_tree.findall("use") + if not usetags: + return uselist, metadata_bad + + # It's possible to have multiple 'use' elements. + for usetag in usetags: + flags = usetag.findall("flag") + if not flags: + # DTD allows use elements containing no flag elements. + continue + + for flag in flags: + pkg_flag = flag.get("name") + if pkg_flag is None: + metadata_bad = True + self.qatracker.add_error( + "metadata.bad", + "%s/metadata.xml: line: %s, '%s', missing attribute: name" + % (xpkg, flag.sourceline, flag.text)) + continue + flag_restrict = flag.get("restrict") + + # emulate the Element.itertext() method from python-2.7 + inner_text = [] + stack = [] + stack.append(flag) + while stack: + obj = stack.pop() + if isinstance(obj, basestring): + inner_text.append(obj) + continue + if isinstance(obj.text, basestring): + inner_text.append(obj.text) + if isinstance(obj.tail, basestring): + stack.append(obj.tail) + stack.extend(reversed(obj)) + + if pkg_flag not in uselist: + uselist[pkg_flag] = {} + + # (flag_restrict can be None) + uselist[pkg_flag][flag_restrict] = " ".join("".join(inner_text).split()) + + return uselist, metadata_bad + @property def runInPkgs(self): '''Package level scans'''
next reply other threads:[~2016-05-14 18:34 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-05-14 18:33 Brian Dolbec [this message] 2016-05-15 23:51 ` [gentoo-commits] proj/portage:master commit in: pym/repoman/modules/scan/metadata/ Brian Dolbec -- strict thread matches above, loose matches on Subject: below -- 2016-05-14 18:33 [gentoo-commits] proj/portage:repoman " Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-05 16:06 Brian Dolbec 2016-05-05 16:02 Brian Dolbec 2016-05-04 6:24 Brian Dolbec 2016-05-04 6:09 Brian Dolbec 2016-05-04 3:45 Brian Dolbec 2016-05-03 20:58 Brian Dolbec 2016-05-03 20:58 Brian Dolbec 2016-05-03 17:43 Brian Dolbec 2016-05-03 17:43 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-04-25 15:32 Brian Dolbec 2016-04-21 16:54 Brian Dolbec 2016-03-15 19:00 Brian Dolbec 2016-01-06 4:21 Brian Dolbec
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1463250580.57d1ef7f8f98275b066735c66d0da05ea103a9da.dolsen@gentoo \ --to=dolsen@gentoo.org \ --cc=gentoo-commits@lists.gentoo.org \ --cc=gentoo-dev@lists.gentoo.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox