Sovittelin tässä yhdessä välissä pyblosxomia toimimaan apache/1.3
mod_python:n alla. Valmiiksi apache/2.0:n alla toimiva skriptiä piti vähän
puukottaa että se toimisi vanhemmalla versiolla, mutta nyt se näytti ihan
oikeastikin toimivan.
Käänsin sitten pari pluginia perl:stä pythonille ja tutustuin paremmin
pyblosxomin arkkitehtuuriin. Vaikka se onkin blosxomin johdannainen,
yhteyksiä ei ole ehkä niin paljon kuin voisi olla.
Koska en tunne pyblosxomin rakennetta kovin hyvin (ja dokkarit näyttävät
kuvaavan vain 'toivetilaa'), tein tällaisen pbinfo -skriptin. Sitä pystyy
kutsumaan käytännössä vain pbifancy:n (interpolate_fancy -käännökseni
pyblosxomille) kautta ja silloin annettaessa parametrina minkä tahansa
objektin, se tulostaa sen sisäisen rakenteen HTML:nä. Tämä helpottaa
tiettyjen tietojen esiinkaivamista ja siten hyödyntämistä.
Esim:
In [1]:import pbinfo
In [2]:print pbinfo.showinfo(pbinfo, None, None)
- module pbinfo (pbinfo.py):
pbinfo
- string __file__: pbinfo.py
- string __name__: pbinfo
- function build_list (docstring, hasattr, args, __doc__, str, replace, modulecont, name, type, dict, join, map, items, types, ModuleType, _shown, has_key, __file__, __name__, FunctionType, MethodType, func_code, co_names, ClassType, InstanceType) Helper/worker function to build recursively description string about given parameter
- function showinfo (_shown, unicode, build_list, args, replace) Show information about object in first parameter
Extra parameters to be 'cleanly' callable by pbifancy pyblosxom plugin.
- module types (/usr/lib/python2.3/types.pyc): Define names for all type symbols known in the standard interpreter.
Types that are part of optional modules (e.g. array) are not listed.
- type 'type' BooleanType, type 'bool'
- type 'type' BufferType, type 'buffer'
- type 'type' BuiltinFunctionType, type 'builtin_function_or_method'
- type 'type' BuiltinMethodType, type 'builtin_function_or_method'
- type 'type' ClassType, type 'classobj'
- type 'type' CodeType, type 'code'
- type 'type' ComplexType, type 'complex'
- type 'type' DictProxyType, type 'dictproxy'
- type 'type' DictType, type 'dict'
- type 'type' DictionaryType, type 'dict'
- type 'type' EllipsisType, type 'ellipsis'
- type 'type' FileType, type 'file'
- type 'type' FloatType, type 'float'
- type 'type' FrameType, type 'frame'
- type 'type' FunctionType, type 'function'
- type 'type' GeneratorType, type 'generator'
- type 'type' InstanceType, type 'instance'
- type 'type' IntType, type 'int'
- type 'type' LambdaType, type 'function'
- type 'type' ListType, type 'list'
- type 'type' LongType, type 'long'
- type 'type' MethodType, type 'instancemethod'
- type 'type' ModuleType, type 'module'
- type 'type' NoneType, type 'NoneType'
- type 'type' NotImplementedType, type 'NotImplementedType'
- type 'type' ObjectType, type 'object'
- type 'type' SliceType, type 'slice'
- type 'type' StringType, type 'str'
- type 'tuple' StringTypes, (type 'str', type 'unicode')
- type 'type' TracebackType, type 'traceback'
- type 'type' TupleType, type 'tuple'
- type 'type' TypeType, type 'type'
- type 'type' UnboundMethodType, type 'instancemethod'
- type 'type' UnicodeType, type 'unicode'
- type 'type' XRangeType, type 'xrange'
- string __file__: /usr/lib/python2.3/types.pyc
- string __name__: types
Objekti joka sille annetaan on tosiaankin melko lailla mitä tahansa,
olio, instanssi oliosta, funktio, dict, stringi, numero. ipythonilla kun
tarpeeksi leikkii niin oppii pythonin ulkoisesta rakenteesta paljon.
En olisi uskonut että itse 'hurahdan' johonkin kieleen, mutta pythonin
kanssa se on tällaista. Oikeastaan innostuttaa 'päästä irjoittamaan' sillä
jotain.
Itse koodista ei kannata niin hirveästi välittää, se korkeintaan
osoittaa että vaikka olisi kuinka hyvä syntaksi, aina löytyy joku joka
käyttää sitä rumalla tavalla. Voisin melkein sanoa että funktionaalisuuden ja
imperatiivisuuden sekoitus pythonissa on sen ainoa kauneusvirhe, niitä on
niin helppo käyttää - kuten juurikin tein - rumasti.