Skip to content

Commit 02efb13

Browse files
authored
Formatting: use black (#6)
* mention formatting in readme * add pyproject.toml with black settings * black * GHA: Add black-lint workflow * formatting fixups
1 parent c3f792a commit 02efb13

File tree

18 files changed

+1824
-1528
lines changed

18 files changed

+1824
-1528
lines changed

.github/workflows/black-lint.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# https://black.readthedocs.io/en/stable/integrations/github_actions.html
2+
3+
name: Black Lint
4+
5+
on: [push, pull_request]
6+
7+
jobs:
8+
black-lint:
9+
permissions: {} # Remove all permissions
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v3
13+
- uses: psf/black@23.12.1

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,9 @@ It for now performs on par with the EEVEE-nodes-based rendering present in Fast6
77
It also offers increased accuracy, with for example blender cycles emulation which is not possible with EEVEE.
88

99
It is currently in development but very usable already!
10+
11+
## Development
12+
13+
### Formatting
14+
15+
This repo uses [the same formatting policy as fast64, using black version 23](https://github.com/Fast-64/fast64/blob/main/README.md#formatting).

__init__.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,23 @@
1212
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1313

1414
bl_info = {
15-
"name" : "f64render",
16-
"author" : "Max Bebök, Fast64 community",
17-
"description" : "Render engine for fast64 materials.",
18-
"blender" : (3, 2, 0),
19-
"version" : (0, 0, 1),
20-
"location" : "Render Properties > Render Engine",
21-
"category" : "3D View"
15+
"name": "f64render",
16+
"author": "Max Bebök, Fast64 community",
17+
"description": "Render engine for fast64 materials.",
18+
"blender": (3, 2, 0),
19+
"version": (0, 0, 1),
20+
"location": "Render Properties > Render Engine",
21+
"category": "3D View",
2222
}
2323

2424
from . import auto_load
2525

2626
auto_load.init()
2727

28+
2829
def register():
2930
auto_load.register()
3031

32+
3133
def unregister():
3234
auto_load.unregister()

auto_load.py

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
modules = None
1919
ordered_classes = None
2020

21+
2122
def init():
2223
global modules
2324
global ordered_classes
2425

2526
modules = get_all_submodules(Path(__file__).parent)
2627
ordered_classes = get_ordered_classes_to_register(modules)
2728

29+
2830
def register():
2931
for cls in ordered_classes:
3032
bpy.utils.register_class(cls)
@@ -35,6 +37,7 @@ def register():
3537
if hasattr(module, "register"):
3638
module.register()
3739

40+
3841
def unregister():
3942
for cls in reversed(ordered_classes):
4043
bpy.utils.unregister_class(cls)
@@ -49,13 +52,16 @@ def unregister():
4952
# Import modules
5053
#################################################
5154

55+
5256
def get_all_submodules(directory):
5357
return list(iter_submodules(directory, __package__))
5458

59+
5560
def iter_submodules(path, package_name):
5661
for name in sorted(iter_submodule_names(path)):
5762
yield importlib.import_module("." + name, package_name)
5863

64+
5965
def iter_submodule_names(path, root=""):
6066
for _, module_name, is_package in pkgutil.iter_modules([str(path)]):
6167
if is_package:
@@ -69,29 +75,34 @@ def iter_submodule_names(path, root=""):
6975
# Find classes to register
7076
#################################################
7177

78+
7279
def get_ordered_classes_to_register(modules):
7380
return toposort(get_register_deps_dict(modules))
7481

82+
7583
def get_register_deps_dict(modules):
7684
my_classes = set(iter_my_classes(modules))
77-
my_classes_by_idname = {cls.bl_idname : cls for cls in my_classes if hasattr(cls, "bl_idname")}
85+
my_classes_by_idname = {cls.bl_idname: cls for cls in my_classes if hasattr(cls, "bl_idname")}
7886

7987
deps_dict = {}
8088
for cls in my_classes:
8189
deps_dict[cls] = set(iter_my_register_deps(cls, my_classes, my_classes_by_idname))
8290
return deps_dict
8391

92+
8493
def iter_my_register_deps(cls, my_classes, my_classes_by_idname):
8594
yield from iter_my_deps_from_annotations(cls, my_classes)
8695
yield from iter_my_deps_from_parent_id(cls, my_classes_by_idname)
8796

97+
8898
def iter_my_deps_from_annotations(cls, my_classes):
8999
for value in typing.get_type_hints(cls, {}, {}).values():
90100
dependency = get_dependency_from_annotation(value)
91101
if dependency is not None:
92102
if dependency in my_classes:
93103
yield dependency
94104

105+
95106
def get_dependency_from_annotation(value):
96107
if blender_version >= (2, 93):
97108
if isinstance(value, bpy.props._PropertyDeferred):
@@ -102,6 +113,7 @@ def get_dependency_from_annotation(value):
102113
return value[1]["type"]
103114
return None
104115

116+
105117
def iter_my_deps_from_parent_id(cls, my_classes_by_idname):
106118
if issubclass(cls, bpy.types.Panel):
107119
parent_idname = getattr(cls, "bl_parent_id", None)
@@ -110,38 +122,54 @@ def iter_my_deps_from_parent_id(cls, my_classes_by_idname):
110122
if parent_cls is not None:
111123
yield parent_cls
112124

125+
113126
def iter_my_classes(modules):
114127
base_types = get_register_base_types()
115128
for cls in get_classes_in_modules(modules):
116129
if any(issubclass(cls, base) for base in base_types):
117130
if not getattr(cls, "is_registered", False):
118131
yield cls
119132

133+
120134
def get_classes_in_modules(modules):
121135
classes = set()
122136
for module in modules:
123137
for cls in iter_classes_in_module(module):
124138
classes.add(cls)
125139
return classes
126140

141+
127142
def iter_classes_in_module(module):
128143
for value in module.__dict__.values():
129144
if inspect.isclass(value):
130145
yield value
131146

147+
132148
def get_register_base_types():
133-
return set(getattr(bpy.types, name) for name in [
134-
"Panel", "Operator", "PropertyGroup",
135-
"AddonPreferences", "Header", "Menu",
136-
"Node", "NodeSocket", "NodeTree",
137-
"UIList", "RenderEngine",
138-
"Gizmo", "GizmoGroup",
139-
])
149+
return set(
150+
getattr(bpy.types, name)
151+
for name in [
152+
"Panel",
153+
"Operator",
154+
"PropertyGroup",
155+
"AddonPreferences",
156+
"Header",
157+
"Menu",
158+
"Node",
159+
"NodeSocket",
160+
"NodeTree",
161+
"UIList",
162+
"RenderEngine",
163+
"Gizmo",
164+
"GizmoGroup",
165+
]
166+
)
140167

141168

142169
# Find order to register to solve dependencies
143170
#################################################
144171

172+
145173
def toposort(deps_dict):
146174
sorted_list = []
147175
sorted_values = set()
@@ -153,5 +181,5 @@ def toposort(deps_dict):
153181
sorted_values.add(value)
154182
else:
155183
unsorted.append(value)
156-
deps_dict = {value : deps_dict[value] - sorted_values for value in unsorted}
184+
deps_dict = {value: deps_dict[value] - sorted_values for value in unsorted}
157185
return sorted_list

0 commit comments

Comments
 (0)