wowool-lingware-build 1.1.3.dev5__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.
@@ -0,0 +1,88 @@
1
+ from pathlib import Path
2
+ import logging
3
+ from wowool.lingware.build.git import get_version
4
+ from wowool.lingware.build.utilities import clean_python_build_folders, resolve_template, PREFIX_DO_NOT_EDIT
5
+ from wowool.lingware.build.templates import PACKAGE_SETUP_TEMPLATE, PACKAGE_PYPROJECT_TEMPLATE, README_TEMPLATE
6
+ import json
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+
11
+ def generate_package_setupfile(package_folder: Path, language: str, output_folder: Path):
12
+ wowool_module = "wowool.lxware.wowool"
13
+ package_name = language
14
+ logger.debug(f"Template variables: {wowool_module=}{package_name=}")
15
+ setup_fn = output_folder / "setup.py"
16
+ # eot_namespace_dash = eot_namespace.replace("-", "_")
17
+ repo_version = get_version()
18
+
19
+ setup_py_install_requirement = ""
20
+ # setup_dependencies = [f"{eot_namespace_dash}_language_{language}_basic=={repo_version}"]
21
+ # if "dependencies" in jo_domain_info:
22
+ # dom_info_dependencies = jo_domain_info["dependencies"]
23
+ # setup_dependencies.extend([f"{eot_namespace_dash}_domain_{dep}=={repo_version}".replace("-", "_") for dep in dom_info_dependencies])
24
+
25
+ clean_python_build_folders(package_folder)
26
+ # !! do not remove it's used to resolve
27
+ # setup_py_install_requirement = f"install_requires={json.dumps(setup_dependencies)}"
28
+ # logger.debug(f"Template variables: {setup_py_install_requirement=}")
29
+
30
+ setup_filename = package_folder / setup_fn
31
+ try:
32
+ with open(setup_filename, "w") as fp_mf:
33
+ fp_mf.write(resolve_template(PACKAGE_SETUP_TEMPLATE, globals(), locals()))
34
+ return setup_fn
35
+ except Exception as ex:
36
+ logger.exception(ex)
37
+ setup_filename.unlink(missing_ok=True)
38
+
39
+
40
+ import re
41
+
42
+
43
+ def strip_version(component_name: str) -> str:
44
+ return re.sub("""(.*)@(?:dev\\d*|[0-9\\.]+[\\d]+)(\\.(?:language|dom))?""", "\\1\\2", component_name)
45
+
46
+
47
+ def generate_pyproject_file(package_folder: Path, language: str, output_folder: Path):
48
+
49
+ wowool_module = "wowool.lxware.wowool"
50
+ package_name = language
51
+ logger.debug(f"Template variables: {wowool_module=}{package_name=}")
52
+ pyproject_fn = output_folder / "pyproject.toml"
53
+ repo_version = get_version()
54
+ lxware = output_folder / "src/wowool/lxware/wowool"
55
+ domains_ = []
56
+ for fn in lxware.glob("*.dom_info"):
57
+ dom_info = json.loads(fn.read_text())
58
+ print("dom_info----->>>>>>", dom_info)
59
+ name = strip_version(fn.name)
60
+ dom_text = f"### {name}\n"
61
+
62
+ dom_text += """\n| Entity | Description | Sample |"""
63
+ dom_text += """\n| ------ | ----------- | ------ |"""
64
+ for sample in dom_info["examples"]:
65
+ dom_text += f"""\n| {sample['concept']} |{sample['desc']} | {sample['sample']} |"""
66
+ dom_text += "\n\n"
67
+ domains_.append(dom_text)
68
+
69
+ domains = "\n".join(domains_)
70
+
71
+ readme_fn = output_folder / "README.md"
72
+ readme_fn.write_text(resolve_template(README_TEMPLATE, globals(), locals()))
73
+
74
+ setup_py_install_requirement = ""
75
+
76
+ clean_python_build_folders(output_folder)
77
+ # !! do not remove it's used to resolve
78
+ # setup_py_install_requirement = f"install_requires={json.dumps(setup_dependencies)}"
79
+ # logger.debug(f"Template variables: {setup_py_install_requirement=}")
80
+
81
+ filename = package_folder / pyproject_fn
82
+ try:
83
+ with open(filename, "w") as fp_mf:
84
+ fp_mf.write(resolve_template(PACKAGE_PYPROJECT_TEMPLATE, globals(), locals()))
85
+ return pyproject_fn
86
+ except Exception as ex:
87
+ logger.exception(ex)
88
+ filename.unlink(missing_ok=True)
@@ -0,0 +1,11 @@
1
+ from wowool.lingware.build.domain.build import (
2
+ build_domains,
3
+ build_domain,
4
+ clean_domains,
5
+ clean_domain,
6
+ package_domains,
7
+ package_domain,
8
+ upload_domains,
9
+ upload_domain,
10
+ load_domain_tasks,
11
+ )
@@ -0,0 +1,455 @@
1
+ import json
2
+ from subprocess import run
3
+ from pathlib import Path
4
+ import shutil
5
+ import logging
6
+ from wowool.lingware.build.git import get_version
7
+ import json
8
+ import os
9
+ from wowool.lingware.build.utilities import (
10
+ resolve_template,
11
+ PREFIX_DO_NOT_EDIT,
12
+ eot_namespace,
13
+ wowool_module,
14
+ get_filename_version,
15
+ get_stage_folder,
16
+ get_stage_lxware_folder,
17
+ get_lxcommon,
18
+ get_language,
19
+ clean_python_build_folders,
20
+ )
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ def domains(folder: Path):
26
+ for domain in folder.glob("domains/*"):
27
+ if domain.is_dir():
28
+ yield domain
29
+
30
+
31
+ def get_nrof_threads() -> int:
32
+ return int(os.environ["WOWOOL_NROF_THREADS"]) if "WOWOOL_NROF_THREADS" in os.environ else 1
33
+
34
+
35
+ def get_variable(domain_project_fn, jo, varname, ext, location=None, prefix=""):
36
+ if varname in jo:
37
+ formatted_string = "f'''" + jo[varname] + "'''"
38
+ fn = eval(formatted_string)
39
+ else:
40
+ if location:
41
+ language = None
42
+ if "language" in jo:
43
+ language = jo["language"]
44
+ else:
45
+ try:
46
+ language = Path(domain_project_fn).parts[-4]
47
+ except Exception as ex:
48
+ logger.warning(
49
+ f"ACHTUNG :-# could not extract language from path {domain_project_fn}, name {varname}\n{jo}\n, ex: {ex}"
50
+ )
51
+ pass
52
+ if language:
53
+ fn = Path(location, f"""{prefix}{language}-{jo['name']}{ext}""")
54
+ else:
55
+ fn = Path(location, f"""{prefix}{jo['name']}{ext}""")
56
+ logger.warning(f"ACHTUNG :-# language not found in the config file {domain_project_fn}, name {varname} using {fn} \n{jo}")
57
+
58
+ else:
59
+ fn = Path(domain_project_fn)
60
+ fn = fn.with_suffix(ext)
61
+ return fn
62
+
63
+
64
+ def generate_package_info(domain_folder, dom_file_target, config_file_target, additional_package_files_list):
65
+ with open(domain_folder / "package.json", "w") as fh_pi:
66
+ jpi = {"files": [str(dom_file_target), str(config_file_target)]}
67
+ if additional_package_files_list:
68
+ for additional_package_file in additional_package_files_list:
69
+ jpi["files"].append(str(additional_package_file))
70
+ json.dump(jpi, fh_pi, indent=2)
71
+
72
+
73
+ def generate_domain_makefile(folder: Path, domain_folder: Path):
74
+ nrof_threads = get_nrof_threads()
75
+ version = get_version()
76
+ filename_version = get_filename_version(version)
77
+ addsign_filename_version = f"@{filename_version}"
78
+
79
+ # !! do not remove any , it use in a f-string
80
+ # ----------------------------------------------------
81
+ domain_project_fn = domain_folder / "project.json"
82
+ assert domain_project_fn.exists(), f"Missing project file {domain_project_fn}"
83
+ lxcommon_pth = get_lxcommon(folder)
84
+ lxcommon = str(lxcommon_pth)
85
+ repo = folder
86
+ # ----------------------------------------------------
87
+
88
+ STAGE_DIR = get_stage_folder(folder)
89
+ lxware = get_stage_lxware_folder(folder)
90
+
91
+ if "WOC_EXEC" in os.environ:
92
+ woc_app = os.environ["WOC_EXEC"]
93
+
94
+ else:
95
+ executable = Path(STAGE_DIR, "bin").resolve()
96
+ woc_app = f"{executable}/woc"
97
+ if not Path(woc_app).exists():
98
+ woc_app = "woc"
99
+
100
+ lxware_eot = lxware / "wowool"
101
+
102
+ compiler_options = ""
103
+ with open(domain_project_fn) as fp:
104
+ jo = json.load(fp)
105
+
106
+ # Add additional topics information.
107
+ additional_package_files = ""
108
+
109
+ cwd = Path(domain_project_fn).parent
110
+ name = Path(domain_project_fn).stem
111
+ if "name" in jo:
112
+ name = jo["name"]
113
+ else:
114
+ if name == "project":
115
+ name = Path(cwd).stem
116
+ jo["name"] = name
117
+
118
+ makefile_fn = domain_folder / "makefile._mk"
119
+
120
+ language = None
121
+ language = jo["language"] if "language" in jo else get_language(folder)
122
+ language_filename_version = f"{language}@{filename_version}"
123
+ woc_options = ""
124
+ if "WOC_OPTIONS" in os.environ:
125
+ woc_options += f"{os.environ['WOC_OPTIONS']} "
126
+
127
+ woc_options = jo["woc_options"] if "woc_options" in jo else woc_options
128
+ if "$WOC_OPTIONS" in woc_options and "WOC_OPTIONS" in os.environ:
129
+ woc_options = woc_options.replace("$WOC_OPTIONS", os.environ["WOC_OPTIONS"])
130
+
131
+ dom_info_file_source = f"{language}-{name}.di" if language else f"{name}.di"
132
+ dom_info_file_source = Path(dom_info_file_source)
133
+ dom_info_file_target = Path(f"{dom_info_file_source.stem}@{filename_version}.dom_info")
134
+ dom_info_file_source = Path(cwd, dom_info_file_source)
135
+ dom_info_file_target = Path(lxware_eot, dom_info_file_target)
136
+ if "target_config" in jo:
137
+ formatted_string = "f''' " + jo["target_config"] + "'''"
138
+ dom_info_file_target = eval(formatted_string)
139
+ if not Path(dom_info_file_target).exists():
140
+ print("target_config file not found!!! in {domain_project_fn}")
141
+ exit(-1)
142
+
143
+ domain_description = f"{language}-{name}" if language else f"{name}"
144
+ package_name = f"domain-{domain_description}"
145
+ domain_name = f"{domain_description}@{filename_version}.dom"
146
+ dom_file_target = Path(lxware_eot, domain_name)
147
+ domain_name_dash = domain_description.replace("-", "_")
148
+ package_name_dash = package_name.replace("-", "_")
149
+
150
+ if "target" in jo:
151
+ formatted_string = "f''' " + jo["target"] + "'''"
152
+ dom_file_target = eval(formatted_string)
153
+
154
+ project = folder
155
+ sources = """\\\n"""
156
+
157
+ for file in jo["sources"]:
158
+ formatted_string = "f'''\t" + file + """ \\\\\n'''"""
159
+ resolved_fn = eval(formatted_string)
160
+ sources += eval(formatted_string)
161
+ formatted_string = "f'''" + file + "'''"
162
+ fn = eval(formatted_string)
163
+
164
+ thread_option = f" -j {nrof_threads} " if nrof_threads > 0 else " "
165
+ additional_package_build_statements = ""
166
+ additional_package_files_list = []
167
+ if "plugins" in jo and "topics" in jo["plugins"]:
168
+ topic_model_file_target = Path(dom_file_target).parent / f"{language}@{filename_version}.topic_model"
169
+ additional_package_files += f" {topic_model_file_target}"
170
+ additional_package_files_list.append(topic_model_file_target)
171
+ additional_package_build_statements = f"""
172
+ {topic_model_file_target}: $(DOM_DOM)
173
+ \ttoc -l {language}{addsign_filename_version} -f {repo}/semantics/topics/training_data -o $@ --lxware {lxware}
174
+
175
+ """
176
+
177
+ logger.debug(f"Generate: {makefile_fn}")
178
+
179
+ with open(makefile_fn, "w") as fp_mf:
180
+ from wowool.lingware.build.domain.templates import DOMAIN_MAKEFILE_TEMPLATE
181
+
182
+ fp_mf.write(resolve_template(DOMAIN_MAKEFILE_TEMPLATE, globals(), locals()))
183
+
184
+ # write a file with package info this the files requred to use in the setup
185
+ generate_package_info(domain_folder, dom_file_target, dom_info_file_target, additional_package_files_list)
186
+
187
+ return makefile_fn
188
+
189
+
190
+ def get_sorted_projects(folder: Path):
191
+ fns = []
192
+
193
+ for domain_folder in domains(folder):
194
+ domain = domain_folder.name
195
+ project_fn = folder / f"domains/{domain}/project.json"
196
+ assert project_fn.exists(), f"Missing project.json in {domain_folder}"
197
+
198
+ fns.append(domain_folder)
199
+
200
+ postponed_builds = []
201
+ language = get_language(folder)
202
+ for idx, fn in enumerate(fns):
203
+ domain_dir_name = fn.name
204
+ domain_folder = fn
205
+ dom_info_fn = domain_folder / f"{language}-{domain_dir_name}.di"
206
+ logger.debug(f"Check dom_info file: {dom_info_fn}")
207
+ assert dom_info_fn.exists(), f" ! Missing domain info file: {dom_info_fn}"
208
+ if domain_folder.name == "topics":
209
+ postponed_builds.append({"idx": idx, "project_fn": fn})
210
+
211
+ for postponed_build in postponed_builds:
212
+ del fns[postponed_build["idx"]]
213
+
214
+ postponed_builds = [item["project_fn"] for item in postponed_builds]
215
+ return {"paralell": fns, "postponed": postponed_builds}
216
+
217
+
218
+ def build_domain(folder: Path, domain_folder: Path):
219
+ """build a domain."""
220
+ print("Building: ", folder, domain_folder)
221
+ makefile_fn = generate_domain_makefile(folder, domain_folder)
222
+ compile_paralell(folder, [makefile_fn])
223
+
224
+
225
+ def compile_paralell(folder: Path, makefiles, target=""):
226
+ from subprocess import run
227
+
228
+ makefile_all_fn = folder / "MakeAll._mk"
229
+ with open(makefile_all_fn, "w") as fh:
230
+ fh.write("all:")
231
+ for makefile in makefiles:
232
+ fh.write(f"{makefile.parent.stem}_make ")
233
+ fh.write("\n")
234
+ for makefile in makefiles:
235
+ fh.write(f"{makefile.parent.stem}_make:\n")
236
+ fh.write(f"\t cd {makefile.parent} ; make -f {makefile.name} {target}\n\n")
237
+
238
+ compiler_options_fn = folder / "woc_options.json"
239
+ if compiler_options_fn.exists():
240
+ with open(compiler_options_fn) as fh:
241
+ woc_jo = json.load(fh)
242
+ if "WOC_OPTIONS" in woc_jo:
243
+ args = woc_jo["WOC_OPTIONS"]
244
+ os.environ["WOC_OPTIONS"] = args
245
+ print("SETTING: WOC_OPTIONS", os.environ["WOC_OPTIONS"])
246
+
247
+ threads = get_nrof_threads()
248
+ cmd = f"make -f {makefile_all_fn} -j {threads}"
249
+ logger.debug(f"paralell: {cmd=}")
250
+ run(cmd, shell=True, check=True)
251
+
252
+
253
+ def build_domains(folder):
254
+ """build all the domains."""
255
+
256
+ build_type = get_sorted_projects(folder)
257
+
258
+ makefiles = []
259
+ for domain_folder in build_type["paralell"]:
260
+ makefile_fn = generate_domain_makefile(folder, domain_folder)
261
+ makefiles.append(makefile_fn)
262
+
263
+ if makefiles:
264
+ compile_paralell(folder, makefiles)
265
+
266
+ makefiles = []
267
+ for domain_folder in build_type["postponed"]:
268
+ makefile_fn = generate_domain_makefile(folder, domain_folder)
269
+ makefiles.append(makefile_fn)
270
+
271
+ if makefiles:
272
+ compile_paralell(folder, makefiles)
273
+
274
+
275
+ def get_project_info(domain_folder: Path):
276
+ package_json_fn = domain_folder / "project.json"
277
+ if package_json_fn.exists():
278
+ with open(package_json_fn) as fh:
279
+ return json.load(fh)
280
+ return {}
281
+
282
+
283
+ def get_package_info(domain_folder: Path):
284
+ package_json_fn = domain_folder / "package.json"
285
+ if package_json_fn.exists():
286
+ with open(package_json_fn) as fh:
287
+ return json.load(fh)
288
+ return {}
289
+
290
+
291
+ def get_dom_info(domain_folder: Path):
292
+ di_fn = [fn for fn in domain_folder.glob("*.di")][0]
293
+ with open(di_fn) as fh:
294
+ return json.load(fh)
295
+ return {}
296
+
297
+
298
+ def clean_domain(folder: Path, domain_folder: Path):
299
+ package_info = get_package_info(domain_folder)
300
+ if "files" in package_info:
301
+ for fn in package_info["files"]:
302
+ Path(fn).unlink(missing_ok=True)
303
+ Path(domain_folder / "makefile._mk").unlink(missing_ok=True)
304
+ Path(domain_folder / "package.json").unlink(missing_ok=True)
305
+ clean_python_build_folders(domain_folder)
306
+ shutil.rmtree(f"{domain_folder}/wowool", ignore_errors=True)
307
+ for egg_info in domain_folder.glob("*.egg-info"):
308
+ shutil.rmtree(egg_info, ignore_errors=True)
309
+ Path(f"{folder}/setup.py").unlink(missing_ok=True)
310
+
311
+
312
+ def clean_domains(folder):
313
+ for domain_folder in domains(folder):
314
+ clean_domain(folder, domain_folder)
315
+
316
+
317
+ def generate_domain_setupfile(domain_folder: Path, jo_domain_info, package_name, language):
318
+ eot_namespace = "wowool-lxware"
319
+ wowool_module = "wowool.lxware.wowool"
320
+ lxware_namespace = "wowool-lxware"
321
+ logger.debug(f"Template variables: {eot_namespace=}{wowool_module=}{lxware_namespace=}")
322
+ setup_fn = "setup.py"
323
+ eot_namespace_dash = eot_namespace.replace("-", "_")
324
+ repo_version = get_version()
325
+
326
+ setup_py_install_requirement = ""
327
+ setup_dependencies = [f"{eot_namespace_dash}_language_{language}_basic=={repo_version}"]
328
+ if "dependencies" in jo_domain_info:
329
+ dom_info_dependencies = jo_domain_info["dependencies"]
330
+ setup_dependencies.extend([f"{eot_namespace_dash}_domain_{dep}=={repo_version}".replace("-", "_") for dep in dom_info_dependencies])
331
+
332
+ clean_python_build_folders(domain_folder)
333
+ # !! do not remove it's used to resolve
334
+ setup_py_install_requirement = f"install_requires={json.dumps(setup_dependencies)}"
335
+ logger.debug(f"Template variables: {setup_py_install_requirement=}")
336
+
337
+ setup_filename = domain_folder / setup_fn
338
+ try:
339
+ with open(setup_filename, "w") as fp_mf:
340
+ from wowool.lingware.build.domain.templates import DOMAIN_SETUP_TEMPLATE
341
+
342
+ fp_mf.write(resolve_template(DOMAIN_SETUP_TEMPLATE, globals(), locals()))
343
+ return setup_fn
344
+ except Exception as ex:
345
+ logger.exception(ex)
346
+ setup_filename.unlink(missing_ok=True)
347
+
348
+
349
+ def package_domain(folder: Path, domain_folder: Path, package_lxware_wowool: Path | None = None, run_setup: bool = True):
350
+ package_info = get_package_info(domain_folder)
351
+ assert "files" in package_info, "missing the file section in the package.json of {domain_folder}"
352
+ if package_lxware_wowool is None:
353
+ dst_folder = domain_folder / "wowool/lxware/wowool"
354
+ else:
355
+ dst_folder = package_lxware_wowool
356
+ shutil.rmtree(domain_folder / "wowool", ignore_errors=True)
357
+ dst_folder.mkdir(parents=True, exist_ok=True)
358
+ for fn in package_info["files"]:
359
+ shutil.copy(fn, dst_folder)
360
+
361
+ jo_domain_info = get_dom_info(domain_folder)
362
+ language = get_language(folder)
363
+ name = domain_folder.name
364
+ domain_description = f"{language}-{name}" if language else f"{name}"
365
+
366
+ package_name = f"domain-{domain_description}"
367
+
368
+ if run_setup:
369
+ generate_domain_setupfile(domain_folder, jo_domain_info, package_name, language)
370
+ logger.debug(f"Run setup.py in {domain_folder}")
371
+ run("python setup.py bdist_wheel", cwd=domain_folder, shell=True)
372
+
373
+
374
+ def package_domains(folder: Path, package_lxware_wowool: Path | None = None, run_setup: bool = True):
375
+ for domain_folder in domains(folder):
376
+ package_domain(folder, domain_folder, package_lxware_wowool=package_lxware_wowool, run_setup=run_setup)
377
+
378
+
379
+ def upload_domain(folder: Path, domain_folder: Path):
380
+ from wowool.build.codeartifact import upload_pypi
381
+
382
+ upload_pypi(domain_folder)
383
+
384
+
385
+ def upload_domains(folder: Path):
386
+ for domain_folder in domains(folder):
387
+ upload_domain(folder, domain_folder)
388
+
389
+
390
+ def load_domain_tasks(folder, collection_name=None):
391
+ code = """
392
+ from wowool.lingware.build.domain.build import build_domain, clean_domain, package_domain, upload_domain
393
+
394
+ """
395
+
396
+ for domain_folder in domains(folder):
397
+ domain_name = domain_folder.name
398
+ domain_function_name = domain_name.replace("-", "_")
399
+ code += f"""
400
+
401
+
402
+ @task(name = '{domain_function_name}/build' )
403
+ def build_{domain_function_name}( context ):
404
+ \"\"\" Build the '{domain_name}' Domain. \"\"\"
405
+ from wowool.lingware.build.domain.build import build_domain
406
+ build_domain( Path.cwd(), Path("{domain_folder}") )
407
+
408
+ if {collection_name}:
409
+ {collection_name}.add_task(build_{domain_function_name})
410
+
411
+ @task(name = '{domain_function_name}/clean' )
412
+ def clean_{domain_function_name}( context ):
413
+ \"\"\" Clean the '{domain_name}' Domain. \"\"\"
414
+ from wowool.lingware.build.domain.build import clean_domain
415
+ clean_domain( Path.cwd(), Path("{domain_folder}") )
416
+
417
+ if {collection_name}:
418
+ {collection_name}.add_task(clean_{domain_function_name})
419
+
420
+ @task(name = '{domain_function_name}/package' )
421
+ def package_{domain_function_name}( context ):
422
+ \"\"\" Package the '{domain_name}' Domain. (setup.py) \"\"\"
423
+ THIS_DIR = Path(__file__).parent
424
+ from wowool.lingware.build.domain.build import package_domain
425
+ package_domain( THIS_DIR, Path("{domain_folder}") )
426
+
427
+ if {collection_name}:
428
+ {collection_name}.add_task(package_{domain_function_name})
429
+
430
+ @task(name = '{domain_function_name}/upload' )
431
+ def upload_{domain_function_name}( context ):
432
+ \"\"\" Upload the '{domain_name}' Domain to nexus \"\"\"
433
+ THIS_DIR = Path(__file__).parent
434
+ from wowool.lingware.build.domain.build import upload_domain
435
+ upload_domain( THIS_DIR, Path("{domain_folder}") )
436
+
437
+ if {collection_name}:
438
+ {collection_name}.add_task(upload_{domain_function_name})
439
+
440
+
441
+
442
+ """
443
+
444
+ # @task(name = '{domain_function_name}' )
445
+ # def action_{domain_function_name}( context , action ):
446
+ # THIS_DIR = Path(__file__).parent
447
+ # if action == "test":
448
+ # lingware_tasks.unittest_folder(context, THIS_DIR, verbose=False, diff="meld", overwrite=False, pattern="**/*.txt")
449
+ # elif action == "test_dictionaries":
450
+ # lingware_tasks.unittest_folder(context, THIS_DIR, verbose=False, diff="meld", overwrite=False, pattern="**/*.txt")
451
+ # else:
452
+ # lingware_tasks.build_domains( context, THIS_DIR, "{domain_name}" , target=action )
453
+
454
+ # print(code)
455
+ return code
@@ -0,0 +1,70 @@
1
+ DOMAIN_SETUP_TEMPLATE = """#
2
+ {PREFIX_DO_NOT_EDIT}
3
+ # This file is generated.
4
+ #
5
+ import os
6
+ import shutil
7
+ from pathlib import Path
8
+ import sys
9
+ from setuptools import setup, find_namespace_packages, Extension
10
+
11
+ THIS_DIR = Path(__file__).parent.resolve()
12
+ language = THIS_DIR.name
13
+
14
+ wowool_packages = ["{wowool_module}"]
15
+
16
+ results = setup(
17
+ name="{lxware_namespace}-{package_name}",
18
+ version="{repo_version}",
19
+ packages=wowool_packages,
20
+ author="Wowool",
21
+ author_email = "info@wowool.com",
22
+ description="Wowool NLP {package_name} Package",
23
+ zip_safe=False,
24
+ package_data={{"{wowool_module}": ["*"]}},
25
+ include_package_data=True,
26
+ {setup_py_install_requirement}
27
+ )
28
+
29
+ """
30
+
31
+ DOMAIN_MAKEFILE_TEMPLATE = """######################################################################################
32
+ # Generate Makefile to build {name} {language_filename_version} modules:
33
+ # Unpublished Copyright (c) 2020 EyeOnText, All Rights Reserved.
34
+ # NOTICE: All information contained herein is, and remains the property of EyeOnText.
35
+ ######################################################################################
36
+ WOC:= {woc_app}
37
+ COMPONENT={name}
38
+ DOM_DOM ={dom_file_target}
39
+ DOM_CONF_SRC={dom_info_file_source}
40
+ DOM_INFO_TARGET={dom_info_file_target}
41
+ FILENAME_VERSION:={filename_version}
42
+
43
+ BUILD_PREP=_build_{name}
44
+ PACKAGE_FILES=$(DOM_DOM) $(DOM_INFO_TARGET) {additional_package_files}
45
+ PACKAGE = $(PACKAGE_FILES)
46
+
47
+ all: $(PACKAGE)
48
+
49
+ SOURCES := {sources}
50
+
51
+ $(DOM_DOM) : $(SOURCES)
52
+ $(WOC) {woc_options} -l wowool/{language_filename_version} {thread_option} -o $(DOM_DOM) $(SOURCES) --lxware {lxware}
53
+
54
+ $(DOM_INFO_TARGET) : $(DOM_CONF_SRC)
55
+ convert_domain_info -f $< --output_file $@ --filename_version $(FILENAME_VERSION)
56
+
57
+ {additional_package_build_statements}
58
+
59
+ ut:
60
+ $(WOC) -t -l wowool/{language_filename_version} -o $(DOM_DOM) $(SOURCES)
61
+
62
+ clean:
63
+ -rm -r $(PACKAGE) dist build *.egg-info
64
+ -rm $(DOM_DOM)_inc
65
+
66
+ clean_deploy:
67
+ -rm -r dist build *.egg-info
68
+
69
+
70
+ """
@@ -0,0 +1,34 @@
1
+ from pathlib import Path
2
+ from wowool.build.git import make_version, get_version_info, _get_repository_path
3
+ from subprocess import run
4
+
5
+
6
+ def get_version(fp_repo: Path | None = None):
7
+ """
8
+ Get the version from the git history of the given repository folder
9
+
10
+ :param fp_repo: Optional repository folder. If not provided, the current
11
+ working directory is used
12
+ """
13
+ fp_repo = _get_repository_path(fp_repo)
14
+
15
+ _git_info = get_version_info(fp_repo)
16
+
17
+ results = run("git diff --stat --exit-code HEAD", shell=True, capture_output=True)
18
+ has_changes = results.returncode != 0
19
+ if has_changes:
20
+ out = results.stdout
21
+ seen_lxcommon_not_changed = False
22
+ only_one_changed = False
23
+ for line in out.decode().split("\n"):
24
+ # if 'lxcommon | 0' in out:
25
+ line = line.strip()
26
+
27
+ if "lxcommon | 0" in line:
28
+ seen_lxcommon_not_changed = True
29
+ if line.startswith("1 file changed"):
30
+ only_one_changed = True
31
+ if only_one_changed and seen_lxcommon_not_changed:
32
+ has_changes = False
33
+
34
+ return make_version(_git_info["tag"], _git_info["nr_commits"], has_changes)
@@ -0,0 +1 @@
1
+ from .build import make_language, package_languages, upload_languages, languages