Best Python code snippet using prospector_python
profile.py
Source:profile.py  
...116def _ensure_list(value):117    if isinstance(value, list):118        return value119    return [value]120def _simple_merge_dict(priority, base):121    out = dict(base.items())122    out.update(dict(priority.items()))123    return out124def _merge_tool_config(priority, base):125    out = dict(base.items())126    # add options that are missing, but keep existing options from the priority dictionary127    # TODO: write a unit test for this :-|128    out["options"] = _simple_merge_dict(priority.get("options", {}), base.get("options", {}))129    # copy in some basic pieces130    for key in ("run", "load-plugins"):131        value = priority.get(key, base.get(key))132        if value is not None:133            out[key] = value134    # anything enabled in the 'priority' dict is removed135    # from 'disabled' in the base dict and vice versa136    base_disabled = base.get("disable") or []137    base_enabled = base.get("enable") or []138    pri_disabled = priority.get("disable") or []139    pri_enabled = priority.get("enable") or []140    out["disable"] = list(set(pri_disabled) | (set(base_disabled) - set(pri_enabled)))141    out["enable"] = list(set(pri_enabled) | (set(base_enabled) - set(pri_disabled)))142    return out143def _merge_profile_dict(priority, base):144    # copy the base dict into our output145    out = dict(base.items())146    for key, value in priority.items():147        if key in (148            "strictness",149            "doc-warnings",150            "test-warnings",151            "member-warnings",152            "output-format",153            "autodetect",154            "max-line-length",155            "pep8",156        ):157            # some keys are simple values which are overwritten158            out[key] = value159        elif key in (160            "ignore",161            "ignore-patterns",162            "ignore-paths",163            "uses",164            "requirements",165            "python-targets",166            "output-target",167        ):168            # some keys should be appended169            out[key] = _ensure_list(value) + _ensure_list(base.get(key, []))170        elif key in TOOLS:171            # this is tool config!172            out[key] = _merge_tool_config(value, base.get(key, {}))173    return out174def _determine_strictness(profile_dict, inherits):175    for profile in inherits:176        if profile.startswith("strictness_"):177            return None, False178    strictness = profile_dict.get("strictness")179    if strictness is None:180        return None, False181    return ("strictness_%s" % strictness), True182def _determine_pep8(profile_dict):183    pep8 = profile_dict.get("pep8")184    if pep8 == "full":185        return "full_pep8", True186    elif pep8 == "none":187        return "no_pep8", True188    elif isinstance(pep8, dict) and pep8.get("full", False):189        return "full_pep8", False190    return None, False191def _determine_doc_warnings(profile_dict):192    doc_warnings = profile_dict.get("doc-warnings")193    if doc_warnings is None:194        return None, False195    return ("doc_warnings" if doc_warnings else "no_doc_warnings"), True196def _determine_test_warnings(profile_dict):197    test_warnings = profile_dict.get("test-warnings")198    if test_warnings is None:199        return None, False200    return (None if test_warnings else "no_test_warnings"), True201def _determine_member_warnings(profile_dict):202    member_warnings = profile_dict.get("member-warnings")203    if member_warnings is None:204        return None, False205    return ("member_warnings" if member_warnings else "no_member_warnings"), True206def _determine_implicit_inherits(profile_dict, already_inherits, shorthands_found):207    # Note: the ordering is very important here - the earlier items208    # in the list have precedence over the later items. The point of209    # the doc/test/pep8 profiles is usually to restore items which were210    # turned off in the strictness profile, so they must appear first.211    implicit = [212        ("pep8", _determine_pep8(profile_dict)),213        ("docs", _determine_doc_warnings(profile_dict)),214        ("tests", _determine_test_warnings(profile_dict)),215        ("strictness", _determine_strictness(profile_dict, already_inherits)),216        ("members", _determine_member_warnings(profile_dict)),217    ]218    inherits = []219    for shorthand_name, determined in implicit:220        if shorthand_name in shorthands_found:221            continue222        extra_inherits, shorthand_found = determined223        if not shorthand_found:224            continue225        shorthands_found.add(shorthand_name)226        if extra_inherits is not None:227            inherits.append(extra_inherits)228    return inherits, shorthands_found229def _append_profiles(name, profile_path, data, inherit_list, allow_shorthand=False):230    new_data, new_il, _ = _load_profile(name, profile_path, allow_shorthand=allow_shorthand)231    data.update(new_data)232    inherit_list += new_il233    return data, inherit_list234def _load_and_merge(235    name_or_path, profile_path, allow_shorthand: bool = True, forced_inherits: List[str] = None236) -> Tuple[Dict[str, Any], List[str]]:237    # First simply load all of the profiles and those that it explicitly inherits from238    data, inherit_list, shorthands_found = _load_profile(239        name_or_path,240        profile_path,241        allow_shorthand=allow_shorthand,242        forced_inherits=forced_inherits or [],243    )244    if allow_shorthand:245        if "docs" not in shorthands_found:246            data, inherit_list = _append_profiles("no_doc_warnings", profile_path, data, inherit_list)247        if "members" not in shorthands_found:248            data, inherit_list = _append_profiles("no_member_warnings", profile_path, data, inherit_list)249        if "tests" not in shorthands_found:250            data, inherit_list = _append_profiles("no_test_warnings", profile_path, data, inherit_list)251        if "strictness" not in shorthands_found:252            # if no strictness was specified, then we should manually insert the medium strictness253            for inherit in inherit_list:254                if inherit.startswith("strictness_"):255                    break256            else:257                data, inherit_list = _append_profiles("strictness_medium", profile_path, data, inherit_list)258    # Now we merge all of the values together, from 'right to left' (ie, from the259    # top of the inheritance tree to the bottom). This means that the lower down260    # values overwrite those from above, meaning that the initially provided profile261    # has precedence.262    merged = {}263    for name in inherit_list[::-1]:264        priority = data[name]265        merged = _merge_profile_dict(priority, merged)266    return merged, inherit_list267def _transform_legacy(profile_dict):268    """269    After pep8 was renamed to pycodestyle, this pre-filter just moves profile270    config blocks using the old name to use the new name, merging if both are271    specified.272    Same for pep257->pydocstyle273    """274    out = {}275    # copy in existing pep8/pep257 using new names to start276    if "pycodestyle" in profile_dict:277        out["pycodestyle"] = profile_dict["pycodestyle"]278    if "pydocstyle" in profile_dict:279        out["pydocstyle"] = profile_dict["pydocstyle"]280    # pep8 is tricky as it's overloaded as a tool configuration and a shorthand281    # first, is this the short "pep8: full" version or a configuration of the282    # pycodestyle tool using the old name?283    if "pep8" in profile_dict:284        pep8conf = profile_dict["pep8"]285        if isinstance(pep8conf, dict):286            # merge in with existing config if there is any287            out["pycodestyle"] = _simple_merge_dict(out.get("pycodestyle", {}), pep8conf)288        else:289            # otherwise it's shortform, just copy it in directly290            out["pep8"] = pep8conf291        del profile_dict["pep8"]292    if "pep257" in profile_dict:293        out["pydocstyle"] = _simple_merge_dict(out.get("pydocstyle", {}), profile_dict["pep257"])294        del profile_dict["pep257"]295    # now just copy the rest in296    for key, value in profile_dict.items():297        if key in ("pycodestyle", "pydocstyle"):298            # already handled these299            continue300        out[key] = value301    return out302def _load_profile(303    name_or_path,304    profile_path,305    shorthands_found=None,306    already_loaded=None,307    allow_shorthand=True,...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
