forked from OpenAssetIO/OpenAssetIO-TraitGen
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelpers.py
More file actions
90 lines (74 loc) · 2.77 KB
/
Copy pathhelpers.py
File metadata and controls
90 lines (74 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#
# Copyright 2022 The Foundry Visionmongers Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
Utility functions to help code generation templates.
"""
import datetime
import re
from typing import List, Union
from ..datamodel import SpecificationDeclaration, TraitDeclaration
def to_upper_camel_alnum(string: str) -> str:
"""
Reformats a string to UpperCamelCase stripping out any non
alpha-numeric characters.
eg
: "ThisIs! a complex-string" -> "ThisIsAComplexString"
"""
# non-alnum or UC w/subsq. LC or UC preceding UC/end
words = re.split("([^a-zA-Z0-9]+|[A-Z](?:[a-z]+)|[A-Z](?=[A-Z]|$))", string)
# Splits may be empty, or contain invalid characters, eg:
# ( '', 'This', '', 'Is', '', '! ', 'a', ' ', 'complex', '-', 'string' )
legal_words = [word.capitalize() for word in words if (word and word.isalnum())]
return "".join(legal_words)
def to_lower_camel_alnum(string: str) -> str:
"""
Reformats a string to lowerCamelCase stripping out any non
alpha-numeric characters.
eg: "This is a complex-string" -> "thisIsAComplexString"
"""
upper = to_upper_camel_alnum(string)
return upper[0].lower() + upper[1:]
def default_template_globals() -> dict:
"""
Common template variables for sundry code boilerplate
- copyrightDate: A date range for copyright text.
- copyrightOwner: The owner of the copyright license.
"""
return {
"copyrightDate": datetime.date.today().year,
"copyrightOwner": "",
"spdxLicenseIdentifier": "Apache-2.0",
}
def package_dependencies(
declarations: List[Union[SpecificationDeclaration, TraitDeclaration]],
) -> List[str]:
"""
Returns a list of all dependent package names for the supplied
declarations.
"""
return sorted(
set(dep for decl in declarations for dep in _package_dependencies_for_declaration(decl))
)
def _package_dependencies_for_declaration(
declaration: Union[SpecificationDeclaration, TraitDeclaration],
) -> List[str]:
"""
Returns a list of all dependent package names for the supplied
declaration.
"""
if not isinstance(declaration, SpecificationDeclaration):
return []
return [trait.package for trait in declaration.trait_set]