2
0
Fork 0

FeedReader: now able to post multiple issues on a new version

This commit is contained in:
Carlos Galindo 2026-05-31 00:51:47 +02:00
commit 11c3103e3b
2 changed files with 30 additions and 27 deletions

View file

@ -157,11 +157,11 @@ class ForgejoPoster(IssuePoster):
class FeedReader:
'''Class to read an RSS/Atom feed and post an issue if a new version is found.'''
def __init__(self, name: str, url: str, target: IssuePoster):
def __init__(self, name: str, url: str, targets: list[IssuePoster]):
'''Create a new feed reader'''
self.name = name
self.url = url
self.target = target
self.targets = targets if type(targets) == list else [targets]
self.version_file = CONFIG_DIR + self.name
self.etag_file = CONFIG_DIR + self.name + ".etag"
self.beta_strings = [ "nightly", "beta", "alpha", "rc", "pr" ]
@ -223,10 +223,14 @@ class FeedReader:
if match:
return False
# Match 2: with repository issues
if not self.target.issue_exists(self.name, version):
# Post the issue
if not self.target.post_issue(self.name, version, link):
return False
issues_posted = True
for target in self.targets:
if not target.issue_exists(self.name, version):
# Post the issue
if not target.post_issue(self.name, version, link):
issues_posted = False
if not issues_posted:
return False
# Save to disk
if not os.path.isdir(CONFIG_DIR):
os.makedirs(CONFIG_DIR)
@ -238,9 +242,9 @@ class FeedReader:
class PIPYReader(FeedReader):
'''Reader specialized in the PIPY repository.'''
def __init__(self, name: str, package: str, target: IssuePoster):
def __init__(self, name: str, package: str, targets: IssuePoster):
'''Create a new PIPY reader for the given package.'''
super().__init__(name, f"https://pypi.org/rss/project/{package}/releases.xml", target)
super().__init__(name, f"https://pypi.org/rss/project/{package}/releases.xml", targets)
def entry_get_version(self, entry: dict[str, Any]) -> tuple[str, str]:
return entry.title, entry.title
@ -252,9 +256,9 @@ class PIPYReader(FeedReader):
class GithubTagReader(FeedReader):
'''Reader specialized in GitHub Tags Atom feed.'''
def __init__(self, name: str, project: str, target: IssuePoster):
def __init__(self, name: str, project: str, targets: IssuePoster):
'''Create a new GitHub Tags reader for the given project.'''
super().__init__(name, f"https://github.com/{project}/tags.atom", target)
super().__init__(name, f"https://github.com/{project}/tags.atom", targets)
def entry_get_version(self, entry: dict[str, Any]) -> tuple[str, str]:
return entry.title, str(entry.id)
@ -266,8 +270,8 @@ class GithubTagReader(FeedReader):
class GithubReader(GithubTagReader):
'''Reader specialized in GitHub releases' Atom feed.'''
def __init__(self, name: str, project: str, target: IssuePoster):
super().__init__(name, project, target)
def __init__(self, name: str, project: str, targets: IssuePoster):
super().__init__(name, project, targets)
self.url = f"https://github.com/{project}/releases.atom"