Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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")
Esempio n. 4
0
    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))
Esempio n. 5
0
    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]))
Esempio n. 6
0
    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]))
Esempio n. 7
0
    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))
Esempio n. 8
0
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
Esempio n. 9
0
    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]))
Esempio n. 10
0
    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))
Esempio n. 11
0
    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]))
Esempio n. 12
0
    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)
Esempio n. 13
0
 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')
Esempio n. 14
0
def glob_match(string, pattern):
    """determines whether string matches the pattern in glob expression."""
    return pathlib.Path(string).globmatch(pattern)
Esempio n. 15
0
 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)]
Esempio n. 16
0
    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'])
Esempio n. 17
0
        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(
Esempio n. 18
0
    def test_absolute_glob(self):
        """Test absolute patterns in `pathlib` glob."""

        with self.assertRaises(ValueError):
            p = pathlib.Path('wcmatch')
            list(p.glob('/*'))
Esempio n. 19
0
    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))
Esempio n. 20
0
 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)]
Esempio n. 21
0
 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)]
Esempio n. 22
0
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)