Code change comments:

General: The usage of SystemExit throughout seems inappropriate. 
Functions which have no context of program execution shouldn't be 
raising these - they should be raising appropriate ValueErrors, 
TypeErrors, KeyErrors, etc. Callers into those functions (or callers of 
those callers) should be wrapping appropriate try/except blocks (or not 
wrapping, if they're not equipped to handle it, in which case the caller 
of the caller should be prepared to handle it, and so on). As a general 
rule, we should be raising and catching sub-classes of Exception or 
StandardError, not BaseException (see 
http://docs.python.org/library/exceptions.html#exception-hierarchy)

It seems the use of SystemExit throughout was intended to avoid printing 
the stacktrace. If that's true, then a better behavior would be to 
perhaps have something in the main function that catches all Exceptions 
and prints an appropriate one-liner - especially given that we're doing 
this throughout the code anyway, frequently catching raised exceptions 
just to raise a SystemExit (which hides some data that could be useful 
for debugging). We can then print traceback data directly to the log if 
desired.

This probably deserves a separate bug.

245-246: long() won't accept 'decimal' values, only integers, so this 
should state that it's not a valid integer.

PEP-8 comments (publish-manifest)

General: Is it feasible to rename these functions to camel case, or 
would that be too far reaching / out of scope? Same question for 
variable names within functions (local variables, at least, should be 
less disruptive)

119: findAIfromCriteria() doesn't ever return anything, meaning it 
implicitly returns None. This "if" block will never get executed.

200-210: This block is pretty difficult to read, and seems to cover 2 
different error conditions - splitting it up would make it more legible 
and provide more concise indications of what caused the error.

236,239: For clarity, can we wrap ('MIN' + crit) and ('MAX' + crit) in 
parentheses?

305: Splitting on the '.' is ugly and hard to read. This block of code 
also seems to repeatedly use crit.replace() - can we streamline this a 
bit? This would be identical and much cleaner:

crit_key = crit.replace('MIN', '', 1).replace('MAX', '', 1)
manCriteria = files.getCriteria(crit_key)
if crit.startswith('MIN'):
    manCriteria = manCriteria[0]
elif crit.startswith('MAX'):
    manCriteria = manCriteria[1]

306: Should be "is None" (unless you use my suggestion above, which 
eliminates the need for this check)

329: Wrap this in parentheses and remove the \

446: Should be "is not None"

468: As long as we're changing this, can't we just use 
oldManifest.read(), which returns the full text, instead of using 
readlines and then joining them?

482: Trailing \ no longer needed

542: if source == "AI":

545: Should probably be "if self._criteriaRoot is None:"
542-548 could be converged to:
if self._criteriaRoot is None or source == "AI":
    root = self._AIRoot.findall(".//ai_criteria")
else:
    root = self._criteriaRoot.findall(".//ai_criteria")


549: This should be "if root:" (actually, this 'if' statement seems 
entirely unnecessary)

537-565: Sidenote - this is really strange syntax. If this is a 
generator, it should raise GeneratorExit, and not have a return. If it's 
not a generator, is there a reason it's yielding?

572: Should probably be: "if self._criteriaRoot is None:"

615: "is not None"
624: "is None"
633: "is None"

642: "if SCman.attrib['name'] in self._smfDict:" (call to keys() is 
unneeded)

662: Splitting this up into multiple lines would improve readability:
xmlData = lxml.etree.tostring(SCman.getchildren()[0])
xmlData = xmlData.replace("<!-- ", "").replace(" -->", "")
xmlData = StringIO.StringIO(xmlData)

672: Should probably be: "if self._criteriaRoot is None:"
* We use this check often enough that it seems we should have a property 
called 'source' or 'root' or something that returns either _criteriaRoot 
or _AIRoot dynamically.

707: "is None"
732: "is not None"
747: "is not None"
756: "is None"

Clay Baenziger wrote:
> Hi all,
>     If anyone has a few moments to review some PEP8 changes and a 20 
> line bug fix, I'd love to push some code before folks start pushing 
> for our Python 2.6 blitz. I've fixed the following UI bugs in 
> publish-manifest and a typo in the default A/I manifest:
>
>  4318 - publish-manifest needs to error about no criteria in non-default
>     manifests
>  4326 - Ugly error if wrong data provided in criteria manifest
> 11984 - Typo in suggestion in AI's default.xml manifest
>
> To show how differential webrevs can work for PEP8 changes see the 
> break out of webrevs below:
>
> Full Webrev (big):
> http://cr.opensolaris.org/~clayb/publish_manifest
>
> PEP8 Changes:
> http://cr.opensolaris.org/~clayb/publish_manifest/pep8
>
> Bug Fixes (only 21 lines!):
> http://cr.opensolaris.org/~clayb/publish_manifest/diff
>
> Bugs:
> publish-manifest needs to error about no criteria in non-default 
> manifests:
>     http://defect.opensolaris.org/bz/show_bug.cgi?id=4318
>
> Ugly error if wrong data provided in criteria manifest
>     http://defect.opensolaris.org/bz/show_bug.cgi?id=4326
>
> Typo in suggestion in AI's default.xml manifest
>     http://defect.opensolaris.org/bz/show_bug.cgi?id=11984
>
>
> _______________________________________________
> caiman-discuss mailing list
> caiman-discuss at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/caiman-discuss

Reply via email to