poly-hammer-utils 0.0.27__py3-none-any.whl → 0.0.29__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- poly_hammer_utils/extension/meta_human_dna.py +53 -9
- poly_hammer_utils/extension/packager.py +36 -1
- {poly_hammer_utils-0.0.27.dist-info → poly_hammer_utils-0.0.29.dist-info}/METADATA +1 -1
- {poly_hammer_utils-0.0.27.dist-info → poly_hammer_utils-0.0.29.dist-info}/RECORD +5 -5
- {poly_hammer_utils-0.0.27.dist-info → poly_hammer_utils-0.0.29.dist-info}/WHEEL +0 -0
|
@@ -2,11 +2,12 @@ import os
|
|
|
2
2
|
import logging
|
|
3
3
|
import zipfile
|
|
4
4
|
import tempfile
|
|
5
|
+
import shutil
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from poly_hammer_utils.constants import ENVIRONMENT
|
|
7
8
|
from poly_hammer_utils.utilities import download_and_unzip_to_folder, download_release_file
|
|
8
9
|
from poly_hammer_utils.github.release import GitHubRelease
|
|
9
|
-
from poly_hammer_utils.extension.packager import package_extension, get_addon_version
|
|
10
|
+
from poly_hammer_utils.extension.packager import package_extension, get_addon_version, rename_addon
|
|
10
11
|
from poly_hammer_utils.extension.server import update_extension_index, sync_extensions_from_s3
|
|
11
12
|
|
|
12
13
|
BLENDER_EXTENSION_SERVER_S3_BUCKET = 'poly-hammer-portal-staging-app-data'
|
|
@@ -15,6 +16,13 @@ if ENVIRONMENT == 'production':
|
|
|
15
16
|
|
|
16
17
|
BLENDER_EXTENSION_SERVER_S3_FOLDER = 'products/blender-extensions/meta_human_dna'
|
|
17
18
|
|
|
19
|
+
IGNORE_PATTERNS = [
|
|
20
|
+
"__pycache__",
|
|
21
|
+
".git",
|
|
22
|
+
".venv",
|
|
23
|
+
"*.pyc"
|
|
24
|
+
]
|
|
25
|
+
|
|
18
26
|
logger = logging.getLogger(__name__)
|
|
19
27
|
|
|
20
28
|
PREFIX = 'meta_human_dna_core.'
|
|
@@ -121,21 +129,52 @@ def get_meta_human_dna_core(addon_version: str, auth_token: str) -> list[Path]:
|
|
|
121
129
|
file_paths.append(save_path)
|
|
122
130
|
return file_paths
|
|
123
131
|
|
|
124
|
-
def
|
|
132
|
+
def copy_and_rename(addon_folder: Path, pro: bool = False) -> Path:
|
|
133
|
+
temp_addon_folder = Path(tempfile.mkdtemp()) / addon_folder.name
|
|
134
|
+
if pro:
|
|
135
|
+
temp_addon_folder = Path(tempfile.mkdtemp()) / f"{addon_folder.name}_pro"
|
|
136
|
+
|
|
137
|
+
shutil.copytree(
|
|
138
|
+
addon_folder,
|
|
139
|
+
temp_addon_folder,
|
|
140
|
+
ignore=shutil.ignore_patterns(*IGNORE_PATTERNS)
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
if pro:
|
|
144
|
+
rename_addon(
|
|
145
|
+
toml_file_path=temp_addon_folder / 'blender_manifest.toml',
|
|
146
|
+
constants_file_path=temp_addon_folder / 'constants.py',
|
|
147
|
+
addon_id='meta_human_dna',
|
|
148
|
+
new_addon_id='meta_human_dna_pro',
|
|
149
|
+
new_addon_name="MetaHuman DNA Pro"
|
|
150
|
+
)
|
|
151
|
+
else:
|
|
152
|
+
shutil.rmtree(temp_addon_folder / 'resources' / 'dna', ignore_errors=True)
|
|
153
|
+
|
|
154
|
+
return temp_addon_folder
|
|
155
|
+
|
|
156
|
+
def create_release(addon_folder: Path, releases_folder: Path, pro: bool = False):
|
|
125
157
|
token = os.environ['GH_PAT']
|
|
126
158
|
|
|
159
|
+
temp_addon_folder = copy_and_rename(addon_folder=addon_folder, pro=pro)
|
|
160
|
+
|
|
127
161
|
addon_version = get_addon_version(source_folder=addon_folder)
|
|
128
162
|
|
|
163
|
+
s3_prefix = BLENDER_EXTENSION_SERVER_S3_FOLDER
|
|
164
|
+
if pro:
|
|
165
|
+
s3_prefix = f'{s3_prefix}_pro'
|
|
166
|
+
releases_folder = releases_folder / 'pro'
|
|
167
|
+
|
|
129
168
|
# First, sync existing extensions from S3
|
|
130
169
|
sync_extensions_from_s3(
|
|
131
170
|
repo_folder=releases_folder,
|
|
132
171
|
bucket=BLENDER_EXTENSION_SERVER_S3_BUCKET,
|
|
133
|
-
s3_prefix=
|
|
172
|
+
s3_prefix=s3_prefix,
|
|
134
173
|
)
|
|
135
174
|
|
|
136
175
|
# Create the new .zip files for the addon's various platforms
|
|
137
176
|
addon_zip_files = package_extension(
|
|
138
|
-
source_folder=
|
|
177
|
+
source_folder=temp_addon_folder,
|
|
139
178
|
output_folder=releases_folder,
|
|
140
179
|
blender_version=os.environ['BLENDER_VERSION'],
|
|
141
180
|
split_platforms=True,
|
|
@@ -155,6 +194,8 @@ def create_release(addon_folder: Path, releases_folder: Path):
|
|
|
155
194
|
for addon_zip_file in addon_zip_files:
|
|
156
195
|
platform, arch = parse_blender_extension_zip_info(url=addon_zip_file)
|
|
157
196
|
files_to_zip = rig_logic_files + core_files
|
|
197
|
+
|
|
198
|
+
# Now add the bindings to the addon .zip
|
|
158
199
|
with zipfile.ZipFile(addon_zip_file, mode="a", compression=zipfile.ZIP_DEFLATED) as zip_file_handle:
|
|
159
200
|
for file_path in files_to_zip:
|
|
160
201
|
if file_path in rig_logic_files:
|
|
@@ -176,7 +217,7 @@ def create_release(addon_folder: Path, releases_folder: Path):
|
|
|
176
217
|
update_extension_index(
|
|
177
218
|
repo_folder=releases_folder,
|
|
178
219
|
bucket=BLENDER_EXTENSION_SERVER_S3_BUCKET,
|
|
179
|
-
s3_folder=
|
|
220
|
+
s3_folder=s3_prefix,
|
|
180
221
|
blender_version=os.environ['BLENDER_VERSION'],
|
|
181
222
|
docker=True
|
|
182
223
|
)
|
|
@@ -192,13 +233,16 @@ if __name__ == '__main__':
|
|
|
192
233
|
|
|
193
234
|
for addon_name in os.listdir(addons_folder):
|
|
194
235
|
addon_folder = addons_folder / addon_name
|
|
236
|
+
# Create both the pro and free releases
|
|
237
|
+
create_release(
|
|
238
|
+
addon_folder=addon_folder,
|
|
239
|
+
releases_folder=releases_folder,
|
|
240
|
+
pro=True
|
|
241
|
+
)
|
|
195
242
|
create_release(
|
|
196
243
|
addon_folder=addon_folder,
|
|
197
244
|
releases_folder=releases_folder
|
|
198
245
|
)
|
|
199
246
|
|
|
200
247
|
# Clean up the releases folder
|
|
201
|
-
|
|
202
|
-
if item.is_file():
|
|
203
|
-
item.unlink()
|
|
204
|
-
releases_folder.rmdir()
|
|
248
|
+
shutil.rmtree(releases_folder, ignore_errors=True)
|
|
@@ -67,4 +67,39 @@ def package_extension(
|
|
|
67
67
|
|
|
68
68
|
shell(command, cwd=source_folder)
|
|
69
69
|
|
|
70
|
-
return list(output_folder.glob(f'{addon_id}-{addon_version}-*.zip'))
|
|
70
|
+
return list(output_folder.glob(f'{addon_id}-{addon_version}-*.zip'))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def rename_addon(
|
|
74
|
+
toml_file_path: Path,
|
|
75
|
+
constants_file_path: Path,
|
|
76
|
+
addon_id: str,
|
|
77
|
+
new_addon_id: str,
|
|
78
|
+
new_addon_name: str,
|
|
79
|
+
):
|
|
80
|
+
# Update the id and name in the blender_manifest.toml
|
|
81
|
+
if not toml_file_path.exists():
|
|
82
|
+
raise FileNotFoundError(f'Manifest file not found: {toml_file_path}')
|
|
83
|
+
|
|
84
|
+
manifest_data = tomlkit.parse(toml_file_path.read_text())
|
|
85
|
+
manifest_data['id'] = new_addon_id
|
|
86
|
+
manifest_data['name'] = new_addon_name
|
|
87
|
+
toml_file_path.write_text(tomlkit.dumps(manifest_data))
|
|
88
|
+
logger.info(f'Updated manifest: id="{new_addon_id}", name="{new_addon_name}"')
|
|
89
|
+
|
|
90
|
+
# Update ToolInfo.NAME in constants.py
|
|
91
|
+
if not constants_file_path.exists():
|
|
92
|
+
raise FileNotFoundError(f'Constants file not found: {constants_file_path}')
|
|
93
|
+
|
|
94
|
+
constants_text = constants_file_path.read_text()
|
|
95
|
+
updated_text = constants_text.replace(
|
|
96
|
+
f'NAME: str = "{addon_id}"',
|
|
97
|
+
f'NAME: str = "{new_addon_id}"',
|
|
98
|
+
)
|
|
99
|
+
if updated_text == constants_text:
|
|
100
|
+
logger.warning(f'Could not find ToolInfo.NAME with value "{addon_id}" in {constants_file_path}')
|
|
101
|
+
else:
|
|
102
|
+
constants_file_path.write_text(updated_text)
|
|
103
|
+
logger.info(f'Updated ToolInfo.NAME to "{new_addon_id}" in {constants_file_path}')
|
|
104
|
+
|
|
105
|
+
|
|
@@ -2,8 +2,8 @@ poly_hammer_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
|
2
2
|
poly_hammer_utils/addon/packager.py,sha256=apoZhQpd2QeRucFq53u-L1FPmN4MYuiNrjTETAE9NQg,8435
|
|
3
3
|
poly_hammer_utils/addon/release.py,sha256=EZirS8_c9S1OEZoOHStgciu_C7vMxBc_-O5P1fM9Qu4,9074
|
|
4
4
|
poly_hammer_utils/constants.py,sha256=4XGiwn7ip50V1zvmpVD9YZYmE6wPhj2Ark2AXQuJvSc,228
|
|
5
|
-
poly_hammer_utils/extension/meta_human_dna.py,sha256=
|
|
6
|
-
poly_hammer_utils/extension/packager.py,sha256=
|
|
5
|
+
poly_hammer_utils/extension/meta_human_dna.py,sha256=_fAmEqUpAF6SU8qv-SV05A08KyWoV6ywcwInlKqACHo,9179
|
|
6
|
+
poly_hammer_utils/extension/packager.py,sha256=ba2_vEoBKv5WojdcaZTvw-YPTrp3jZUnGa6M1k87dL4,3646
|
|
7
7
|
poly_hammer_utils/extension/server.py,sha256=vuDMqEehgFiFiUy-R28oKzijHo5wIJzW0l66wwPU6I8,8072
|
|
8
8
|
poly_hammer_utils/github/release.py,sha256=P4vrNvdgWuzJI0mRye09BP6vL5b7kQ5fpuDDnEqJbwg,9951
|
|
9
9
|
poly_hammer_utils/helpers.py,sha256=f_2fNrydsbIvwD2LuoBj2gjETMP7dFzJtq1_7WMBwNI,1655
|
|
@@ -11,6 +11,6 @@ poly_hammer_utils/launch.py,sha256=Nc9FlFuGtMSjgSLsk6MMMj-FECsOGtfUQlZaUZt_rGU,4
|
|
|
11
11
|
poly_hammer_utils/resources/scripts/blender/startup.py,sha256=eUd0VwAHjTwIscVKCbk_0-F7p0jgIEsVYdzpIjlzOK0,2282
|
|
12
12
|
poly_hammer_utils/resources/scripts/unreal/init_unreal.py,sha256=1-d9IU8ZSAIS3MUANrsGx4ZmqNJ5f8S2k8XJVg0Bghs,693
|
|
13
13
|
poly_hammer_utils/utilities.py,sha256=7dmZo02HXbWhfmwDHkgVUE_gyq4e-gqb4OdBc2bokbs,6491
|
|
14
|
-
poly_hammer_utils-0.0.
|
|
15
|
-
poly_hammer_utils-0.0.
|
|
16
|
-
poly_hammer_utils-0.0.
|
|
14
|
+
poly_hammer_utils-0.0.29.dist-info/METADATA,sha256=EbUmEcBX-y_G25PLB0XrLwXU5Pkq3hWJcl11jju1x6I,934
|
|
15
|
+
poly_hammer_utils-0.0.29.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
16
|
+
poly_hammer_utils-0.0.29.dist-info/RECORD,,
|
|
File without changes
|