MCPcopy Create free account
hub / github.com/aboutcode-org/scancode-toolkit / detect_version_attribute

Function detect_version_attribute

src/packagedcode/pypi.py:2744–2855  ·  view source on GitHub ↗

Return a detected version from a setup.py file at `location` if used as in a version argument of the setup() function. Also search for neighbor files for __version__ and common patterns.

(setup_location)

Source from the content-addressed store, hash-verified

2742
2743
2744def detect_version_attribute(setup_location):
2745 """
2746 Return a detected version from a setup.py file at `location` if used as in
2747 a version argument of the setup() function.
2748 Also search for neighbor files for __version__ and common patterns.
2749 """
2750 # search for possible dunder versions here and elsewhere
2751 setup_version_arg = find_setup_py_dunder_version(setup_location)
2752 setup_py__version = find_dunder_version(setup_location)
2753 if TRACE:
2754 logger_debug(' detect_version_attribute():', 'setup_location:', setup_location)
2755 logger_debug(' find_setup_py_dunder_version(): setup_version_arg:', repr(setup_version_arg),)
2756 logger_debug(' find_dunder_version(): setup_py__version:', repr(setup_py__version),)
2757
2758 if setup_version_arg == '__version__' and setup_py__version:
2759 version = setup_py__version or None
2760 if TRACE:
2761 logger_debug(
2762 ' detect_dunder_version:',
2763 "setup_version_arg == '__version__' and setup_py__version:", version)
2764 return version
2765
2766 # here we have a more complex __version__ location
2767 # we start by adding the possible paths and file name
2768 # and we look at these in sequence
2769
2770 if setup_version_arg and '.' in setup_version_arg:
2771 segments = setup_version_arg.split('.')[:-1]
2772 else:
2773 segments = []
2774
2775 if TRACE:
2776 logger_debug(' detect_version_attribute():', 'segments:', segments)
2777
2778 special_names = (
2779 '__init__.py',
2780 '__main__.py',
2781 '__version__.py',
2782 '__about__.py',
2783 '__version.py',
2784 '_version.py',
2785 'version.py',
2786 'VERSION.py',
2787 'package_data.py',
2788 )
2789
2790 setup_py_dir = fileutils.parent_directory(setup_location)
2791 src_dir = os.path.join(setup_py_dir, 'src')
2792 has_src = os.path.exists(src_dir)
2793 if TRACE:
2794 logger_debug(' detect_version_attribute():', 'src_dir:', src_dir)
2795 logger_debug(' detect_version_attribute():', 'has_src:', has_src)
2796
2797 candidate_locs = []
2798
2799 if segments:
2800 for n in special_names:
2801 candidate_locs.append(segments + [n])

Callers 1

parseMethod · 0.85

Calls 9

find_dunder_versionFunction · 0.85
get_module_scriptsFunction · 0.85
logger_debugFunction · 0.70
splitMethod · 0.45
joinMethod · 0.45
existsMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected