Track journal special issue deadlines
All checks were successful
Build and deploy static pages / build-and-push (push) Successful in 12s
All checks were successful
Build and deploy static pages / build-and-push (push) Successful in 12s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
26
README.md
26
README.md
@@ -195,6 +195,32 @@ journals:
|
|||||||
|
|
||||||
**Important**: Hugo reserves the front matter field `url` as a page URL override. `generate_content.py` maps `venues.yaml:url` → front matter field `homepage` to avoid this conflict.
|
**Important**: Hugo reserves the front matter field `url` as a page URL override. `generate_content.py` maps `venues.yaml:url` → front matter field `homepage` to avoid this conflict.
|
||||||
|
|
||||||
|
### Journal Special Issues
|
||||||
|
|
||||||
|
Journals with `submission_model: rolling` have no fixed deadlines, so WikiCFP yields nothing for them. Special issue CFPs are the only dated journal deadlines worth tracking. Add a `special_issues` list to the journal entry:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
journals:
|
||||||
|
- acronym: TPDS
|
||||||
|
# ... existing fields ...
|
||||||
|
special_issues:
|
||||||
|
- title: "Edge AI Systems: Design and Optimization"
|
||||||
|
guest_editors: ["Wei Zhang", "Yong Cui", "Jian Wang"]
|
||||||
|
cfp_url: "https://..."
|
||||||
|
abstract_deadline: "Aug 15, 2026"
|
||||||
|
submission_deadline: "Sep 1, 2026"
|
||||||
|
notification: "Jan 2027"
|
||||||
|
```
|
||||||
|
|
||||||
|
Special issue deadlines appear in three places:
|
||||||
|
- **Journal page** — a "Special Issues" table below the journal metadata
|
||||||
|
- **Calendar page** — a "Journal Special Issues" table below the conference deadlines
|
||||||
|
- **FullCalendar grid** — events colored purple (`#7b2cbf`), titled `ACR SI — Title — deadline type`, carrying `cfp_url` in `extendedProps`
|
||||||
|
|
||||||
|
Dates use the same `MMM D, YYYY` format as conference deadlines. `notification` additionally accepts month-only precision (`Jan 2027`), which lands on the first of that month in the calendar grid; the tables always print the raw string.
|
||||||
|
|
||||||
|
These entries are `source: manual` by nature — WikiCFP doesn't cover journal special issues. Add them directly to `site/data/<topic>/venues.yaml`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## `topics.yaml` Schema
|
## `topics.yaml` Schema
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Submission Deadlines
|
title: Submission Deadlines
|
||||||
layout: calendar
|
layout: calendar
|
||||||
generated: '2026-08-17T16:18:08Z'
|
generated: '2026-08-17T17:07:26Z'
|
||||||
draft: false
|
draft: false
|
||||||
events:
|
events:
|
||||||
- title: OSDI — abstract deadline
|
- title: OSDI — abstract deadline
|
||||||
@@ -386,23 +386,74 @@ events:
|
|||||||
end: '2026-05-22'
|
end: '2026-05-22'
|
||||||
extendedProps:
|
extendedProps:
|
||||||
location: Sydney, Australia
|
location: Sydney, Australia
|
||||||
|
- title: 'TPDS SI — Edge AI Systems: Design and Optimization — abstract deadline'
|
||||||
|
start: '2026-08-15'
|
||||||
|
url: /cloud-edge/venues/journals/tpds/
|
||||||
|
color: '#7b2cbf'
|
||||||
|
allDay: true
|
||||||
|
extendedProps:
|
||||||
|
cfp_url: https://www.computer.org/csdl/journal/td/call-for-papers
|
||||||
|
- title: 'TPDS SI — Edge AI Systems: Design and Optimization — paper deadline'
|
||||||
|
start: '2026-09-01'
|
||||||
|
url: /cloud-edge/venues/journals/tpds/
|
||||||
|
color: '#7b2cbf'
|
||||||
|
allDay: true
|
||||||
|
extendedProps:
|
||||||
|
cfp_url: https://www.computer.org/csdl/journal/td/call-for-papers
|
||||||
|
- title: 'TPDS SI — Edge AI Systems: Design and Optimization — notification'
|
||||||
|
start: '2027-01-01'
|
||||||
|
url: /cloud-edge/venues/journals/tpds/
|
||||||
|
color: '#7b2cbf'
|
||||||
|
allDay: true
|
||||||
|
extendedProps:
|
||||||
|
cfp_url: https://www.computer.org/csdl/journal/td/call-for-papers
|
||||||
|
- title: FGCS SI — Serverless Computing at the Edge — abstract deadline
|
||||||
|
start: '2026-07-31'
|
||||||
|
url: /cloud-edge/venues/journals/fgcs/
|
||||||
|
color: '#7b2cbf'
|
||||||
|
allDay: true
|
||||||
|
extendedProps:
|
||||||
|
cfp_url: https://www.sciencedirect.com/journal/future-generation-computer-systems/call-for-papers
|
||||||
|
- title: FGCS SI — Serverless Computing at the Edge — paper deadline
|
||||||
|
start: '2026-09-15'
|
||||||
|
url: /cloud-edge/venues/journals/fgcs/
|
||||||
|
color: '#7b2cbf'
|
||||||
|
allDay: true
|
||||||
|
extendedProps:
|
||||||
|
cfp_url: https://www.sciencedirect.com/journal/future-generation-computer-systems/call-for-papers
|
||||||
|
- title: FGCS SI — Serverless Computing at the Edge — notification
|
||||||
|
start: '2027-02-01'
|
||||||
|
url: /cloud-edge/venues/journals/fgcs/
|
||||||
|
color: '#7b2cbf'
|
||||||
|
allDay: true
|
||||||
|
extendedProps:
|
||||||
|
cfp_url: https://www.sciencedirect.com/journal/future-generation-computer-systems/call-for-papers
|
||||||
---
|
---
|
||||||
|
|
||||||
| Conference | Abstract | Paper deadline | Notification | Event dates | Location | ICORE |
|
## Conference Deadlines
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| [IPDPS](/cloud-edge/venues/conferences/ipdps/) | Oct 2, 2025 | Oct 9, 2025 | Feb 2, 2026 | May 25, 2026 - May 29, 2026 | New Orleans, USA | A |
|
|
||||||
| [MobiSys](/cloud-edge/venues/conferences/mobisys/) | Nov 28, 2025 | Dec 5, 2025 | Mar 2, 2026 | Jun 22-24, 2026 | | A |
|
|
||||||
| [OSDI](/cloud-edge/venues/conferences/osdi/) | Dec 4, 2025 | Dec 11, 2025 | | Jul 13-15, 2026 | Seattle, WA, USA | A* |
|
|
||||||
| [CCGrid](/cloud-edge/venues/conferences/ccgrid/) | | Dec 21, 2025 | Feb 10, 2026 | May 18-21, 2026 | Sydney, Australia | B |
|
|
||||||
| [HPDC](/cloud-edge/venues/conferences/hpdc/) | Jan 29, 2026 | Feb 5, 2026 | Mar 31, 2026 | Jul 13, 2026 - Jul 16, 2026 | Cleveland, OH, USA | A |
|
|
||||||
| [SOSP](/cloud-edge/venues/conferences/sosp/) | Mar 26, 2026 | Apr 1, 2026 | Jul 3, 2026 | Sep 29, 2026 - Oct 2, 2026 | Prague, Czechia | A* |
|
|
||||||
| [SC](/cloud-edge/venues/conferences/sc/) | Apr 1, 2026 | Apr 8, 2026 | Jul 1, 2026 | Nov 17-19, 2026 | Chicago, IL, USA | A |
|
|
||||||
| [SEC](/cloud-edge/venues/conferences/sec/) | Apr 24, 2026 | May 1, 2026 | Jul 29, 2026 | Oct 13-16, 2026 | | unranked |
|
|
||||||
| [EuroSys](/cloud-edge/venues/conferences/eurosys/) | May 7, 2026 | May 14, 2026 | Aug 21, 2026 | Apr 19-24, 2027 | Rabat, Morocco | A |
|
|
||||||
| [Middleware](/cloud-edge/venues/conferences/middleware/) | May 29, 2026 | Jun 5, 2026 | Aug 28, 2026 | Dec 14-18, 2026 | Tarragona, Spain | A |
|
|
||||||
| [ATC](/cloud-edge/venues/conferences/atc/) | | Jun 10, 2026 | Sep 18, 2026 | Nov 16-18, 2026 | Hong Kong | C |
|
|
||||||
| [SoCC](/cloud-edge/venues/conferences/socc/) | Jul 7, 2026 | Jul 14, 2026 | Sep 26, 2026 | Nov 18-20, 2026 | Singapore | — |
|
|
||||||
| [NSDI](/cloud-edge/venues/conferences/nsdi/) | Sep 10, 2026 | Sep 17, 2026 | Dec 8, 2026 | May 11-13, 2027 | Providence, RI, USA | National: USA |
|
|
||||||
|
|
||||||
> Deadlines sourced from conference websites and [WikiCFP](http://www.wikicfp.com/).
|
| Venue | Name | Abstract | Paper deadline | Notification | Event dates | Location | ICORE |
|
||||||
|
|---|---|---|---|---|---|---|---|
|
||||||
|
| [IPDPS](/cloud-edge/venues/conferences/ipdps/) | IEEE International Parallel and Distributed Processing Symposium | Oct 2, 2025 | Oct 9, 2025 | Feb 2, 2026 | May 25, 2026 - May 29, 2026 | New Orleans, USA | A |
|
||||||
|
| [MobiSys](/cloud-edge/venues/conferences/mobisys/) | ACM International Conference on Mobile Systems, Applications, and Services | Nov 28, 2025 | Dec 5, 2025 | Mar 2, 2026 | Jun 22-24, 2026 | | A |
|
||||||
|
| [OSDI](/cloud-edge/venues/conferences/osdi/) | USENIX Symposium on Operating Systems Design and Implementation | Dec 4, 2025 | Dec 11, 2025 | | Jul 13-15, 2026 | Seattle, WA, USA | A* |
|
||||||
|
| [CCGrid](/cloud-edge/venues/conferences/ccgrid/) | IEEE/ACM International Symposium on Cluster, Cloud and Internet Computing | | Dec 21, 2025 | Feb 10, 2026 | May 18-21, 2026 | Sydney, Australia | B |
|
||||||
|
| [HPDC](/cloud-edge/venues/conferences/hpdc/) | IEEE International Symposium on High Performance Distributed Computing | Jan 29, 2026 | Feb 5, 2026 | Mar 31, 2026 | Jul 13, 2026 - Jul 16, 2026 | Cleveland, OH, USA | A |
|
||||||
|
| [SOSP](/cloud-edge/venues/conferences/sosp/) | ACM Symposium on Operating Systems Principles | Mar 26, 2026 | Apr 1, 2026 | Jul 3, 2026 | Sep 29, 2026 - Oct 2, 2026 | Prague, Czechia | A* |
|
||||||
|
| [SC](/cloud-edge/venues/conferences/sc/) | International Conference for High Performance Computing, Networking, Storage and Analysis | Apr 1, 2026 | Apr 8, 2026 | Jul 1, 2026 | Nov 17-19, 2026 | Chicago, IL, USA | A |
|
||||||
|
| [SEC](/cloud-edge/venues/conferences/sec/) | IEEE/ACM Symposium on Edge Computing | Apr 24, 2026 | May 1, 2026 | Jul 29, 2026 | Oct 13-16, 2026 | | unranked |
|
||||||
|
| [EuroSys](/cloud-edge/venues/conferences/eurosys/) | European Conference on Computer Systems | May 7, 2026 | May 14, 2026 | Aug 21, 2026 | Apr 19-24, 2027 | Rabat, Morocco | A |
|
||||||
|
| [Middleware](/cloud-edge/venues/conferences/middleware/) | ACM/IFIP/USENIX Middleware Conference | May 29, 2026 | Jun 5, 2026 | Aug 28, 2026 | Dec 14-18, 2026 | Tarragona, Spain | A |
|
||||||
|
| [ATC](/cloud-edge/venues/conferences/atc/) | ACM SIGOPS Annual Technical Conference | | Jun 10, 2026 | Sep 18, 2026 | Nov 16-18, 2026 | Hong Kong | C |
|
||||||
|
| [SoCC](/cloud-edge/venues/conferences/socc/) | ACM Symposium on Cloud Computing | Jul 7, 2026 | Jul 14, 2026 | Sep 26, 2026 | Nov 18-20, 2026 | Singapore | — |
|
||||||
|
| [NSDI](/cloud-edge/venues/conferences/nsdi/) | USENIX Symposium on Networked Systems Design and Implementation | Sep 10, 2026 | Sep 17, 2026 | Dec 8, 2026 | May 11-13, 2027 | Providence, RI, USA | National: USA |
|
||||||
|
|
||||||
|
## Journal Special Issues
|
||||||
|
|
||||||
|
| Venue | Title | Abstract | Paper deadline | Notification | Guest Editors |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| [TPDS](/cloud-edge/venues/journals/tpds/) | [Edge AI Systems: Design and Optimization](https://www.computer.org/csdl/journal/td/call-for-papers) | Aug 15, 2026 | Sep 1, 2026 | Jan 2027 | Wei Zhang, Yong Cui, Jian Wang |
|
||||||
|
| [FGCS](/cloud-edge/venues/journals/fgcs/) | [Serverless Computing at the Edge](https://www.sciencedirect.com/journal/future-generation-computer-systems/call-for-papers) | Jul 31, 2026 | Sep 15, 2026 | Feb 2027 | Marco Serafini, Dimitrios Skarlatos |
|
||||||
|
|
||||||
|
> Deadlines sourced from conference websites, [WikiCFP](http://www.wikicfp.com/), and journal special issue CFPs.
|
||||||
|
|
||||||
|
|||||||
@@ -3,3 +3,5 @@ title: Digests
|
|||||||
layout: digests
|
layout: digests
|
||||||
draft: false
|
draft: false
|
||||||
---
|
---
|
||||||
|
|
||||||
|
tl;drs for the top papers.
|
||||||
|
|||||||
@@ -29,6 +29,13 @@ homepage: https://www.sciencedirect.com/journal/future-generation-computer-syste
|
|||||||
| **Website** | [https://www.sciencedirect.com/journal/future-generation-computer-systems](https://www.sciencedirect.com/journal/future-generation-computer-systems) |
|
| **Website** | [https://www.sciencedirect.com/journal/future-generation-computer-systems](https://www.sciencedirect.com/journal/future-generation-computer-systems) |
|
||||||
| **Latest digest** | [FGCS 2025](/cloud-edge/digests/fgcs-2025/) — 12 papers |
|
| **Latest digest** | [FGCS 2025](/cloud-edge/digests/fgcs-2025/) — 12 papers |
|
||||||
|
|
||||||
|
## Special Issues
|
||||||
|
|
||||||
|
| Title | Abstract | Paper deadline | Notification | Guest Editors |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| [Serverless Computing at the Edge](https://www.sciencedirect.com/journal/future-generation-computer-systems/call-for-papers) | Jul 31, 2026 | Sep 15, 2026 | Feb 2027 | Marco Serafini, Dimitrios Skarlatos |
|
||||||
|
|
||||||
|
|
||||||
## Previous Editions
|
## Previous Editions
|
||||||
|
|
||||||
### FGCS 2025
|
### FGCS 2025
|
||||||
|
|||||||
@@ -29,6 +29,13 @@ homepage: https://www.computer.org/csdl/journal/td
|
|||||||
| **Website** | [https://www.computer.org/csdl/journal/td](https://www.computer.org/csdl/journal/td) |
|
| **Website** | [https://www.computer.org/csdl/journal/td](https://www.computer.org/csdl/journal/td) |
|
||||||
| **Latest digest** | [TPDS 2025](/cloud-edge/digests/tpds-2025/) — 12 papers |
|
| **Latest digest** | [TPDS 2025](/cloud-edge/digests/tpds-2025/) — 12 papers |
|
||||||
|
|
||||||
|
## Special Issues
|
||||||
|
|
||||||
|
| Title | Abstract | Paper deadline | Notification | Guest Editors |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| [Edge AI Systems: Design and Optimization](https://www.computer.org/csdl/journal/td/call-for-papers) | Aug 15, 2026 | Sep 1, 2026 | Jan 2027 | Wei Zhang, Yong Cui, Jian Wang |
|
||||||
|
|
||||||
|
|
||||||
## Previous Editions
|
## Previous Editions
|
||||||
|
|
||||||
### TPDS 2025
|
### TPDS 2025
|
||||||
|
|||||||
@@ -106,6 +106,13 @@ journals:
|
|||||||
scimago_quartile: Q1
|
scimago_quartile: Q1
|
||||||
scimago_sjr: "1.560"
|
scimago_sjr: "1.560"
|
||||||
scimago_h_index: "131"
|
scimago_h_index: "131"
|
||||||
|
special_issues:
|
||||||
|
- title: "Edge AI Systems: Design and Optimization"
|
||||||
|
guest_editors: ["Wei Zhang", "Yong Cui", "Jian Wang"]
|
||||||
|
cfp_url: "https://www.computer.org/csdl/journal/td/call-for-papers"
|
||||||
|
abstract_deadline: "Aug 15, 2026"
|
||||||
|
submission_deadline: "Sep 1, 2026"
|
||||||
|
notification: "Jan 2027"
|
||||||
|
|
||||||
- acronym: TOCS
|
- acronym: TOCS
|
||||||
full_name: "ACM Transactions on Computer Systems"
|
full_name: "ACM Transactions on Computer Systems"
|
||||||
@@ -150,6 +157,13 @@ journals:
|
|||||||
scimago_quartile: Q1
|
scimago_quartile: Q1
|
||||||
scimago_sjr: "1.520"
|
scimago_sjr: "1.520"
|
||||||
scimago_h_index: "130"
|
scimago_h_index: "130"
|
||||||
|
special_issues:
|
||||||
|
- title: "Serverless Computing at the Edge"
|
||||||
|
guest_editors: ["Marco Serafini", "Dimitrios Skarlatos"]
|
||||||
|
cfp_url: "https://www.sciencedirect.com/journal/future-generation-computer-systems/call-for-papers"
|
||||||
|
abstract_deadline: "Jul 31, 2026"
|
||||||
|
submission_deadline: "Sep 15, 2026"
|
||||||
|
notification: "Feb 2027"
|
||||||
|
|
||||||
- acronym: JPDC
|
- acronym: JPDC
|
||||||
full_name: "Journal of Parallel and Distributed Computing"
|
full_name: "Journal of Parallel and Distributed Computing"
|
||||||
|
|||||||
@@ -222,7 +222,8 @@ def _conf_body(fm: dict, digests: list[dict] | None = None, base_path: str = "")
|
|||||||
return "\n".join(lines) + "\n"
|
return "\n".join(lines) + "\n"
|
||||||
|
|
||||||
|
|
||||||
def _journal_body(fm: dict, digests: list[dict] | None = None, base_path: str = "") -> str:
|
def _journal_body(fm: dict, digests: list[dict] | None = None, base_path: str = "",
|
||||||
|
special_issues: list[dict] | None = None) -> str:
|
||||||
q = fm.get("scimago_quartile") or "—"
|
q = fm.get("scimago_quartile") or "—"
|
||||||
sjr = fm.get("scimago_sjr") or "—"
|
sjr = fm.get("scimago_sjr") or "—"
|
||||||
h = fm.get("scimago_h_index") or "—"
|
h = fm.get("scimago_h_index") or "—"
|
||||||
@@ -253,6 +254,25 @@ def _journal_body(fm: dict, digests: list[dict] | None = None, base_path: str =
|
|||||||
suffix = f"— {count} papers" if count else "*(digest pending)*"
|
suffix = f"— {count} papers" if count else "*(digest pending)*"
|
||||||
lines.append(f"| **Latest digest** | [{title} {year}]({base_path}/digests/{slug}/) {suffix} |")
|
lines.append(f"| **Latest digest** | [{title} {year}]({base_path}/digests/{slug}/) {suffix} |")
|
||||||
|
|
||||||
|
if special_issues:
|
||||||
|
lines += ["\n## Special Issues\n"]
|
||||||
|
lines += [
|
||||||
|
"| Title | Abstract | Paper deadline | Notification | Guest Editors |",
|
||||||
|
"|---|---|---|---|---|",
|
||||||
|
]
|
||||||
|
for si in special_issues:
|
||||||
|
si_title = si.get("title", "Special Issue")
|
||||||
|
abstract = si.get("abstract_deadline") or ""
|
||||||
|
paper = si.get("submission_deadline") or si.get("abstract_deadline") or "TBD"
|
||||||
|
notif = si.get("notification") or ""
|
||||||
|
editors = ", ".join(si.get("guest_editors", [])) or "—"
|
||||||
|
abs_cell = abstract if (abstract and abstract != paper) else ""
|
||||||
|
cfp_url = si.get("cfp_url", "")
|
||||||
|
if cfp_url:
|
||||||
|
si_title = f"[{si_title}]({cfp_url})"
|
||||||
|
lines.append(f"| {si_title} | {abs_cell} | {paper} | {notif} | {editors} |")
|
||||||
|
lines.append("")
|
||||||
|
|
||||||
if digests:
|
if digests:
|
||||||
lines += ["\n## Previous Editions\n"]
|
lines += ["\n## Previous Editions\n"]
|
||||||
for d in sorted(digests, key=lambda x: x["year"], reverse=True):
|
for d in sorted(digests, key=lambda x: x["year"], reverse=True):
|
||||||
@@ -278,13 +298,25 @@ def _journal_body(fm: dict, digests: list[dict] | None = None, base_path: str =
|
|||||||
# Date helpers
|
# Date helpers
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
def _parse_date(s: str) -> str | None:
|
def _parse_date(s: str, month_only: bool = False) -> str | None:
|
||||||
"""'Apr 1, 2026' → '2026-04-01', or None if unparseable."""
|
"""'Apr 1, 2026' → '2026-04-01', or None if unparseable.
|
||||||
|
|
||||||
|
With month_only, also accepts a bare month and year ('Jan 2027' →
|
||||||
|
'2027-01-01'). Journal special issues often announce notifications at
|
||||||
|
month granularity; conference deadlines are always full dates, so this
|
||||||
|
stays opt-in to keep their output unchanged.
|
||||||
|
"""
|
||||||
for fmt in ("%b %d, %Y", "%B %d, %Y"):
|
for fmt in ("%b %d, %Y", "%B %d, %Y"):
|
||||||
try:
|
try:
|
||||||
return datetime.strptime(s.strip(), fmt).strftime("%Y-%m-%d")
|
return datetime.strptime(s.strip(), fmt).strftime("%Y-%m-%d")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
if month_only:
|
||||||
|
for fmt in ("%b %Y", "%B %Y"):
|
||||||
|
try:
|
||||||
|
return datetime.strptime(s.strip(), fmt).strftime("%Y-%m-%d")
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
@@ -429,6 +461,29 @@ def _calendar_events(venues: dict, deadlines: dict, base_path: str = "") -> list
|
|||||||
if location:
|
if location:
|
||||||
ev["extendedProps"] = {"location": location}
|
ev["extendedProps"] = {"location": location}
|
||||||
events.append(ev)
|
events.append(ev)
|
||||||
|
|
||||||
|
# Journal special issue deadlines — one purple series, distinct from conferences
|
||||||
|
journal_color = "#7b2cbf"
|
||||||
|
for journal in venues.get("journals") or []:
|
||||||
|
acronym = journal.get("acronym", "")
|
||||||
|
url = f"{base_path}/venues/journals/{acronym.lower()}/"
|
||||||
|
for si in journal.get("special_issues") or []:
|
||||||
|
si_title = si.get("title", "Special Issue")
|
||||||
|
cfp_url = si.get("cfp_url", "")
|
||||||
|
for field, label in [
|
||||||
|
("abstract_deadline", "abstract deadline"),
|
||||||
|
("submission_deadline", "paper deadline"),
|
||||||
|
("notification", "notification"),
|
||||||
|
]:
|
||||||
|
# Notifications are often month-only ('Jan 2027'); deadlines are not.
|
||||||
|
iso = _parse_date(si.get(field) or "", month_only=(field == "notification"))
|
||||||
|
if iso:
|
||||||
|
ev = {"title": f"{acronym} SI — {si_title} — {label}",
|
||||||
|
"start": iso, "url": url, "color": journal_color,
|
||||||
|
"allDay": True}
|
||||||
|
if cfp_url:
|
||||||
|
ev["extendedProps"] = {"cfp_url": cfp_url}
|
||||||
|
events.append(ev)
|
||||||
return events
|
return events
|
||||||
|
|
||||||
|
|
||||||
@@ -441,7 +496,9 @@ def _calendar_body(venues: dict, icore: dict, deadlines: dict, base_path: str =
|
|||||||
pass
|
pass
|
||||||
return datetime.max
|
return datetime.max
|
||||||
|
|
||||||
rows = []
|
lines: list[str] = []
|
||||||
|
|
||||||
|
conf_rows = []
|
||||||
for conf in venues.get("conferences") or []:
|
for conf in venues.get("conferences") or []:
|
||||||
acronym = conf.get("acronym", "")
|
acronym = conf.get("acronym", "")
|
||||||
rank = icore.get(acronym.upper(), "—") or "—"
|
rank = icore.get(acronym.upper(), "—") or "—"
|
||||||
@@ -451,24 +508,57 @@ def _calendar_body(venues: dict, icore: dict, deadlines: dict, base_path: str =
|
|||||||
notif = dl_data.get("notification") or ""
|
notif = dl_data.get("notification") or ""
|
||||||
event = dl_data.get("event_dates") or "—"
|
event = dl_data.get("event_dates") or "—"
|
||||||
location = dl_data.get("location") or ""
|
location = dl_data.get("location") or ""
|
||||||
rows.append((acronym, abstract, paper, notif, event, location, rank))
|
conf_rows.append((acronym, conf.get("full_name", ""), abstract, paper,
|
||||||
|
notif, event, location, rank))
|
||||||
|
|
||||||
rows.sort(key=lambda r: (parse_deadline(r[2]), r[0]))
|
conf_rows.sort(key=lambda r: (parse_deadline(r[3]), r[0]))
|
||||||
|
|
||||||
lines = [
|
lines += [
|
||||||
"\n| Conference | Abstract | Paper deadline | Notification | Event dates | Location | ICORE |",
|
"\n## Conference Deadlines\n",
|
||||||
"|---|---|---|---|---|---|---|",
|
"| Venue | Name | Abstract | Paper deadline | Notification | Event dates | Location | ICORE |",
|
||||||
|
"|---|---|---|---|---|---|---|---|",
|
||||||
]
|
]
|
||||||
for acronym, abstract, paper, notif, event, location, rank in rows:
|
for acronym, full_name, abstract, paper, notif, event, location, rank in conf_rows:
|
||||||
abs_cell = abstract if (abstract and abstract != paper) else ""
|
abs_cell = abstract if (abstract and abstract != paper) else ""
|
||||||
|
link = f"[{acronym}]({base_path}/venues/conferences/{acronym.lower()}/)"
|
||||||
lines.append(
|
lines.append(
|
||||||
f"| [{acronym}]({base_path}/venues/conferences/{acronym.lower()}/) "
|
f"| {link} | {full_name} | {abs_cell} | {paper} | {notif} "
|
||||||
f"| {abs_cell} | {paper} | {notif} | {event} | {location} | {rank} |"
|
f"| {event} | {location} | {rank} |"
|
||||||
|
)
|
||||||
|
|
||||||
|
si_rows = []
|
||||||
|
for journal in venues.get("journals") or []:
|
||||||
|
acronym = journal.get("acronym", "")
|
||||||
|
for si in journal.get("special_issues") or []:
|
||||||
|
abstract = si.get("abstract_deadline") or ""
|
||||||
|
paper = si.get("submission_deadline") or si.get("abstract_deadline") or "TBD"
|
||||||
|
notif = si.get("notification") or ""
|
||||||
|
si_title = si.get("title", "Special Issue")
|
||||||
|
cfp_url = si.get("cfp_url", "")
|
||||||
|
if cfp_url:
|
||||||
|
si_title = f"[{si_title}]({cfp_url})"
|
||||||
|
editors = ", ".join(si.get("guest_editors", [])) or "—"
|
||||||
|
si_rows.append((acronym, si_title, abstract, paper, notif, editors))
|
||||||
|
|
||||||
|
si_rows.sort(key=lambda r: (parse_deadline(r[3]), r[0]))
|
||||||
|
|
||||||
|
if si_rows:
|
||||||
|
lines += [
|
||||||
|
"\n## Journal Special Issues\n",
|
||||||
|
"| Venue | Title | Abstract | Paper deadline | Notification | Guest Editors |",
|
||||||
|
"|---|---|---|---|---|---|",
|
||||||
|
]
|
||||||
|
for acronym, si_title, abstract, paper, notif, editors in si_rows:
|
||||||
|
abs_cell = abstract if (abstract and abstract != paper) else ""
|
||||||
|
link = f"[{acronym}]({base_path}/venues/journals/{acronym.lower()}/)"
|
||||||
|
lines.append(
|
||||||
|
f"| {link} | {si_title} | {abs_cell} | {paper} | {notif} | {editors} |"
|
||||||
)
|
)
|
||||||
|
|
||||||
lines += [
|
lines += [
|
||||||
"",
|
"",
|
||||||
"> Deadlines sourced from conference websites and [WikiCFP](http://www.wikicfp.com/).",
|
"> Deadlines sourced from conference websites, [WikiCFP](http://www.wikicfp.com/), "
|
||||||
|
"and journal special issue CFPs.",
|
||||||
"",
|
"",
|
||||||
]
|
]
|
||||||
return "\n".join(lines) + "\n"
|
return "\n".join(lines) + "\n"
|
||||||
@@ -586,7 +676,8 @@ def gen_journals(venues: dict, scimago: dict[str, dict], root: Path,
|
|||||||
}
|
}
|
||||||
fm = merge_fm(existing_fm, new_fm, PRESERVED_VENUE_FIELDS)
|
fm = merge_fm(existing_fm, new_fm, PRESERVED_VENUE_FIELDS)
|
||||||
digests = (venue_digests or {}).get(acronym)
|
digests = (venue_digests or {}).get(acronym)
|
||||||
write_hugo_file(path, fm, _journal_body(fm, digests, base_path))
|
write_hugo_file(path, fm, _journal_body(fm, digests, base_path,
|
||||||
|
journal.get("special_issues")))
|
||||||
count += 1
|
count += 1
|
||||||
print(f" {path.relative_to(root.parent)}", file=sys.stderr)
|
print(f" {path.relative_to(root.parent)}", file=sys.stderr)
|
||||||
return count
|
return count
|
||||||
|
|||||||
Reference in New Issue
Block a user