Added basic io handling for characters

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
TheJackiMonster 2021-05-09 01:51:14 +02:00
parent f9ad8d214c
commit 41b3f23fac
No known key found for this signature in database
GPG key ID: D850A5F772E880F9
6 changed files with 130 additions and 9 deletions

View file

@ -8,7 +8,6 @@ realpath = os.path.realpath(__file__)
sys.path.insert(1, os.path.join(os.path.dirname(realpath), '..'))
import manuskript.io as io
import manuskript.data as data
path = os.path.join(sys.path[1], "sample-projects/book-of-acts")

View file

@ -1,13 +1,15 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
from manuskript.data.characters import Characters, Character
from manuskript.data.color import Color
from manuskript.data.goal import GoalKind, Goal
from manuskript.data.info import Info
from manuskript.data.labels import LabelHost, Label
from manuskript.data.outline import Outline, OutlineFolder, OutlineText
from manuskript.data.plots import Plots, PlotLine, PlotStep
from manuskript.data.project import Project
from manuskript.data.goal import GoalKind, Goal
from manuskript.data.outline import Outline, OutlineFolder, OutlineText
from manuskript.data.revisions import Revisions
from manuskript.data.color import Color
from manuskript.data.labels import LabelHost, Label
from manuskript.data.status import StatusHost, Status
from manuskript.data.settings import Settings
from manuskript.data.status import StatusHost, Status
from manuskript.data.unique_id import UniqueIDHost, UniqueID

View file

@ -0,0 +1,116 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import os
from manuskript.data.color import Color
from manuskript.data.unique_id import UniqueIDHost
from manuskript.io.mmdFile import MmdFile
class Character:
def __init__(self, path, characters):
self.file = MmdFile(path, 21)
self.characters = characters
self.UID = None
self.name = None
self.importance = None
self.pov = True
self.motivation = None
self.goal = None
self.conflict = None
self.epiphany = None
self.summarySentence = None
self.summaryParagraph = None
self.summaryFull = None
self.notes = None
self.color = None
self.details = dict()
@classmethod
def loadAttribute(cls, metadata: dict, name: str, defaultValue=None):
if name in metadata:
return metadata.pop(name)
else:
return defaultValue
def load(self):
metadata, _ = self.file.loadMMD(True)
ID = Character.loadAttribute(metadata, "ID")
if ID is None:
raise IOError("Character is missing ID!")
self.UID = self.characters.host.loadID(int(ID))
self.name = Character.loadAttribute(metadata, "Name", None)
self.importance = Character.loadAttribute(metadata, "Importance", None)
self.pov = Character.loadAttribute(metadata, "POV", True)
self.motivation = Character.loadAttribute(metadata, "Motivation", None)
self.goal = Character.loadAttribute(metadata, "Goal", None)
self.conflict = Character.loadAttribute(metadata, "Conflict", None)
self.epiphany = Character.loadAttribute(metadata, "Epiphany", None)
self.summarySentence = Character.loadAttribute(metadata, "Phrase Summary", None)
self.summaryParagraph = Character.loadAttribute(metadata, "Paragraph Summary", None)
self.summaryFull = Character.loadAttribute(metadata, "Full Summary", None)
self.notes = Character.loadAttribute(metadata, "Notes", None)
self.color = Color.parse(Character.loadAttribute(metadata, "Color", None))
self.details.clear()
for (key, value) in metadata.items():
self.details[key] = value
def save(self):
metadata = dict()
for (key, value) in self.details.items():
metadata[key] = value
metadata["ID"] = str(self.UID.value)
metadata["Name"] = self.name
metadata["Importance"] = self.importance
metadata["POV"] = self.pov
metadata["Motivation"] = self.motivation
metadata["Goal"] = self.goal
metadata["Conflict"] = self.conflict
metadata["Epiphany"] = self.epiphany
metadata["Phrase Summary"] = self.summarySentence
metadata["Paragraph Summary"] = self.summaryParagraph
metadata["Full Summary"] = self.summaryFull
metadata["Notes"] = self.notes
metadata["Color"] = self.color
self.file.save((metadata, None))
class Characters:
def __init__(self, path):
self.dir_path = os.path.join(path, "characters")
self.host = UniqueIDHost()
self.characters = list()
def load(self):
self.characters.clear()
for name in os.listdir(self.dir_path):
path = os.path.join(self.dir_path, name)
if not os.path.isfile(path):
continue
character = Character(path, self)
try:
character.load()
except FileNotFoundError:
continue
self.characters.append(character)
def save(self):
for character in self.characters:
character.save()

View file

@ -67,6 +67,6 @@ class LabelHost:
metadata = dict()
for label in self.labels:
metadata[label.name] = str(label.color)
metadata[label.name] = label.color
self.file.save((metadata, None))

View file

@ -5,7 +5,7 @@ import os
from enum import Enum, unique
from manuskript.data.goal import Goal
from manuskript.data.unique_id import UniqueIDHost, UniqueID
from manuskript.data.unique_id import UniqueIDHost
from manuskript.io.mmdFile import MmdFile
@ -23,8 +23,8 @@ class OutlineItem:
self.outline = outline
self.state = OutlineState.UNDEFINED
self.title = ""
self.UID = None
self.title = ""
self.type = ""
self.summarySentence = None
self.summaryFull = None

View file

@ -7,6 +7,7 @@ from manuskript.data.summary import Summary
from manuskript.data.labels import LabelHost
from manuskript.data.status import StatusHost
from manuskript.data.settings import Settings
from manuskript.data.characters import Characters
from manuskript.data.plots import Plots
from manuskript.data.outline import Outline
from manuskript.data.revisions import Revisions
@ -23,6 +24,7 @@ class Project:
self.labels = LabelHost(self.file.dir_path)
self.statuses = StatusHost(self.file.dir_path)
self.settings = Settings(self.file.dir_path)
self.characters = Characters(self.file.dir_path)
self.plots = Plots(self.file.dir_path)
self.outline = Outline(self.file.dir_path)
self.revisions = Revisions(self.file.dir_path)
@ -43,6 +45,7 @@ class Project:
self.labels.load()
self.statuses.load()
self.settings.load()
self.characters.load()
self.plots.load()
self.outline.load()
self.revisions.load()
@ -58,6 +61,7 @@ class Project:
self.labels.save()
self.statuses.save()
self.settings.save()
self.characters.save()
self.plots.save()
self.outline.save()
#self.revisions.save()