Skip to content

Commit

Permalink
add auto_resize
Browse files Browse the repository at this point in the history
  • Loading branch information
usop4 committed May 18, 2024
1 parent 7ad54d7 commit d8d60e3
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 4 deletions.
33 changes: 33 additions & 0 deletions elegantt/elegantt.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ def resize(self, size=default_size, color=bg_color, today=False, firstday=False)
if firstday:
self.firstday = datetime.date.fromisoformat(firstday)

self.calendar_height = size[1] - self.top_margin - self.bottom_margin

def parse_mermaid(self,str):
events = []
eid = 0
Expand Down Expand Up @@ -117,6 +119,37 @@ def parse_mermaid(self,str):

return events

def analyze_events(self,events):

start = datetime.datetime.max
end = datetime.datetime.min
size = len(events)
for event in events:
if event["start"] and event["start"] < start:
start = event["start"]
if event["end"] and event["end"] > end:
end = event["end"]

analyzed_events = {
"start": start,
"end": end,
"size": size
}
return analyzed_events

def auto_resize(self,events):
analyzed_events = self.analyze_events(events)
days = (analyzed_events["end"] - analyzed_events["start"]).days + 1

self.set_max_day(days)
height = analyzed_events["size"] * self.box_height + self.box_position + self.bottom_margin
width = days * self.cell_width + 2 * self.left_margin
self.resize(
size = (width,height),
today = analyzed_events["start"].strftime("%Y-%m-%d"),
firstday = analyzed_events["start"].strftime("%Y-%m-%d")
)

def get_today(self):
return self.today

Expand Down
41 changes: 37 additions & 4 deletions elegantt/tests/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,14 @@ def setUp(self):
gchart.draw_campain("2024-05-24","2024-05-30","task c")
gchart.save("test_basic_firstday.png")

gchart = elegantt.EleGantt( (720, 320),(255,255,255),today="2024-05-18")
gchart = elegantt.EleGantt( (372, 190),(255,255,255),today="2024-05-20",firstday="2024-05-20")
gchart.set_max_day(11)
gchart.draw_calendar()
gchart.draw_campain(None,None,"task a")
gchart.draw_campain("2024-05-20","2024-05-23","task b")
gchart.draw_campain("2024-05-24","2024-05-30","task c")
gchart.save("test_section.png")
self.assertEqual(True,True)


def test_today_and_firstday_as_monday(self):
gchart = elegantt.EleGantt( (720, 320),(255,255,255),today="2024-05-18",firstday="2024-05-13")
Expand Down Expand Up @@ -91,7 +92,7 @@ def test_parse_mermaid_section(self,s="""
task c : des3, after des2, 7d
"""):
org_events = [
{"title":"task a","start":datetime.datetime(2024, 5, 15, 0, 0),"end":datetime.datetime(2024, 5, 18, 0, 0)},
{"title":"task a","start":None,"end":None},
{"title":"task b","start":datetime.datetime(2024, 5, 20, 0, 0),"end":datetime.datetime(2024, 5, 23, 0, 0)},
{"title":"task c","start":datetime.datetime(2024, 5, 24, 0, 0),"end":datetime.datetime(2024, 5, 30, 0, 0)}
]
Expand Down Expand Up @@ -120,8 +121,40 @@ def test_parse_and_draw_section(self,s="""
task b :active, des2, 2024-05-20, 4d
task c : des3, after des2, 7d
"""):
gchart = elegantt.EleGantt( (720, 320),(255,255,255),today="2024-05-18")
gchart = elegantt.EleGantt( (372, 190),(255,255,255),today="2024-05-20",firstday="2024-05-20")
gchart.set_max_day(11)
parsed_events = gchart.parse_mermaid(s)
gchart.draw_calendar()
for event in parsed_events:
start = event["start"].strftime("%Y-%m-%d") if event["start"] else None
end = event["end"].strftime("%Y-%m-%d") if event["end"] else None
gchart.draw_campain(start,end,event["title"])
image_name = inspect.currentframe().f_code.co_name + ".png"
gchart.save(image_name)
self.assertEqual(Image.open("test_section.png"),Image.open(image_name))

def test_analyze_parsed_events(self,s="""
section task a
task b :active, des2, 2024-05-20, 4d
task c : des3, after des2, 7d
"""):
gchart = elegantt.EleGantt()
parsed_events = gchart.parse_mermaid(s)
analyzed_events = {
"start": datetime.datetime.strptime("2024-05-20","%Y-%m-%d"),
"end": datetime.datetime.strptime("2024-05-30","%Y-%m-%d"),
"size": 3
}
self.assertEqual(analyzed_events,gchart.analyze_events(parsed_events))

def test_auto_resize(self,s="""
section task a
task b :active, des2, 2024-05-20, 4d
task c : des3, after des2, 7d
"""):
gchart = elegantt.EleGantt()
parsed_events = gchart.parse_mermaid(s)
gchart.auto_resize(parsed_events)
gchart.draw_calendar()
for event in parsed_events:
start = event["start"].strftime("%Y-%m-%d") if event["start"] else None
Expand Down

0 comments on commit d8d60e3

Please sign in to comment.