Exemple #1
0
 def test_get_file_creation_date(self):
     path = self.temp_path("a/b/c.txt")
     fsutil.create_file(path, content="Hello World")
     creation_date = fsutil.get_file_creation_date(path)
     now = dt.datetime.now()
     self.assertTrue((now - creation_date) < dt.timedelta(seconds=0.1))
     time.sleep(0.2)
     creation_date = fsutil.get_file_creation_date(path)
     now = dt.datetime.now()
     self.assertFalse((now - creation_date) < dt.timedelta(seconds=0.1))
Exemple #2
0
 def test_get_file_last_modified_date(self):
     path = self.temp_path("a/b/c.txt")
     fsutil.create_file(path, content="Hello")
     creation_date = fsutil.get_file_creation_date(path)
     time.sleep(0.2)
     fsutil.write_file(path, content="Goodbye", append=True)
     now = dt.datetime.now()
     lastmod_date = fsutil.get_file_last_modified_date(path)
     self.assertTrue((now - lastmod_date) < dt.timedelta(seconds=0.1))
     self.assertTrue((lastmod_date - creation_date) > dt.timedelta(seconds=0.15))
Exemple #3
0
def list_files(startpath, filter=None, catfunc=None, wbufferfilename=".data.json"):
    """
    liste tous les fichiers (sous-répertoires inclus) à partir de 'startpath'
    puis filtre suivant les extensions données par 'filter' - exemple ['jpg', 'png']
    puis classe les fichiers en fonction de catfunc (défault *)
    puis écrit un fichier json dans le répertoire scanné (wbufferfilename)
    """
    for root, dirs, files in os.walk(startpath):
        # remove hidden
        files = [f for f in files if not f[0] == "."]
        dirs[:] = [d for d in dirs if not d[0] == "."]
        # tree
        level = root.replace(startpath, "").count(os.sep)
        indent = " " * 1 * (level)
        output_string = "{}{}/".format(indent, os.path.basename(root))
        subindent = "  " * 1 * (level + 1)
        # init dict for json
        wbuffer = dict()
        wbuffer["_root"] = {
            "root": root,
            "startpath": root.replace(startpath, ""),
            "level": level,
        }
        # cosmetic print
        print(f"{output_string}    {root} {filter}")
        # scan files
        for f in files:
            path = f"{root}/{f}"
            ext = os.path.splitext(f)[1][1:]
            file_noext = os.path.splitext(f)[0]
            # skip if ext not in filter
            if filter and ext not in filter:
                continue
            # get file informations
            f_date = fsutil.get_file_creation_date(path)
            f_size = fsutil.get_file_size(path)
            f_hash = fsutil.get_file_hash(path)
            # get file category by function and write dict for json
            if catfunc:
                cat = catfunc(file_noext, ext)
            else:
                cat = "*"
            _tmp = {
                "file": f,
                "ext": ext,
                "date": f_date,
                "size": f_size,
                "hash": f_hash,
            }
            if cat in wbuffer:
                wbuffer[cat].append(_tmp)
            else:
                wbuffer[cat] = [_tmp]
            # cosmetic
            print(f"{subindent} {ext} > {f} > {f_date} > {f_size} bytes > {f_hash}")

        # write json
        wbuffer_file = f"{root}/{wbufferfilename}"
        with open(wbuffer_file, "w+", encoding="utf-8") as fp:
            json.dump(wbuffer, fp, cls=DateTimeEncoder)
            # cosmetic
            print(f"file {wbuffer_file} saved")