setuptools-plugins-intro/0000755000175000017500000000000011227621652016343 5ustar ygingrasygingrassetuptools-plugins-intro/README.txt0000644000175000017500000000037311227621652020044 0ustar ygingrasygingras These are the files used during the Introduction to Setuptools Entry-points Plugins flash presentation given by Yannick Gingras at Montréal Python 8 on 2009-07-08. If you have any questions, feel free to contact the author: ygingras@ygingras.net . setuptools-plugins-intro/confiard/0000755000175000017500000000000011227622123020122 5ustar ygingrasygingrassetuptools-plugins-intro/confiard/confiard/0000755000175000017500000000000011227622004021705 5ustar ygingrasygingrassetuptools-plugins-intro/confiard/confiard/confiard.py0000644000175000017500000000241511227621216024052 0ustar ygingrasygingras """ Parse a configuration file and pre-process the values. """ import sys from optparse import OptionParser from ConfigParser import RawConfigParser from paste.deploy.converters import asbool, asint, aslist from .plugins import find_processors _processors = {} def _register(f, key): _processors[key] = f _register(asbool, "some_bool") _register(asint, "some_int") _register(aslist, "some_list") def pre_processor(key): """ Decocator to register a function as a preprocessor """ def register(f): _register(f, key) return f return register @pre_processor("first_name") @pre_processor("last_name") def capitalize(val): return val.capitalize() def expand_conffile(path): parser = RawConfigParser() parser.read(path) for sect in parser.sections(): for k, v in parser.items(sect): if k in _processors: parser.set(sect, k, _processors[k](v)) parser.write(sys.stdout) def main(): parser = OptionParser(usage="%prog [OPTIONS] CONF_FILE", description=__doc__) opts, args = parser.parse_args() if not args: parser.error("Missing Argument: CONF_FILE") find_processors(_processors) expand_conffile(args[0]) if __name__ == "__main__": main() setuptools-plugins-intro/confiard/confiard/__init__.py0000644000175000017500000000000011227621216024010 0ustar ygingrasygingrassetuptools-plugins-intro/confiard/confiard/plugins.py0000644000175000017500000000031711227621216023745 0ustar ygingrasygingras import pkg_resources def find_processors(registry): for entrypoint in pkg_resources.iter_entry_points("confiard.processor"): funct = entrypoint.load() registry[entrypoint.name] = funct setuptools-plugins-intro/confiard/confiard/utils.py0000644000175000017500000000012011227621216023414 0ustar ygingrasygingras def lower(val): return val.lower() def upper(val): return val.upper() setuptools-plugins-intro/confiard/setup.py0000755000175000017500000000106611227621216021644 0ustar ygingrasygingras from setuptools import setup, find_packages setup( name='confiard', version="0.1", description="a very simple config file pre-processor", author="Yannick Gingras", author_email="ygingras@ygingras.net", license='GPL v3 or later', install_requires=[], packages=find_packages(), include_package_data=True, entry_points={ 'console_scripts': ["confiard = confiard.confiard:main"], 'confiard.processor': ["quux = confiard.confiard:capitalize", "qux = confiard.confiard:asint"], }, ) setuptools-plugins-intro/confiard/.hgignore0000644000175000017500000000002511227621216021724 0ustar ygingrasygingras syntaxe: glob build setuptools-plugins-intro/confiard_plugins/0000755000175000017500000000000011227622123021663 5ustar ygingrasygingrassetuptools-plugins-intro/confiard_plugins/confiard_plugins/0000755000175000017500000000000011227622004025207 5ustar ygingrasygingrassetuptools-plugins-intro/confiard_plugins/confiard_plugins/general.py0000644000175000017500000000032411227621401027175 0ustar ygingrasygingras import re def phone_number(val): match = re.findall("\(?(\d{3})\)?-?\s*(\d{3})-?(\d{4})", val) if not match: raise ValueError("Invalid phone number: %s" % val) return "%s-%s-%s" % match[0] setuptools-plugins-intro/confiard_plugins/confiard_plugins/__init__.py0000644000175000017500000000000011227621401027306 0ustar ygingrasygingrassetuptools-plugins-intro/confiard_plugins/setup.py0000755000175000017500000000067711227621401023410 0ustar ygingrasygingras from setuptools import setup, find_packages setup( name='confiard_plugins', version="0.1", description="extra processors for Confirard", author="Yannick Gingras", author_email="ygingras@ygingras.net", license='GPL v3 or later', install_requires=[], packages=find_packages(), include_package_data=True, entry_points={ 'confiard.processor': ["phone = confiard_plugins.general:phone_number"], }, ) setuptools-plugins-intro/confiard_plugins/.hgignore0000644000175000017500000000002511227621401023461 0ustar ygingrasygingras syntaxe: glob build setuptools-plugins-intro/demo.ini0000644000175000017500000000033311227621205017761 0ustar ygingrasygingras [some_section] foo = 1 bar = 2 qux = 42 quux = no some_bool = no first_name = bob last_name = binette [home] phone = 5141234567 [work] phone = (450) 987-1234 [cell] phony = don't know [cell2] phone = 438-345-2344