123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828 |
- import os
- import datetime
- import json
- from studio import checklist
- from studio import story
- from studio import schedule
- from settings import settings
- from settings import talk
- def iftime(string):
-
- if len(string) != len("00:00:00"):
- return False
-
- if len(string.split(":")) != 3:
- return False
-
- try:
- for n, i in enumerate(string.split(":")):
-
- if len(i) != 2:
- return False
-
- i = int(i)
-
- if n == 0 and i > 23:
- return False
- if i > 59:
- return False
- except:
- pass
-
-
- return True
- def ifdate(string):
-
- if len(string) != len("1997/07/30"):
- return False
-
- new_date_format = "%Y/%m/%d"
- try:
- datetime.datetime.strptime(string, new_date_format)
- ret = True
- except:
- ret = False
-
- return ret
- def get_legacy(project_location):
-
-
-
-
-
-
- name_tmp = project_location[project_location.rfind("/")+1:]
-
- data = {
- "name" : name_tmp,
- "director" : "",
- "status" : "",
- "donework" : 0.0,
- "fraction" : 0.0,
- "checklist" : 0.0,
- "startdate" : "0000/00/00",
- "deadline" : "0000/00/00",
- "duration" : 0,
- "timepassed" : 0.0,
- "dayspassed" : 0,
- "chr_factor" : 1,
- "veh_factor" : 1,
- "loc_factor" : 1,
- "obj_factor" : 1,
- "rnd_factor" : 4,
- "chr" : 0.0,
- "veh" : 0.0,
- "loc" : 0.0,
- "obj" : 0.0,
- "rnd" : 0.0,
- "dates" : {}
- }
-
-
-
-
-
-
- Username = settings.read("Username")
- if not Username:
- Username = "Blender-Organizer User"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- projectdata = open(project_location+"/project.data")
- projectdata = projectdata.read()
- projectdata = projectdata.split("\n")
-
- for line in projectdata:
-
- if line.startswith("Project"):
- data["name"] = line[line.find(":")+1:]
-
- elif line.startswith("Status"):
- data["status"] = line[line.find(":")+1:]
-
- elif line.startswith("Director"):
- data["director"] = line[line.find(":")+1:]
-
-
-
- elif line.startswith("Character"):
- try:
- data["chr_factor"] = int(line[line.find(":")+1:])
- except:
- data["chr_factor"] = 1
-
-
- elif line.startswith("Vehicles"):
- try:
- data["veh_factor"] = int(line[line.find(":")+1:])
- except:
- data["veh_factor"] = 1
-
- elif line.startswith("Locations"):
- try:
- data["loc_factor"] = int(line[line.find(":")+1:])
- except:
- data["loc_factor"] = 1
-
- elif line.startswith("Objects"):
- try:
- data["obj_factor"] = int(line[line.find(":")+1:])
- except:
- data["obj_factor"] = 1
-
- elif line.startswith("Scenes"):
- try:
- data["rnd_factor"] = int(line[line.find(":")+1:])
- except:
- data["rnd_factor"] = 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- old_date_format = "%d/%m/%Y"
- new_date_format = "%Y/%m/%d"
-
- projectdata = open(project_location+"/project.progress")
- projectdata = projectdata.read()
- projectdata = projectdata.split("\n")
-
- startdate = datetime.datetime.today()
- deadline = datetime.datetime.today()
-
- try:
- for line in projectdata:
- if line.startswith("STR"):
- startdate = datetime.datetime.strptime(line[4:], old_date_format)
- data["startdate"] = datetime.datetime.strftime(startdate, new_date_format)
-
- elif line.startswith("FIN"):
- deadline = datetime.datetime.strptime(line[4:], old_date_format)
- data["deadline"] = datetime.datetime.strftime(deadline, new_date_format)
- except:
-
- data["startdate"] = datetime.datetime.strftime(datetime.datetime.today(), new_date_format)
- data["deadline"] = datetime.datetime.strftime(datetime.datetime.today()+datetime.timedelta(days=30), new_date_format)
-
-
- delta = deadline - startdate
- data["duration"] = int(delta.days)
-
- delta = datetime.datetime.today() - startdate
- data["dayspassed"] = int(delta.days)
-
- data["timepassed"] = data["dayspassed"] / data["duration"]
- if data["timepassed"] > 1.0:
- data["timepassed"] = 1.0
-
-
-
-
-
- try:
- projectdata = checklist.get_list(project_location+"/project.progress")
- data["checklist"] = projectdata["fraction"]
- except:
- pass
-
-
-
-
-
-
-
-
-
-
-
- asstfols = ["chr", "veh", "loc", "obj"]
- astlist = []
-
- for n , f in enumerate(asstfols):
-
- flist = []
-
- if len(os.listdir(project_location+"/dev/"+f)) > 0:
- for asset in os.listdir(project_location+"/dev/"+f):
-
- if asset+".blend" in os.listdir(project_location+"/ast/"+f):
- flist.append(1.0)
-
- else:
- try:
- fcheck = checklist.get_list(project_location+"/dev/"+f+"/"+asset+"/asset.progress")
- flist.append(fcheck["fraction"])
- except:
- flist.append(0.0)
-
-
-
- multiply = data[f+"_factor"]
- for m in range(multiply):
- astlist.append(sum(flist)/len(flist))
-
- data[f] = sum(flist)/len(flist)
-
-
-
-
-
- data["rnd"] = story.get_legacy(project_location)["fraction"]
-
-
- multiply = data["rnd_factor"]
- for m in range(multiply):
- astlist.append(data["rnd"])
-
- try:
- data["donework"] = sum(astlist) / len(astlist)
- except:
- data["donework"] = 0.0
- data["fraction"] = (data["donework"] + data["checklist"]) / 2
-
-
-
-
-
-
-
-
-
-
-
- sdata = open(project_location+"/schedule.data")
- sdata = sdata.read()
- sdata = sdata.split("\n")
-
-
-
-
-
-
-
-
- for date in sdata:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if date:
- d = date[:date.find(" ")]
- f = date[date.find(" ")+1:date.replace(" ", ".", 1).find(" ")]
- t = date[date.replace(" ", ".", 1).find(" ")+1:].split("=:>")
-
- if d not in data["dates"]:
- data["dates"][d] = {}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if f.startswith("/rnd"):
- ty = "scenes"
- url = f[:f.rfind("/")].replace("/rnd", "", 1)
- url = url[:url.rfind("/")]
- fn = f.replace("/rnd", "", 1).replace(url, "")
-
-
-
-
- elif f.startswith("/dev"):
- ty = "assets"
- url = f[:f.rfind("/")].replace("/dev", "", 1)
- fn = f.replace("/dev", "", 1).replace(url, "")
-
-
-
- else:
- ty = "files"
- url = ""
- fn = f
-
- if not ty in data["dates"][d]:
- data["dates"][d][ty] = {}
-
- if not url in data["dates"][d][ty]:
- data["dates"][d][ty][url] = []
-
- data["dates"][d][ty][url].append([
- "00:00:00",
- "schedule",
- fn,
- t,
- Username
- ])
-
-
-
-
-
-
-
-
-
-
- history_percentage_format = "%y-%m-%d"
-
- hdata = open(project_location+"/percentage_hystory.data")
- hdata = hdata.read()
- hdata = hdata.split("\n")
-
- for date in hdata:
- if date.startswith("DATE"):
-
-
-
-
-
-
-
-
-
- try:
- t, d, f = date.split(" ")
-
-
-
- d = datetime.datetime.strptime(d, history_percentage_format)
- d = datetime.datetime.strftime(d, new_date_format)
-
-
-
- f = float(f.replace("%", "")) / 100
-
- except:
- continue
-
-
-
-
- if d not in data["dates"]:
- data["dates"][d] = {}
-
- data["dates"][d]["fractions"] = {
- "project":f,
- "checklist":0.0,
- "chr":0.0,
- "veh":0.0,
- "loc":0.0,
- "obj":0.0,
- "rnd":0.0
- }
-
-
-
-
-
-
- hdata = open(project_location+"/history.data")
- hdata = hdata.read()
- hdata = hdata.split("\n")
-
- for line in hdata:
-
- if not line:
- continue
-
-
-
-
- date = line[:line.find(" ")]
- time = line[line.find(" ")+1:line.replace(" ", ".", 1).find(" ")]
- path = line[line.replace(" ", ".", 1).find(" ")+1:line.replace(" ", ".", 2).find(" ")]
- done = line[line.replace(" ", ".", 2).find(" ")+1:]
-
-
-
-
- while done[0] != "[" and ".progress" not in path and "[" in done:
-
- transporting = done[:done.find(" ")]
-
- path = path+" "+transporting
- done = done.replace(transporting+" ", "")
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- f = path
-
- if f.startswith("/rnd"):
- ty = "scenes"
- url = f[:f.rfind("/")].replace("/rnd", "", 1)
- url = url[:url.rfind("/")]
- fn = f.replace("/rnd", "", 1).replace(url, "")
-
-
- elif f.startswith("/dev"):
- ty = "assets"
- url = f[:f.rfind("/")].replace("/dev", "", 1)
- fn = f.replace("/dev", "", 1).replace(url, "")
-
- elif f.startswith("/ast") and ".blend" in f:
- ty = "assets"
- url = f[:f.rfind(".")].replace("/ast", "", 1)
- fn = "[asset_blend]"
-
- else:
- ty = "files"
- url = ""
- fn = f
-
-
-
-
- simple_operations = [
- "[Edited]",
- "[Openned]",
- "[Linked]",
- "[Edited]",
- "[Updated]",
- "[Added]",
- "[Added Asset]"
- ]
-
-
-
-
- if done not in simple_operations:
- if "[Scheduled]" in done:
-
-
-
-
-
-
- missingdate = done[done.rfind(" ")+1:]
- missingtask = done[:done.rfind(" [Scheduled]")].split("=:>")
-
-
-
-
-
- if not missingdate in data["dates"]:
- data["dates"][missingdate] = {}
-
- if not ty in data["dates"][missingdate]:
- data["dates"][missingdate][ty] = {}
-
- if not url in data["dates"][missingdate][ty]:
- data["dates"][missingdate][ty][url] = []
-
- data["dates"][missingdate][ty][url].append([
- "00:00:00",
- "schedule",
- fn,
- missingtask,
- Username
- ])
-
-
-
- else:
- if "[V]" in done:
- done = done.replace(" [V]", "").split("=:>")
- check = "[Checked]"
- else:
- done = done.replace(" [ ]", "").split("=:>")
- check = "[Un-Checked]"
-
-
-
- if not date in data["dates"]:
- data["dates"][date] = {}
-
- if not ty in data["dates"][date]:
- data["dates"][date][ty] = {}
-
- if not url in data["dates"][date][ty]:
- data["dates"][date][ty][url] = []
-
- data["dates"][date][ty][url].append([
- time,
- "history",
- fn,
- check,
- done,
- Username
- ])
-
-
-
-
-
- else:
- if not date in data["dates"]:
- data["dates"][date] = {}
-
- if not ty in data["dates"][date]:
- data["dates"][date][ty] = {}
-
- if not url in data["dates"][date][ty]:
- data["dates"][date][ty][url] = []
-
- data["dates"][date][ty][url].append([
- time,
- "history",
- fn,
- done,
- Username
- ])
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- return data
- def save(project, data):
-
-
-
- try:
- os.mkdir(project+'/set/')
- except:
- pass
-
- with open(project+'/set/analytics.json', 'w') as fp:
- json.dump(data, fp, sort_keys=True, indent=4)
-
-
- def load(project_location):
-
-
- name_tmp = project_location[project_location.rfind("/")+1:]
-
- data = {
- "name" : name_tmp,
- "director" : "",
- "status" : "",
- "donework" : 0.0,
- "fraction" : 0.0,
- "checklist" : 0.0,
- "startdate" : "0000/00/00",
- "deadline" : "0000/00/00",
- "duration" : 0,
- "timepassed" : 0.0,
- "dayspassed" : 0,
- "chr_factor" : 1,
- "veh_factor" : 1,
- "loc_factor" : 1,
- "obj_factor" : 1,
- "rnd_factor" : 4,
- "chr" : 0.0,
- "veh" : 0.0,
- "loc" : 0.0,
- "obj" : 0.0,
- "rnd" : 0.0,
- "dates" : {}
- }
-
- try:
- with open(project_location+'/set/analytics.json') as json_file:
- data = json.load(json_file)
- except:
- pass
-
- try:
- projectdata = checklist.get_list(project_location+"/set/project.progress")
- data["checklist"] = projectdata["fraction"]
- except:
- make = open(project_location+"/set/project.progress", "w")
- make.write("[ ] Story\n")
- make.write("[ ] "+talk.text("chr")+"\n")
- make.write("[ ] "+talk.text("veh")+"\n")
- make.write("[ ] "+talk.text("loc")+"\n")
- make.write("[ ] "+talk.text("obj")+"\n")
- make.write("[ ] Animation\n")
- make.write("[ ] Rendering")
- make.close()
-
-
-
- new_date_format = "%Y/%m/%d"
- if not ifdate(data["startdate"]) or not ifdate(data["deadline"]):
- data["startdate"] = datetime.datetime.strftime(datetime.datetime.today(), new_date_format)
- data["deadline"] = datetime.datetime.strftime(datetime.datetime.today()+datetime.timedelta(days=30), new_date_format)
-
-
-
-
-
- startdate = datetime.datetime.strptime(data["startdate"], new_date_format)
- deadline = datetime.datetime.strptime(data["deadline"] , new_date_format)
-
- delta = deadline - startdate
- data["duration"] = int(delta.days)
-
- delta = datetime.datetime.today() - startdate
- data["dayspassed"] = int(delta.days)
-
- data["timepassed"] = data["dayspassed"] / data["duration"]
- if data["timepassed"] > 1.0:
- data["timepassed"] = 1.0
-
-
-
- data["dates"] = schedule.filter(project_location, data["dates"])
-
-
-
-
-
-
-
-
-
-
-
-
-
- asstfols = ["chr", "veh", "loc", "obj"]
- astlist = []
-
- for n , f in enumerate(asstfols):
-
- flist = []
-
- if len(os.listdir(project_location+"/dev/"+f)) > 0:
- for asset in os.listdir(project_location+"/dev/"+f):
-
- if asset+".blend" in os.listdir(project_location+"/ast/"+f):
- flist.append(1.0)
-
- else:
- try:
- fcheck = checklist.get_list(project_location+"/dev/"+f+"/"+asset+"/asset.progress")
- flist.append(fcheck["fraction"])
- except:
- flist.append(0.0)
-
-
-
- multiply = data[f+"_factor"]
- for m in range(multiply):
- astlist.append(sum(flist)/len(flist))
-
- data[f] = sum(flist)/len(flist)
-
-
-
-
-
- data["rnd"] = story.load(project_location)["fraction"]
-
-
- multiply = data["rnd_factor"]
- for m in range(multiply):
- astlist.append(data["rnd"])
-
- try:
- data["donework"] = sum(astlist) / len(astlist)
- except:
- data["donework"] = 0.0
- data["fraction"] = (data["donework"] + data["checklist"]) / 2
-
-
-
- today = datetime.datetime.strftime(datetime.datetime.today(), new_date_format)
- if today not in data["dates"]:
- data["dates"][today] = {}
- data["dates"][today]["fractions"] = {
- "project":data["fraction"],
- "checklist":data["checklist"],
- "chr":data["chr"],
- "veh":data["veh"],
- "loc":data["loc"],
- "obj":data["obj"],
- "rnd":data["rnd"]
- }
-
-
- return data
|