-
Notifications
You must be signed in to change notification settings - Fork 100
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PR2: Add new preference and AnnouncementChecker
class
#1509
base: shrivaths/changelog-announcement-1
Are you sure you want to change the base?
Changes from 13 commits
de22a57
69ff1ed
3fc0e75
0db2904
7ab6d8b
7639142
babb86d
6eddcf0
3f99b8b
f8fb1f1
d9947c3
4cb0c6a
3323115
fc856bf
39ed0b6
dce4dab
9e1ebf7
d35f029
21ea789
3cc4188
59f07ae
acdf130
fbb1039
63e329a
cbb661d
9c726af
68cb64b
2c92712
303a2d2
b708717
a679e61
02757e6
090e36f
aca6c7a
c218b10
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import json | ||
import os | ||
|
||
# Set the file paths | ||
input_md_file = os.path.join(os.path.dirname(__file__), "bulletin.md") | ||
output_json_file = os.path.join(os.path.dirname(__file__), "bulletin.json") | ||
|
||
|
||
def generate_json_file(): | ||
with open(input_md_file, "r", encoding="utf-8") as md_file: | ||
markdown_content = md_file.read() | ||
bulletin_json = [] | ||
content = "" | ||
|
||
# Initialize title and date with default values | ||
title = "DEFAULT_TITLE" | ||
date = "DEFAULT_DATE" | ||
|
||
for line in markdown_content.split("\n"): | ||
if line.startswith("---"): | ||
bulletin_json.append({"title": title, "date": date, "content": content}) | ||
content = "" | ||
# Reset title and date to their default values after each section | ||
title = "DEFAULT_TITLE" | ||
date = "DEFAULT_DATE" | ||
elif line.startswith("##"): | ||
title = line[3:].strip() | ||
elif line.startswith("_"): | ||
date = line[1 : len(line) - 1].strip() | ||
else: | ||
content += line + "\n" | ||
# Append last section | ||
bulletin_json.append({"title": title, "date": date, "content": content}) | ||
|
||
with open(output_json_file, "w", encoding="utf-8") as json_file: | ||
json.dump(bulletin_json, json_file, ensure_ascii=False, indent=4) | ||
|
||
|
||
if __name__ == "__main__": | ||
generate_json_file() |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,11 +3,17 @@ | |
import attr | ||
import pandas as pd | ||
import requests | ||
from typing import List, Dict, Any | ||
from typing import List, Dict, Any, Optional, Tuple | ||
import json | ||
import os | ||
|
||
|
||
REPO_ID = "talmolab/sleap" | ||
ANALYTICS_ENDPOINT = "https://analytics.sleap.ai/ping" | ||
BASE_DIR = os.path.dirname( | ||
os.path.abspath(os.path.join(__file__, os.path.pardir, os.pardir)) | ||
) | ||
BULLETIN_JSON = os.path.join(BASE_DIR, "..", "docs", "bulletin.json") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The BASE_DIR = os.path.dirname(os.path.realpath(__file__))
BULLETIN_JSON = os.path.join(BASE_DIR, "..", "docs", "bulletin.json") |
||
|
||
|
||
@attr.s(auto_attribs=True) | ||
|
@@ -146,6 +152,54 @@ def get_release(self, version: str) -> Release: | |
) | ||
|
||
|
||
@attr.s(auto_attribs=True) | ||
class AnnouncementChecker: | ||
"""Checker for new announcements on the bulletin page of sleap.""" | ||
|
||
app: "MainWindow" | ||
shrivaths16 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
bulletin_json_path: str = BULLETIN_JSON | ||
_previous_announcement_date: str = None | ||
_latest_data: Optional[Dict[str, str]] = None | ||
|
||
@property | ||
def previous_announcement_date(self): | ||
_previous_announcement_date = self.app.state["announcement last seen date"] | ||
return _previous_announcement_date | ||
|
||
def _read_bulletin_data(self): | ||
"""Reads the bulletin data from the JSON file.""" | ||
try: | ||
with open(self.bulletin_json_path, "r") as jsf: | ||
data = json.load(jsf) | ||
self._latest_data = data[0] | ||
except FileNotFoundError: | ||
self._latest_data = {} | ||
|
||
@property | ||
def new_announcement(self) -> bool: | ||
self._read_bulletin_data() | ||
if ( | ||
self._latest_data | ||
and self._latest_data["date"] != self.previous_announcement_date | ||
): | ||
return True | ||
return False | ||
|
||
def get_latest_announcement(self) -> Optional[Tuple[str, str]]: | ||
"""Return latest announcements on the releases page not seen by user.""" | ||
if self.new_announcement: | ||
return (self._latest_data["date"], self._latest_data["content"]) | ||
return None | ||
|
||
def update_announcement(self): | ||
"""Update the last seen date of announcement in preferences.""" | ||
announcement = self.get_latest_announcement() | ||
if announcement is None: | ||
return | ||
self.app.state["announcement last seen date"] = announcement[0] | ||
self.app.state["announcement"] = announcement[1] | ||
|
||
|
||
def get_analytics_data() -> Dict[str, Any]: | ||
"""Gather data to be transmitted to analytics backend.""" | ||
import os | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This probably needs a stronger check, like a date format regexp or another more explicit indicator. There are lots of cases where we might start a line with
"_"
in the main content.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have added a regex that checks if the entire line has only the date content and it is in a certain format.