OLD | NEW |
(Empty) | |
| 1 """ |
| 2 Extensions |
| 3 ----------------------------------------------------------------------------- |
| 4 """ |
| 5 |
| 6 from __future__ import unicode_literals |
| 7 from ..util import parseBoolValue |
| 8 import warnings |
| 9 |
| 10 |
| 11 class Extension(object): |
| 12 """ Base class for extensions to subclass. """ |
| 13 |
| 14 # Default config -- to be overriden by a subclass |
| 15 # Must be of the following format: |
| 16 # { |
| 17 # 'key': ['value', 'description'] |
| 18 # } |
| 19 # Note that Extension.setConfig will raise a KeyError |
| 20 # if a default is not set here. |
| 21 config = {} |
| 22 |
| 23 def __init__(self, *args, **kwargs): |
| 24 """ Initiate Extension and set up configs. """ |
| 25 |
| 26 # check for configs arg for backward compat. |
| 27 # (there only ever used to be one so we use arg[0]) |
| 28 if len(args): |
| 29 if args[0] is not None: |
| 30 self.setConfigs(args[0]) |
| 31 warnings.warn('Extension classes accepting positional args is ' |
| 32 'pending Deprecation. Each setting should be ' |
| 33 'passed into the Class as a keyword. Positional ' |
| 34 'args are deprecated and will raise ' |
| 35 'an error in version 2.7. See the Release Notes for ' |
| 36 'Python-Markdown version 2.6 for more info.', |
| 37 DeprecationWarning) |
| 38 # check for configs kwarg for backward compat. |
| 39 if 'configs' in kwargs.keys(): |
| 40 if kwargs['configs'] is not None: |
| 41 self.setConfigs(kwargs.pop('configs', {})) |
| 42 warnings.warn('Extension classes accepting a dict on the single ' |
| 43 'keyword "config" is pending Deprecation. Each ' |
| 44 'setting should be passed into the Class as a ' |
| 45 'keyword directly. The "config" keyword is ' |
| 46 'deprecated and raise an error in ' |
| 47 'version 2.7. See the Release Notes for ' |
| 48 'Python-Markdown version 2.6 for more info.', |
| 49 DeprecationWarning) |
| 50 # finally, use kwargs |
| 51 self.setConfigs(kwargs) |
| 52 |
| 53 def getConfig(self, key, default=''): |
| 54 """ Return a setting for the given key or an empty string. """ |
| 55 if key in self.config: |
| 56 return self.config[key][0] |
| 57 else: |
| 58 return default |
| 59 |
| 60 def getConfigs(self): |
| 61 """ Return all configs settings as a dict. """ |
| 62 return dict([(key, self.getConfig(key)) for key in self.config.keys()]) |
| 63 |
| 64 def getConfigInfo(self): |
| 65 """ Return all config descriptions as a list of tuples. """ |
| 66 return [(key, self.config[key][1]) for key in self.config.keys()] |
| 67 |
| 68 def setConfig(self, key, value): |
| 69 """ Set a config setting for `key` with the given `value`. """ |
| 70 if isinstance(self.config[key][0], bool): |
| 71 value = parseBoolValue(value) |
| 72 if self.config[key][0] is None: |
| 73 value = parseBoolValue(value, preserve_none=True) |
| 74 self.config[key][0] = value |
| 75 |
| 76 def setConfigs(self, items): |
| 77 """ Set multiple config settings given a dict or list of tuples. """ |
| 78 if hasattr(items, 'items'): |
| 79 # it's a dict |
| 80 items = items.items() |
| 81 for key, value in items: |
| 82 self.setConfig(key, value) |
| 83 |
| 84 def extendMarkdown(self, md, md_globals): |
| 85 """ |
| 86 Add the various proccesors and patterns to the Markdown Instance. |
| 87 |
| 88 This method must be overriden by every extension. |
| 89 |
| 90 Keyword arguments: |
| 91 |
| 92 * md: The Markdown instance. |
| 93 |
| 94 * md_globals: Global variables in the markdown module namespace. |
| 95 |
| 96 """ |
| 97 raise NotImplementedError( |
| 98 'Extension "%s.%s" must define an "extendMarkdown"' |
| 99 'method.' % (self.__class__.__module__, self.__class__.__name__) |
| 100 ) |
OLD | NEW |