Martin Drautzburg wrote: > I would like to validate sql strings, which are spread all over the > code, .... The statements will not be assembled from smaller pieces, > but they will not neccessarily be defined at module level. I could > live with class level, .... > parse the source file, but I am willing to mark the strings so it is > easier to tell sql from non-sql. > > ... Or is there a completely different way to do such a thing?
How about using some variation of: class _Dummy: pass OLD_STYLE = type(_Dummy) def generate_strings(module): '''Generate <class> <name> <value> triples for a module''' for top_level_name in dir(module): top_level_value = getattr(module, top_level_name) if isinstance(top_level_value, basestring): # strings yield None, top_level_name, top_level_value elif isinstance(top_level_value, type): # new-style class for name in dir(top_level_value): value = getattr(top_level_value, name) if isinstance(value, basestring): yield top_level_name, name, value def sometest(somestring): '''Your criteria for "is an SQL string and has misspellings".''' return len(somestring) > 20 and ' def investigate(module): for modname in sys.argv[1:]: for class_, name, text in generate_strings( __import__(modname)): if remarkable(text): if class_ is None: print 'Look at %s's top-level string %s.' % ( modname, name) else: print "Look at %s, class %s, string %s.' % modname, class_, name) if __name__ == '__main__': import sys for modname in sys.argv[1: ]: investigate(modname, sometest) -- --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list