Source code for xdress.extratypes

"""The extra types plugin for XDress.

This module is available as an xdress plugin by the name ``xdress.extratypes``.

:author: Anthony Scopatz <scopatz@gmail.com>

Extra Types Plugin API
======================
"""
from __future__ import print_function
import os
import io
import sys

from .utils import RunControl, NotSpecified, newoverwrite
from .plugins import Plugin

if sys.version_info[0] >= 3:
    basestring = str

[docs]class XDressPlugin(Plugin): """This class provides extra type functionality for xdress.""" requires = ('xdress.base',) defaultrc = RunControl( extra_types='xdress_extra_types', make_extra_types=True, ) rcdocs = { "extra_types": "Module and header file name for xdress extra types.", "make_extra_types": "Flag to enable / disable making the extra types module", } def update_argparser(self, parser): parser.add_argument('--extra-types', action='store', dest='extra_types', help=self.rcdocs["extra_types"]) parser.add_argument('--make-extra-types', action='store_true', dest='make_extra_types', help="make extra types wrapper") parser.add_argument('--no-make-extra-types', action='store_false', dest='make_extra_types', help="don't make extra types wrapper") def setup(self, rc): rc.ts.extra_types = rc.extra_types def execute(self, rc): if not rc.make_extra_types: return print("extratypes: generating extra type header & source files for xdress") d = os.path.split(__file__)[0] srcs = [os.path.join(d, 'xdress_extra_types.h'), os.path.join(d, 'xdress_extra_types.pxd'), os.path.join(d, 'xdress_extra_types.pyx')] tars = [os.path.join(rc.packagedir, rc.extra_types + '.h'), os.path.join(rc.packagedir, rc.extra_types + '.pxd'), os.path.join(rc.packagedir, rc.extra_types + '.pyx')] for src, tar in zip(srcs, tars): with io.open(src, 'r') as f: s = f.read() s = s.format(extra_types=rc.extra_types) newoverwrite(s, tar, rc.verbose)