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

Class ConanFileParser

src/packagedcode/conan.py:46–114  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

44
45
46class ConanFileParser(ast.NodeVisitor):
47 def __init__(self):
48 self.name = None
49 self.version = None
50 self.description = None
51 self.author = None
52 self.homepage_url = None
53 self.vcs_url = None
54 self.license = []
55 self.keywords = []
56 self.requires = []
57
58 def to_dict(self):
59 return {
60 "name": self.name,
61 "version": self.version,
62 "description": self.description,
63 "author": self.author,
64 "homepage_url": self.homepage_url,
65 "vcs_url": self.vcs_url,
66 "license": self.license,
67 "keywords": self.keywords,
68 "requires": self.requires,
69 }
70
71 def visit_Assign(self, node):
72 if not node.targets or not isinstance(node.targets[0], ast.Name):
73 return
74 if not node.value or not (
75 isinstance(node.value, ast.Constant) or isinstance(node.value, ast.Tuple)
76 ):
77 return
78
79 attribute_mapping = {
80 "name": "name",
81 "version": "version",
82 "description": "description",
83 "author": "author",
84 "homepage": "homepage_url",
85 "url": "vcs_url",
86 "license": "license",
87 "topics": "keywords",
88 "requires": "requires",
89 }
90 variable_name = node.targets[0].id
91 values = node.value
92
93 if variable_name in attribute_mapping:
94 attribute_name = attribute_mapping[variable_name]
95 if variable_name in ("topics", "requires", "license"):
96 current_list = getattr(self, attribute_name)
97 if isinstance(values, ast.Tuple):
98 current_list.extend(
99 [el.value for el in values.elts if isinstance(el, ast.Constant)]
100 )
101 elif isinstance(values, ast.Constant):
102 current_list.append(values.value)
103 setattr(self, attribute_name, current_list)

Callers 1

_parseMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected