From 5fa33d7c4ddca8888d46dc938c9344ab0b52c900 Mon Sep 17 00:00:00 2001 From: Chris Palmer Date: Mon, 9 Nov 2020 16:17:02 +0000 Subject: [PATCH] Tests.py now works in projects and makes tests.md and tests.html. NopSCADlib blurb now scraped from libtest.scad. libtest.scad no longer required and lack of it is used to detect a project. --- libtest.scad | 17 +++++++++++ readme.md | 10 ++++--- scripts/tests.py | 78 ++++++++++++++++++++++++------------------------ 3 files changed, 62 insertions(+), 43 deletions(-) diff --git a/libtest.scad b/libtest.scad index 2a65f0e..53e7a41 100644 --- a/libtest.scad +++ b/libtest.scad @@ -17,6 +17,23 @@ // If not, see . // +//!# NopSCADlib +//! An ever expanding library of parts modelled in OpenSCAD useful for 3D printers and enclosures for electronics, etc. +//! +//! It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and some utilities. +//! There are also Python scripts to generate Bills of Materials (BOMs), +//! STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly +//! instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md). +//! +//! A simple example project can be found [here](examples/MainsBreakOutBox/readme.md). +//! +//! For more examples of what it can make see the [gallery](gallery/readme.md). +//! +//! The license is GNU General Public License v3.0, see [COPYING](COPYING). +//! +//! See [usage](docs/usage.md) for requirements, installation instructions and a usage guide. +//! +//! // // This file shows all the parts in the library. // diff --git a/readme.md b/readme.md index c4d41c3..5fb7925 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,12 @@ # NopSCADlib An ever expanding library of parts modelled in OpenSCAD useful for 3D printers and enclosures for electronics, etc. -It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and -some utilities. There are also Python scripts to generate Bills of Materials (BOMs), - STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly -instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md). A simple example project can be found [here](examples/MainsBreakOutBox/readme.md). +It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and some utilities. +There are also Python scripts to generate Bills of Materials (BOMs), +STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly +instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md). + +A simple example project can be found [here](examples/MainsBreakOutBox/readme.md). For more examples of what it can make see the [gallery](gallery/readme.md). diff --git a/scripts/tests.py b/scripts/tests.py index 7dc46d9..1813794 100755 --- a/scripts/tests.py +++ b/scripts/tests.py @@ -90,8 +90,6 @@ def usage(): sys.exit(1) def tests(tests): - doc_base_name = "readme" - doc_name = doc_base_name + ".md" scad_dir = "tests" deps_dir = scad_dir + "/deps" png_dir = scad_dir + "/png" @@ -109,14 +107,28 @@ def tests(tests): # png_name = "libtest.png" scad_name = "libtest.scad" - if not os.path.isfile(png_name): - openscad.run(colour_scheme, "--projection=p", "--imgsize=%d,%d" % (w, h), "--camera=0,0,0,50,0,340,500", "--autocenter", "--viewall", "-o", png_name, scad_name); - do_cmd(["magick", png_name, "-trim", "-resize", "1280", "-bordercolor", background, "-border", "10", png_name]) + if os.path.isfile(scad_name): + libtest = True + lib_blurb = scrape_blurb(scad_name) + if not os.path.isfile(png_name): + openscad.run(colour_scheme, "--projection=p", "--imgsize=%d,%d" % (w, h), "--camera=0,0,0,50,0,340,500", "--autocenter", "--viewall", "-o", png_name, scad_name); + do_cmd(["magick", png_name, "-trim", "-resize", "1280", "-bordercolor", background, "-border", "10", png_name]) + else: + # + # Project tests so just a title + # + libtest = False + project = ' '.join(word[0].upper() + word[1:] for word in os.path.basename(os.getcwd()).split('_')) + lib_blurb = '#' + project + ' Tests\n' + + doc_base_name = "readme" if libtest else "tests" + doc_name = doc_base_name + ".md" # # List of individual part files # - scads = [i for i in sorted(os.listdir(scad_dir), key = lambda s: s.lower()) if i[-5:] == ".scad"] + scads = [i for i in sorted(os.listdir(scad_dir), key = lambda s: s.lower()) if i[-5:] == ".scad"] + types = [] for scad in scads: base_name = scad[:-5] if not tests or base_name in tests: @@ -133,13 +145,15 @@ def tests(tests): if is_plural(base_name) and os.path.isfile(vits_name): objects_name = vits_name - locations = [ - ('vitamins/' + depluralise(base_name) + '.scad', 'Vitamins'), - ('printed/' + base_name + '.scad', 'Printed'), - ('tests/' + base_name + '.scad', 'Tests'), - ('utils/' + base_name + '.scad', 'Utilities'), - ('utils/core/' + base_name + '.scad', 'Core Utilities'), - ] + locations = [] + if os.path.isdir('vitamins'): + locations.append(('vitamins/' + depluralise(base_name) + '.scad', 'Vitamins')) + if os.path.isdir('printed'): + locations.append(('printed/' + base_name + '.scad', 'Printed')) + if os.path.isdir('utils'): + locations.append(('utils/' + base_name + '.scad', 'Utilities')) + if libtest and os.path.isdir('utils/core'): + locations.append(('utils/core/' + base_name + '.scad', 'Core Utilities')) for name, type in locations: if os.path.isfile(name): @@ -149,14 +163,17 @@ def tests(tests): print("Can't find implementation!") continue - vsplit = "AJR" + chr(ord('Z') + 1) - vtype = locations[0][1] - types = [vtype + ' ' + vsplit[i] + '-' + chr(ord(vsplit[i + 1]) - 1) for i in range(len(vsplit) - 1)] + [loc[1] for loc in locations[1 :]] - if type == vtype: - for i in range(1, len(vsplit)): - if cap_name[0] < vsplit[i]: - type = types[i - 1] - break + if libtest: + vsplit = "AJR" + chr(ord('Z') + 1) + vtype = locations[0][1] + types = [vtype + ' ' + vsplit[i] + '-' + chr(ord(vsplit[i + 1]) - 1) for i in range(len(vsplit) - 1)] + [loc[1] for loc in locations[1 :]] + if type == vtype: + for i in range(1, len(vsplit)): + if cap_name[0] < vsplit[i]: + type = types[i - 1] + break + else: + types = [loc[1] for loc in locations] for t in types: if not t in bodies: @@ -252,24 +269,7 @@ def tests(tests): usage() with open(doc_name, "wt") as doc_file: - print('# NopSCADlib', file = doc_file) - print('''\ -An ever expanding library of parts modelled in OpenSCAD useful for 3D printers and enclosures for electronics, etc. - -It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and -some utilities. There are also Python scripts to generate Bills of Materials (BOMs), - STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly -instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md). A simple example project can be found [here](examples/MainsBreakOutBox/readme.md). - -For more examples of what it can make see the [gallery](gallery/readme.md). - -The license is GNU General Public License v3.0, see [COPYING](COPYING). - -See [usage](docs/usage.md) for requirements, installation instructions and a usage guide. - -\n -''', file = doc_file) - + print(lib_blurb, file = doc_file) print('## Table of Contents', file = doc_file) print('', file = doc_file) n = 0