def test_equal(self): """Test equivalence.""" p1 = pathlib.Path('wcmatch') p2 = pypathlib.Path('wcmatch') p3 = pathlib.Path('docs') self.assertTrue(p1 == p2) self.assertFalse(p1 == p3) self.assertFalse(p3 == p2)
def test_integrity(self): """Test glob integrity, or better put, test the path structure comes out sane.""" orig = [ pathlib.Path(x) for x in glob.iglob('docs/**/*.md', flags=glob.GLOBSTAR) ] results = list( pathlib.Path('docs').glob('**/*.md', flags=glob.GLOBSTAR)) self.assertEqual(orig, results) orig = [ pathlib.Path(x) for x in glob.iglob('**/*.md', flags=glob.GLOBSTAR) ] results = list(pathlib.Path('').glob('**/*.md', flags=glob.GLOBSTAR)) self.assertEqual(orig, results)
def handle(self, *args, **options): print("Start posting to cloud script...\n") try: order = Order.objects.get(pk=options['order'][0]) except Exception as e: print('bad parameter to do post renders: {}'.format( options['order'][0])) exit() q = order.quality root = pathlib.Path(os.path.join(order.rendersPath, str(q.id))) for f in root.glob(f"*.{q.ext}"): pairs = os.path.basename(f).split('.')[0].split("=")[1].split('_') meshes = {} conf = [] for pair in pairs: mesh, mat = pair.split("-") meshes[mesh] = mat for part in order.kind.parts.all(): p = part.name.lower() # bad conf for do - for lastaR ((( if p == 'bolsters': p = 'back' if p == 'pads': p = 'seat' conf.append(f"{p}:{meshes[part.meshes.all()[0].name]}") print(conf, end='...') if 200 == requests.post(url_post.format(order.kind.product.id, '-'.join(conf)), files={ 'file': open(f, 'rb') }).status_code: print('OK') else: print("failed")
def test_limit_rglob(self): """Test expansion limit of `rglob`.""" with self.assertRaises(_wcparse.PatternLimitException): list( pathlib.Path('.').rglob('{1..11}', flags=pathlib.BRACE, limit=10))
def test_relative(self): """Test relative path.""" abspath = os.path.abspath('.') p = pathlib.Path(abspath) with change_cwd(os.path.dirname(abspath)): results = list(p.glob('docs/**/*.md', flags=pathlib.GLOBSTAR)) self.assertTrue(len(results)) self.assertTrue(all([file.suffix == '.md' for file in results]))
def test_glob(self): """Test globbing function.""" p = pathlib.Path('docs') results = list(p.glob('*.md')) self.assertTrue(not results) results = list(p.glob('**/*.md', flags=pathlib.GLOBSTAR)) self.assertTrue(len(results)) self.assertTrue(all([file.suffix == '.md' for file in results]))
def test_instance(self): """Test instance.""" p1 = pathlib.Path('wcmatch') p2 = pypathlib.Path('wcmatch') self.assertTrue(isinstance(p1, pathlib.Path)) self.assertTrue(isinstance(p1, pypathlib.Path)) self.assertFalse(isinstance(p2, pathlib.Path)) self.assertTrue(isinstance(p2, pypathlib.Path))
def scene(request): context = { 'models': Model3D.objects.filter(glb__isnull=False).filter(blend__isnull=False), #'meshes': Mesh.objects.filter(model__glb__isnull=False), 'finishes': Finish.objects.exclude(name__isnull=True).exclude(archive=1), 'hdrmaps': [ os.path.basename(f) for f in pathlib.Path( os.path.join(settings.STATIC_ROOT, 'furniture', 'models', 'hdri')).glob("*.hdr") ], # todo from db 'data': {}, 'actors': [] } if request.method == 'POST': #if "scene-render" in request.POST: scene = Scene() # scene = Scene.objects.get(pk=1) scene.name = 'scene ' + str(datetime.now()) #world = models.FileField(null=True) scene.quality = Quality.objects.get(pk=1) # get camera position & lookAt direction camera = Camera() # camera = Camera.objects.get(pk=1) camera.set_angles( [float(x) for x in request.POST['camera-pos'].split('|')]) camera.set_lookAt( [float(x) for x in request.POST['camera-lookAt'].split('|')]) camera.focus = 40 # int(request.POST['camera-fov']) #fov (vert) = 40, tan20=0.36, height sensor 36, height 36 => focus = 50 camera.save() scene.camera = camera scene.save() for k, v in request.POST.items(): if 'model-show-' in k: n, model_id = k[len('model-show-'):].split('-') a = add_model_to_scene(int(n), int(model_id), request.POST) a.scene = scene a.save() context['actors'].append(a) return redirect('render:scene-details', scene_id=scene.id) messages.add_message( request, messages.INFO, f"Let's start rendering scene...with {len(Actor.objects.filter(scene=scene))} models, look in status bar for progress " ) # data = .. to do pass back data from POST to form return render( request, 'scene.html', context) # todo put in context camera position. and other data
def test_relative_exclude(self): """Test relative path exclude.""" abspath = os.path.abspath('.') p = pathlib.Path(abspath) with change_cwd(os.path.dirname(abspath)): results = list( p.glob('docs/**/*.md|!**/index.md', flags=pathlib.GLOBSTAR | pathlib.NEGATE | pathlib.SPLIT)) self.assertTrue(len(results)) self.assertTrue(all([file.name != 'index.md' for file in results]))
def test_pickle(self): """Test pickling.""" p1 = pathlib.PurePath('wcmatch') p2 = pathlib.Path('wcmatch') p3 = pickle.loads(pickle.dumps(p1)) p4 = pickle.loads(pickle.dumps(p2)) self.assertTrue(type(p1) == type(p3)) self.assertTrue(type(p2) == type(p4)) self.assertTrue(type(p1) != type(p2)) self.assertTrue(type(p3) != type(p4))
def test_rglob(self): """Test globbing function.""" p = pathlib.Path('docs') results = list(p.rglob('*.md')) self.assertTrue(len(results)) self.assertTrue(all([file.suffix == '.md' for file in results])) results = list(p.rglob('*.md')) self.assertTrue(len(results)) self.assertTrue(all([file.suffix == '.md' for file in results])) results = list(p.rglob('markdown/*.md')) self.assertTrue(len(results)) self.assertTrue(all([file.suffix == '.md' for file in results]))
def test_flavour_equal(self): """Test that the same flavours equal each other, regardless of path type.""" p1 = pathlib.PurePath('wcmatch') p2 = pathlib.Path('wcmatch') p3 = pypathlib.PurePath('wcmatch') p4 = pypathlib.Path('wcmatch') self.assertTrue(p1 == p2) self.assertTrue(p3 == p4) self.assertTrue(p1 == p3) self.assertTrue(p2 == p4) self.assertTrue(p1 == p4) self.assertTrue(p2 == p3)
def handle(self, *args, **options): print("Start flip images...\n") try: order = Order.objects.get(pk=options['order'][0]) except Exception as e: print('bad parameter to do post renders: {}'.format( options['order'][0])) exit() q = order.quality root = pathlib.Path(os.path.join(order.rendersPath, str(q.id))) for f in root.glob(f"*.{q.ext}"): # read the image im = Image.open(f) # flip image print(f, end='...') out = im.transpose(Image.FLIP_LEFT_RIGHT) out.save(f) print('OK')
def glob_match(string, pattern): """determines whether string matches the pattern in glob expression.""" return pathlib.Path(string).globmatch(pattern)
def renders(self): wild = '**/*.{jpg,png}' return [str(f)[len(settings.MEDIA_ROOT) + 1:].replace('\\', '/') for f in pathlib.Path(self.rendersPath).glob(wild, flags=pathlib.BRACE)]
def test_cwd_root_dir_pathlike_bytes(self): """Test root level glob when we switch directory via `root_dir` with a path-like object.""" self.assert_equal( glob.glob(b'EF', root_dir=pathlib.Path(self.tempdir)), [b'EF'])
flags = cls.flags path = None platform = "auto" if len(case) > 3: flags ^= case[3] if len(case) > 4: if case[4] == "windows": path = pathlib.PureWindowsPath(name) platform = case[4] elif case[4] == "unix": path = pathlib.PurePosixPath(name) platform = case[4] elif case[4] == "pure": path = pathlib.PurePath(name) if path is None: path = pathlib.Path(name) print('PATH: ', str(path)) print("PATTERN: ", pattern) print("FILE: ", name) print("GOAL: ", goal) print("FLAGS: ", bin(flags)) print("Platform: ", platform) cls.run(path, pattern, flags, goal) @classmethod def run(cls, path, pattern, flags, goal): """Run the command.""" assert path.globmatch(
def test_absolute_glob(self): """Test absolute patterns in `pathlib` glob.""" with self.assertRaises(ValueError): p = pathlib.Path('wcmatch') list(p.glob('/*'))
def test_inverse_absolute_glob(self): """Test inverse absolute patterns in `pathlib` glob.""" with self.assertRaises(ValueError): p = pathlib.Path('wcmatch') list(p.glob('!/*', flags=pathlib.NEGATE))
def renders(self): root = pathlib.Path(settings.MEDIA_ROOT) / str(self.model.id) wild1 = '*/*.{jpg,png}' # posted return [str(f)[len(settings.MEDIA_ROOT) + 1:].replace('\\', '/') for f in root.glob(wild1, flags=pathlib.BRACE)]
def rendersInOrders(self): root = pathlib.Path(settings.MEDIA_ROOT)/str(self.model.id) wild2 = 'orders/*/*/*.{jpg,png}' # done return [str(f)[len(settings.MEDIA_ROOT) + 1:].replace('\\', '/') for f in root.glob(wild2, flags=pathlib.BRACE)]
def api_get_render(request): #todo must pass quality here if request.method != 'GET': return JsonResponse('only GET method supported', safe=False, status=500) # kind == style if 'style' not in request.GET: return JsonResponse('must specify product style in the url', safe=False, status=400) kind = None try: kind = ProductKind.objects.get(pk=request.GET['style']) except: return JsonResponse({"error": f"there is no style with id {request.GET['style']}"}) # quality qs = [] if 'quality' in request.GET: try: qs = request.GET['quality'].split(' ') qs = [Quality.objects.get(pk=q) for q in qs] except Exception as err: return JsonResponse(f'there is no such quality: {err}', safe=False, status=400) # config if 'config' not in request.GET: return JsonResponse('must specify config', safe=False, status=400) res = kind.parse_rules(request.GET['config'].split('-'), 1) # only config parsing if "error" in res: return JsonResponse(res, status=400) if "file" in res: if qs: for q in qs: # look in quality folder file_path = os.path.join(kind.product.relRendersPath, str(q.id), f"{res['file']}.{q.ext}") if os.path.exists(os.path.join(settings.MEDIA_ROOT, file_path)): if settings.DEBUG: return render(request, 'webapp/render.html', { 'url': os.path.join(settings.MEDIA_URL, file_path) }) # media_url = os.path.join('/', settings.X_ACCEL_REDIRECT_PREFIX, file_path) # os.path.join(settings.MEDIA_URL, file_path) return serve(request, file_path, settings.MEDIA_ROOT) else: # any quality wild = f"*/{res['file']}" + ".{jpg,png}" filtered = sorted(list(pathlib.Path(kind.product.rendersPath).glob(wild, flags=pathlib.BRACE))) if filtered: # first one if settings.DEBUG: return render(request, 'webapp/render.html', { 'url': os.path.join(settings.MEDIA_URL, os.path.relpath(filtered[0], settings.MEDIA_ROOT)) }) else: return serve(request, os.path.relpath(filtered[0], settings.MEDIA_ROOT), settings.MEDIA_ROOT) # need to render o_rule = request.GET['config'].replace('-', ';') order = None # create new order new_order = False try: # if i have the same order in queue or running order = Order.objects.filter(kind=kind).filter(running__isnull=False).get(rule=o_rule) # double click except: order = Order() order.kind_id = kind.id order.rule = o_rule if qs: order.quality_id = qs[0].id else: try: order.quality_id = Quality.objects.get(pk=int(os.getenv('QUALITY'))).id except: order.quality_id = 1 order.save() new_order = True # todo put it (calc path) in the model file_path = os.path.join(order.rendersPath, f"{res['file']}.{order.quality.ext}") if not order.running: # none or false==in queue? # send order into mqtt print('order -> mqqt') # status = order.run() # return JsonResponse({"mqtt error": status}, safe=False, status=500) pass return render(request, 'webapp/render.html', { "order": order, "file_path": file_path, "new": new_order, }) return JsonResponse(res, safe=False, status=500)