예제 #1
0
def customize_base_cfg(
    cfgname,
    cfgopt_strs,
    base_cfg,
    cfgtype,
    alias_keys=None,
    valid_keys=None,
    offset=0,
    strict=True,
):
    """
    DEPRICATE
    """
    import re

    cfg = base_cfg.copy()
    # Parse dict out of a string
    # ANYTHING_NOT_BRACE = r'[^\[\]]*\]'
    ANYTHING_NOT_PAREN_OR_BRACE = r'[^()\[\]]*[\]\)]'
    cfgstr_options_list = re.split(
        r',\s*' + ut.negative_lookahead(ANYTHING_NOT_PAREN_OR_BRACE), cfgopt_strs
    )
    # cfgstr_options_list = cfgopt_strs.split(',')
    cfg_options = ut.parse_cfgstr_list(
        cfgstr_list=cfgstr_options_list, smartcast=True, oldmode=False
    )
    # Hack for q/d-prefix specific configs
    remove_prefix_hack(cfg, cfgtype, cfg_options, alias_keys)
    # Remap keynames based on aliases
    if alias_keys is not None:
        # Use new standard keys and remove old aliased keys
        for key in set(alias_keys.keys()):
            if key in cfg_options:
                cfg_options[alias_keys[key]] = cfg_options[key]
                del cfg_options[key]
    # Ensure that nothing bad is being updated
    if strict:
        parsed_keys = cfg_options.keys()
        if valid_keys is not None:
            ut.assert_all_in(parsed_keys, valid_keys, 'keys specified not in valid set')
        else:
            ut.assert_all_in(
                parsed_keys, cfg.keys(), 'keys specified not in default options'
            )
    # Finalize configuration dict
    cfg.update(cfg_options)
    cfg['_cfgtype'] = cfgtype
    cfg['_cfgname'] = cfgname
    cfg_combo = ut.all_dict_combinations(cfg)
    # if len(cfg_combo) > 1:
    for combox, cfg_ in enumerate(cfg_combo, start=offset):
        # cfg_['_cfgname'] += ';' + str(combox)
        cfg_['_cfgindex'] = combox
    for cfg_ in cfg_combo:
        if len(cfgopt_strs) > 0:
            cfg_['_cfgstr'] = cfg_['_cfgname'] + ut.NAMEVARSEP + cfgopt_strs
        else:
            cfg_['_cfgstr'] = cfg_['_cfgname']
    return cfg_combo
예제 #2
0
 def modify_code_indent_formatdict(code, locals_):
     # Parse out search and replace locations in code
     ncl1 = ut.negative_lookbehind('{')
     ncl2 = ut.negative_lookahead('{')
     ncr1 = ut.negative_lookbehind('}')
     ncr2 = ut.negative_lookahead('}')
     left = ncl1 + '{' + ncl2
     right = ncr1 + '}' + ncr2
     fmtpat = left + ut.named_field('key', '[^}]*') + right
     spacepat = ut.named_field('indent', '^\s+')
     pattern = spacepat + fmtpat
     import re
     seen_ = set([])
     for m in re.finditer(pattern, code, flags=re.MULTILINE):
         indent = (m.groupdict()['indent'])
         key = (m.groupdict()['key'])
         if key in locals_ and key not in seen_:
             seen_.add(key)
             locals_[key] = ut.indent_rest(locals_[key], indent)
예제 #3
0
def customize_base_cfg(cfgname, cfgopt_strs, base_cfg, cfgtype,
                       alias_keys=None, valid_keys=None, offset=0,
                       strict=True):
    """
    DEPRICATE
    """
    import re
    cfg = base_cfg.copy()
    # Parse dict out of a string
    #ANYTHING_NOT_BRACE = r'[^\[\]]*\]'
    ANYTHING_NOT_PAREN_OR_BRACE = r'[^()\[\]]*[\]\)]'
    cfgstr_options_list = re.split(
        r',\s*' + ut.negative_lookahead(ANYTHING_NOT_PAREN_OR_BRACE), cfgopt_strs)
    #cfgstr_options_list = cfgopt_strs.split(',')
    cfg_options = ut.parse_cfgstr_list(
        cfgstr_list=cfgstr_options_list, smartcast=True, oldmode=False)
    # Hack for q/d-prefix specific configs
    remove_prefix_hack(cfg, cfgtype, cfg_options, alias_keys)
    # Remap keynames based on aliases
    if alias_keys is not None:
        # Use new standard keys and remove old aliased keys
        for key in set(alias_keys.keys()):
            if key in cfg_options:
                cfg_options[alias_keys[key]] = cfg_options[key]
                del cfg_options[key]
    # Ensure that nothing bad is being updated
    if strict:
        parsed_keys = cfg_options.keys()
        if valid_keys is not None:
            ut.assert_all_in(parsed_keys, valid_keys,
                             'keys specified not in valid set')
        else:
            ut.assert_all_in(parsed_keys, cfg.keys(),
                             'keys specified not in default options')
    # Finalize configuration dict
    cfg.update(cfg_options)
    cfg['_cfgtype'] = cfgtype
    cfg['_cfgname'] = cfgname
    cfg_combo = ut.all_dict_combinations(cfg)
    #if len(cfg_combo) > 1:
    for combox, cfg_ in enumerate(cfg_combo, start=offset):
        #cfg_['_cfgname'] += ';' + str(combox)
        cfg_['_cfgindex'] = combox
    for cfg_ in cfg_combo:
        if len(cfgopt_strs) > 0:
            cfg_['_cfgstr'] = cfg_['_cfgname'] + ut.NAMEVARSEP + cfgopt_strs
        else:
            cfg_['_cfgstr'] = cfg_['_cfgname']
    return cfg_combo
예제 #4
0
import utool as ut
import re

vim = 0
SLASH = re.escape('\\')
LCURL = re.escape(r'{')
RCURL = re.escape(r'}')
NOT_LCURL = '[^}]'
NOPREV_LCURL = ut.negative_lookbehind(r'{', vim=1)
ANY_NONGREEDY = '.' + ut.nongreedy_kleene_star(vim=vim)
NONEXT_BSLASH = ut.negative_lookahead(SLASH, vim=vim)


def GROUP(x):
    return '(' + x + ')'


title = 'section'

#tks = [
#    ('section', 's'),
#    ('subsection', 't'),
#    ('subsubsection', 'u'),
##]

#print('--langdef=tex')
#print('--langmap=tex:.tex')
# --regex-tex=/\\label\{([^}]*)\}/\1/l,label/

# --regex-tex=/\\label\{([^}]*)\}/\1/l,label/
# --regex-tex=/^\s*\\section\{([^}]*)\}/\1/s,section/
예제 #5
0
import utool as ut
import re

vim = 0
SLASH = re.escape('\\')
LCURL = re.escape(r'{')
RCURL = re.escape(r'}')
NOT_LCURL = '[^}]'
NOPREV_LCURL = ut.negative_lookbehind(r'{', vim=1)
ANY_NONGREEDY = '.' + ut.nongreedy_kleene_star(vim=vim)
NONEXT_BSLASH = ut.negative_lookahead(SLASH, vim=vim)


def GROUP(x):
    return '(' + x + ')'

title = 'section'

#tks = [
#    ('section', 's'),
#    ('subsection', 't'),
#    ('subsubsection', 'u'),
##]

#print('--langdef=tex')
#print('--langmap=tex:.tex')
# --regex-tex=/\\label\{([^}]*)\}/\1/l,label/

# --regex-tex=/\\label\{([^}]*)\}/\1/l,label/
# --regex-tex=/^\s*\\section\{([^}]*)\}/\1/s,section/
예제 #6
0
def customize_base_cfg(cfgname, cfgopt_strs, base_cfg, cfgtype,
                       alias_keys=None, valid_keys=None, offset=0,
                       strict=True):
    """
    Args:
        cfgname (str): config name
        cfgopt_strs (str): mini-language defining key variations
        base_cfg (dict): specifies the default cfg to customize
        cfgtype (?):
        alias_keys (None): (default = None)
        valid_keys (None): if base_cfg is not specied, this defines the valid
            keys (default = None)
        offset (int): (default = 0)
        strict (bool): (default = True)

    Returns:
        list: cfg_combo - list of config dicts defining customized configs
            based on cfgopt_strs. customized configs always are given an
            _cfgindex, _cfgstr, and _cfgname key.

    CommandLine:
        python -m ibeis.expt.cfghelpers --exec-_customize_base_cfg

    Example:
        >>> # DISABLE_DOCTEST
        >>> from ibeis.expt.cfghelpers import *  # NOQA
        >>> cfgname = 'default'
        >>> cfgopt_strs = 'dsize=1000,per_name=[1,2]'
        >>> base_cfg = '?'
        >>> cfgtype = '?'
        >>> alias_keys = None
        >>> valid_keys = None
        >>> offset = 0
        >>> strict = True
        >>> cfg_combo = customize_base_cfg(cfgname, cfgopt_strs, base_cfg, cfgtype, alias_keys, valid_keys, offset, strict)
        >>> result = ('cfg_combo = %s' % (str(cfg_combo),))
        >>> print(result)
    """

    cfg = base_cfg.copy()
    # Parse dict out of a string
    #ANYTHING_NOT_BRACE = r'[^\[\]]*\]'
    ANYTHING_NOT_PAREN_OR_BRACE = r'[^()\[\]]*[\]\)]'
    cfgstr_options_list = re.split(
        r',\s*' + ut.negative_lookahead(ANYTHING_NOT_PAREN_OR_BRACE), cfgopt_strs)
    #cfgstr_options_list = cfgopt_strs.split(',')
    cfg_options = ut.parse_cfgstr_list(
        cfgstr_list=cfgstr_options_list, smartcast=True, oldmode=False)
    # Hack for q/d-prefix specific configs
    remove_prefix_hack(cfg, cfgtype, cfg_options, alias_keys)
    # Remap keynames based on aliases
    if alias_keys is not None:
        # Use new standard keys and remove old aliased keys
        for key in set(alias_keys.keys()):
            if key in cfg_options:
                cfg_options[alias_keys[key]] = cfg_options[key]
                del cfg_options[key]
    # Ensure that nothing bad is being updated
    if strict:
        parsed_keys = cfg_options.keys()
        if valid_keys is not None:
            ut.assert_all_in(parsed_keys, valid_keys,
                             'keys specified not in valid set')
        else:
            ut.assert_all_in(parsed_keys, cfg.keys(),
                             'keys specified not in default options')
    # Finalize configuration dict
    cfg.update(cfg_options)
    cfg['_cfgtype'] = cfgtype
    cfg['_cfgname'] = cfgname
    cfg_combo = ut.all_dict_combinations(cfg)
    #if len(cfg_combo) > 1:
    for combox, cfg_ in enumerate(cfg_combo, start=offset):
        #cfg_['_cfgname'] += ';' + str(combox)
        cfg_['_cfgindex'] = combox
    for cfg_ in cfg_combo:
        if len(cfgopt_strs) > 0:
            cfg_['_cfgstr'] = cfg_['_cfgname'] + NAMEVARSEP + cfgopt_strs
        else:
            cfg_['_cfgstr'] = cfg_['_cfgname']
    return cfg_combo