xcookie.directive module¶
Port and extension of xdoctest directives.
- class xcookie.directive.Effect(action, key, value)¶
Bases:
tuple
Create new instance of Effect(action, key, value)
- _asdict()¶
Return a new dict which maps field names to their values.
- _field_defaults = {}¶
- _fields = ('action', 'key', 'value')¶
- classmethod _make(iterable)¶
Make a new Effect object from a sequence or iterable
- _replace(**kwds)¶
Return a new Effect object replacing specified fields with new values
- action¶
Alias for field number 0
- key¶
Alias for field number 1
- value¶
Alias for field number 2
- xcookie.directive.extract_directive_comment(source)[source]¶
Different than the xdoctest version. Finds the last comment part of a line
source = ‘# acommend # b comment’ list(extract_directive_comment(source))
# TODO: lark grammar?
- class xcookie.directive.Directive(name, positive=True, args=[], inline=None)[source]¶
Bases:
NiceRepr
Directives modify the runtime state.
- classmethod extract(text, directive_re, commands)[source]¶
Parses directives from a line or repl line
- Parameters:
text (str) – must correspond to exactly one PS1 line and its PS2 followups.
prefix (str | None) – The directive “namespace”. If None, this uses the xdoctest defaults of
DIRECTIVE_RE
. This will always be the case for xdoctest, but we are extending this class for use elsewhere.
- Yields:
Directive – directive: the parsed directives
- effects(argv=None, environ=None)[source]¶
Returns how this directive modifies a RuntimeState object
This is called by
RuntimeState.update()
to update itself- Parameters:
argv (List[str], default=None) – if specified, overwrite sys.argv
environ (Dict[str, str], default=None) – if specified, overwrite os.environ
- Returns:
- list of named tuples containing:
action (str): code indicating how to update key (str): name of runtime state item to modify value (object): value to modify with
- Return type:
List[Effect]
- xcookie.directive._split_opstr(optstr)[source]¶
Simplified balanced paren logic to only split commas outside of parens
Example
>>> optstr = '+FOO, REQUIRES(foo,bar), +ELLIPSIS' >>> _split_opstr(optstr) ['+FOO', 'REQUIRES(foo,bar)', '+ELLIPSIS']
- xcookie.directive._is_requires_satisfied(arg, argv=None, environ=None)[source]¶
Determines if the argument to a REQUIRES directive is satisfied
- Parameters:
arg (str) – condition code
argv (List[str]) – cmdline if arg is cmd code usually
sys.argv
environ (Dict[str, str]) – environment variables usually
os.environ
- Returns:
flag - True if the requirement is met
- Return type:
- class xcookie.directive.DirectiveExtractor(namespace, commands)[source]¶
Bases:
object
Example
>>> from xcookie.directive import * # NOQA >>> namespace = 'xcookie' >>> commands = ['UNCOMMENT_IF', 'COMMENT_IF'] >>> self = DirectiveExtractor(namespace, commands) >>> text = '- this line is not python # xcookie: +COMMENT_IF(cv2)' >>> text = '# commented line # xcookie: +UNCOMMENT_IF(cv2)' >>> extracted = self.extract(text) >>> assert len(extracted) == 1 >>> directive = extracted[0]
- xcookie.directive.parse_directive_optstr(optpart, commands, inline=None)[source]¶
Parses the information in the directive from the “optpart”
- optstrs are:
optionally prefixed with
+
(default) or-
comma separated may contain one paren enclosed argument (experimental) all spaces are ignored
- Returns:
the parsed directive
- Return type: