conference-agent 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- conference_agent-0.1.0/PKG-INFO +145 -0
- conference_agent-0.1.0/README.md +110 -0
- conference_agent-0.1.0/conference_agent/__init__.py +11 -0
- conference_agent-0.1.0/conference_agent/__main__.py +7 -0
- conference_agent-0.1.0/conference_agent/airports.py +679 -0
- conference_agent-0.1.0/conference_agent/calendar_sync.py +301 -0
- conference_agent-0.1.0/conference_agent/cli.py +1765 -0
- conference_agent-0.1.0/conference_agent/config.py +162 -0
- conference_agent-0.1.0/conference_agent/database.py +1777 -0
- conference_agent-0.1.0/conference_agent/deadline_time.py +282 -0
- conference_agent-0.1.0/conference_agent/discover.py +1012 -0
- conference_agent-0.1.0/conference_agent/live.py +145 -0
- conference_agent-0.1.0/conference_agent/models.py +667 -0
- conference_agent-0.1.0/conference_agent/notify.py +82 -0
- conference_agent-0.1.0/conference_agent/page_watch.py +211 -0
- conference_agent-0.1.0/conference_agent/refresh.py +579 -0
- conference_agent-0.1.0/conference_agent/subscriptions.py +512 -0
- conference_agent-0.1.0/conference_agent/web/__init__.py +0 -0
- conference_agent-0.1.0/conference_agent/web/app.py +399 -0
- conference_agent-0.1.0/conference_agent/web/handler.py +18 -0
- conference_agent-0.1.0/conference_agent/web/nl_query.py +240 -0
- conference_agent-0.1.0/conference_agent/web/refresh_handler.py +85 -0
- conference_agent-0.1.0/conference_agent/web/search.py +980 -0
- conference_agent-0.1.0/conference_agent/web/static/add.html +846 -0
- conference_agent-0.1.0/conference_agent/web/static/calendar.js +421 -0
- conference_agent-0.1.0/conference_agent/web/static/index.html +2067 -0
- conference_agent-0.1.0/conference_agent/web/static/nl_query.js +253 -0
- conference_agent-0.1.0/conference_agent/web/static/search.js +865 -0
- conference_agent-0.1.0/conference_agent.egg-info/PKG-INFO +145 -0
- conference_agent-0.1.0/conference_agent.egg-info/SOURCES.txt +61 -0
- conference_agent-0.1.0/conference_agent.egg-info/dependency_links.txt +1 -0
- conference_agent-0.1.0/conference_agent.egg-info/entry_points.txt +2 -0
- conference_agent-0.1.0/conference_agent.egg-info/requires.txt +21 -0
- conference_agent-0.1.0/conference_agent.egg-info/top_level.txt +1 -0
- conference_agent-0.1.0/pyproject.toml +64 -0
- conference_agent-0.1.0/setup.cfg +4 -0
- conference_agent-0.1.0/tests/test_add_form.py +36 -0
- conference_agent-0.1.0/tests/test_airports.py +435 -0
- conference_agent-0.1.0/tests/test_calendar_ics.py +271 -0
- conference_agent-0.1.0/tests/test_cli_add.py +803 -0
- conference_agent-0.1.0/tests/test_cli_discover.py +120 -0
- conference_agent-0.1.0/tests/test_cli_lookup.py +78 -0
- conference_agent-0.1.0/tests/test_database.py +916 -0
- conference_agent-0.1.0/tests/test_deadline_local_time.py +54 -0
- conference_agent-0.1.0/tests/test_deadline_time.py +367 -0
- conference_agent-0.1.0/tests/test_discover.py +356 -0
- conference_agent-0.1.0/tests/test_extension_input.py +125 -0
- conference_agent-0.1.0/tests/test_ga_injection.py +36 -0
- conference_agent-0.1.0/tests/test_guidelines.py +124 -0
- conference_agent-0.1.0/tests/test_ingest_submissions.py +75 -0
- conference_agent-0.1.0/tests/test_keyword_search.py +151 -0
- conference_agent-0.1.0/tests/test_live.py +109 -0
- conference_agent-0.1.0/tests/test_models.py +274 -0
- conference_agent-0.1.0/tests/test_month_sort.py +92 -0
- conference_agent-0.1.0/tests/test_nl_query.py +158 -0
- conference_agent-0.1.0/tests/test_page_watch.py +106 -0
- conference_agent-0.1.0/tests/test_refresh.py +376 -0
- conference_agent-0.1.0/tests/test_search_parity.py +295 -0
- conference_agent-0.1.0/tests/test_seo_pages.py +77 -0
- conference_agent-0.1.0/tests/test_size_sort.py +75 -0
- conference_agent-0.1.0/tests/test_static_globals.py +45 -0
- conference_agent-0.1.0/tests/test_static_syntax.py +38 -0
- conference_agent-0.1.0/tests/test_subscriptions.py +262 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: conference_agent
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: AI agent that compiles academic/professional conferences into a table and exports them as a calendar feed
|
|
5
|
+
Author: Joseph Rich
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://conferenceagent.vercel.app
|
|
8
|
+
Project-URL: Source, https://github.com/josephrich98/conference-agent
|
|
9
|
+
Keywords: conferences,deadlines,calendar,academic,ical
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: pydantic>=2.0
|
|
18
|
+
Requires-Dist: SQLAlchemy>=2.0
|
|
19
|
+
Requires-Dist: tabulate>=0.9
|
|
20
|
+
Provides-Extra: discover
|
|
21
|
+
Requires-Dist: anthropic>=0.40; extra == "discover"
|
|
22
|
+
Requires-Dist: requests>=2.31; extra == "discover"
|
|
23
|
+
Requires-Dist: beautifulsoup4>=4.12; extra == "discover"
|
|
24
|
+
Provides-Extra: web
|
|
25
|
+
Requires-Dist: fastapi>=0.110; extra == "web"
|
|
26
|
+
Requires-Dist: uvicorn>=0.27; extra == "web"
|
|
27
|
+
Requires-Dist: mangum>=0.17; extra == "web"
|
|
28
|
+
Requires-Dist: pg8000>=1.30; extra == "web"
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
31
|
+
Requires-Dist: ruff>=0.4; extra == "dev"
|
|
32
|
+
Requires-Dist: bandit>=1.7; extra == "dev"
|
|
33
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == "dev"
|
|
34
|
+
Requires-Dist: conference_agent[discover,web]; extra == "dev"
|
|
35
|
+
|
|
36
|
+
# conference_agent
|
|
37
|
+
|
|
38
|
+
Website: https://conferenceagent.vercel.app
|
|
39
|
+
Data: https://conferenceagent.vercel.app/data/conferences.json
|
|
40
|
+
|
|
41
|
+
Dynamic academic conference database with a focus on artificial intelligence, medicine, and genomics.
|
|
42
|
+
|
|
43
|
+
Features:
|
|
44
|
+
- Keep up to date with conference news such as venue announcements, submission deadline posting, and submission deadline extension via calendar events and email reminders
|
|
45
|
+
- Organize conferences by category and subcategory, size, submission deadlines, and more
|
|
46
|
+
- Search with keywords, boolean logic, or plain English
|
|
47
|
+
- Sort conferences by those with the nearest submission deadlines, color-coded by timeframe
|
|
48
|
+
- See deadline times in your current timezone
|
|
49
|
+
- Read each conference's abstract and paper submission guidelines (word or page limits, required structure, templates)
|
|
50
|
+
- View conferences that have a history of extending deadlines
|
|
51
|
+
- Suggest a new conference or an edit to an existing one with the [form](https://conferenceagent.vercel.app/add/)
|
|
52
|
+
- Read any conference or single field as static JSON, with no API key (see [Data access](#data-access-for-scripts-and-ai-agents))
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install conference-agent
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Usage
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
conference-agent lookup # query the database
|
|
64
|
+
conference-agent info # show one conference by id or acronym
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Both commands search the live site's data
|
|
68
|
+
(https://conferenceagent.vercel.app/data/conferences.json, cached in
|
|
69
|
+
`~/.cache/conference-agent`), so they need no local database. The site is
|
|
70
|
+
checked for a newer catalog on the first run of each day; later runs that day
|
|
71
|
+
read the cached copy without a network request (`--refresh` checks again).
|
|
72
|
+
|
|
73
|
+
### conference-agent lookup
|
|
74
|
+
|
|
75
|
+
Query the database for conferences:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
conference-agent lookup --query "subcategory:radiology AND size:massive"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Query the database for conferences, only returning specific columns:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
conference-agent lookup --query "subcategory:radiology AND size:massive" \
|
|
85
|
+
--columns name acronym upcoming_start_date location
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
View the entire database:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
conference-agent lookup
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
View all unique values of a column:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
conference-agent lookup --columns name
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### conference-agent info
|
|
101
|
+
|
|
102
|
+
Show one conference's entire row, found by its id (the unique name slug) or its
|
|
103
|
+
acronym:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
conference-agent info radiological-society-of-north-america-annual-meeting
|
|
107
|
+
conference-agent info RSNA
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Show only specific columns (a single column prints just its value):
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
conference-agent info RSNA name upcoming_start_date upcoming_location
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
If an acronym is shared by several conferences, `info` lists their ids and
|
|
117
|
+
exits with an error; rerun it with the id of the one you want. List ids with
|
|
118
|
+
`conference-agent lookup --columns id`.
|
|
119
|
+
|
|
120
|
+
To add a conference or correct one, use the
|
|
121
|
+
[form](https://conferenceagent.vercel.app/add/); submissions are reviewed
|
|
122
|
+
before they reach the table. Maintaining or self-hosting the database (the
|
|
123
|
+
`add`, `delete`, and `discover` commands, which come only with a development
|
|
124
|
+
install from a clone of the repository, and the scheduled updates) is
|
|
125
|
+
covered in [DEVELOPMENT.md](https://github.com/josephrich98/conference-agent/blob/main/DEVELOPMENT.md).
|
|
126
|
+
|
|
127
|
+
## Data access for scripts and AI agents
|
|
128
|
+
|
|
129
|
+
No API key or server: the live site serves the data as static JSON. The `<id>` is the
|
|
130
|
+
conference name slug; find it
|
|
131
|
+
by searching `acronym`/`name` in the catalog.
|
|
132
|
+
|
|
133
|
+
- One conference (all fields): `https://conferenceagent.vercel.app/c/<id>/data.json`
|
|
134
|
+
- Whole catalog (`conferences` list plus `fields` metadata): `https://conferenceagent.vercel.app/data/conferences.json`
|
|
135
|
+
- Agent guide: `/llms.txt`
|
|
136
|
+
- Calendar feeds: `/c/<id>/calendar.ics`, `/field/<tag>/calendar.ics`, `/calendar.ics`
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# AUA abstract deadline date and time of day
|
|
140
|
+
curl -s https://conferenceagent.vercel.app/c/american-urological-association-annual-meeting/data.json \
|
|
141
|
+
| jq '{date: .upcoming_abstract_deadline, time: .abstract_time, zone: .abstract_timezone}'
|
|
142
|
+
# AUA by acronym (acronyms are not unique; check `name`)
|
|
143
|
+
curl -s https://conferenceagent.vercel.app/data/conferences.json \
|
|
144
|
+
| jq '.conferences[] | select(.acronym=="AUA")'
|
|
145
|
+
```
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# conference_agent
|
|
2
|
+
|
|
3
|
+
Website: https://conferenceagent.vercel.app
|
|
4
|
+
Data: https://conferenceagent.vercel.app/data/conferences.json
|
|
5
|
+
|
|
6
|
+
Dynamic academic conference database with a focus on artificial intelligence, medicine, and genomics.
|
|
7
|
+
|
|
8
|
+
Features:
|
|
9
|
+
- Keep up to date with conference news such as venue announcements, submission deadline posting, and submission deadline extension via calendar events and email reminders
|
|
10
|
+
- Organize conferences by category and subcategory, size, submission deadlines, and more
|
|
11
|
+
- Search with keywords, boolean logic, or plain English
|
|
12
|
+
- Sort conferences by those with the nearest submission deadlines, color-coded by timeframe
|
|
13
|
+
- See deadline times in your current timezone
|
|
14
|
+
- Read each conference's abstract and paper submission guidelines (word or page limits, required structure, templates)
|
|
15
|
+
- View conferences that have a history of extending deadlines
|
|
16
|
+
- Suggest a new conference or an edit to an existing one with the [form](https://conferenceagent.vercel.app/add/)
|
|
17
|
+
- Read any conference or single field as static JSON, with no API key (see [Data access](#data-access-for-scripts-and-ai-agents))
|
|
18
|
+
|
|
19
|
+
## Install
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install conference-agent
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
conference-agent lookup # query the database
|
|
29
|
+
conference-agent info # show one conference by id or acronym
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Both commands search the live site's data
|
|
33
|
+
(https://conferenceagent.vercel.app/data/conferences.json, cached in
|
|
34
|
+
`~/.cache/conference-agent`), so they need no local database. The site is
|
|
35
|
+
checked for a newer catalog on the first run of each day; later runs that day
|
|
36
|
+
read the cached copy without a network request (`--refresh` checks again).
|
|
37
|
+
|
|
38
|
+
### conference-agent lookup
|
|
39
|
+
|
|
40
|
+
Query the database for conferences:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
conference-agent lookup --query "subcategory:radiology AND size:massive"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Query the database for conferences, only returning specific columns:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
conference-agent lookup --query "subcategory:radiology AND size:massive" \
|
|
50
|
+
--columns name acronym upcoming_start_date location
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
View the entire database:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
conference-agent lookup
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
View all unique values of a column:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
conference-agent lookup --columns name
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### conference-agent info
|
|
66
|
+
|
|
67
|
+
Show one conference's entire row, found by its id (the unique name slug) or its
|
|
68
|
+
acronym:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
conference-agent info radiological-society-of-north-america-annual-meeting
|
|
72
|
+
conference-agent info RSNA
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Show only specific columns (a single column prints just its value):
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
conference-agent info RSNA name upcoming_start_date upcoming_location
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
If an acronym is shared by several conferences, `info` lists their ids and
|
|
82
|
+
exits with an error; rerun it with the id of the one you want. List ids with
|
|
83
|
+
`conference-agent lookup --columns id`.
|
|
84
|
+
|
|
85
|
+
To add a conference or correct one, use the
|
|
86
|
+
[form](https://conferenceagent.vercel.app/add/); submissions are reviewed
|
|
87
|
+
before they reach the table. Maintaining or self-hosting the database (the
|
|
88
|
+
`add`, `delete`, and `discover` commands, which come only with a development
|
|
89
|
+
install from a clone of the repository, and the scheduled updates) is
|
|
90
|
+
covered in [DEVELOPMENT.md](https://github.com/josephrich98/conference-agent/blob/main/DEVELOPMENT.md).
|
|
91
|
+
|
|
92
|
+
## Data access for scripts and AI agents
|
|
93
|
+
|
|
94
|
+
No API key or server: the live site serves the data as static JSON. The `<id>` is the
|
|
95
|
+
conference name slug; find it
|
|
96
|
+
by searching `acronym`/`name` in the catalog.
|
|
97
|
+
|
|
98
|
+
- One conference (all fields): `https://conferenceagent.vercel.app/c/<id>/data.json`
|
|
99
|
+
- Whole catalog (`conferences` list plus `fields` metadata): `https://conferenceagent.vercel.app/data/conferences.json`
|
|
100
|
+
- Agent guide: `/llms.txt`
|
|
101
|
+
- Calendar feeds: `/c/<id>/calendar.ics`, `/field/<tag>/calendar.ics`, `/calendar.ics`
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# AUA abstract deadline date and time of day
|
|
105
|
+
curl -s https://conferenceagent.vercel.app/c/american-urological-association-annual-meeting/data.json \
|
|
106
|
+
| jq '{date: .upcoming_abstract_deadline, time: .abstract_time, zone: .abstract_timezone}'
|
|
107
|
+
# AUA by acronym (acronyms are not unique; check `name`)
|
|
108
|
+
curl -s https://conferenceagent.vercel.app/data/conferences.json \
|
|
109
|
+
| jq '.conferences[] | select(.acronym=="AUA")'
|
|
110
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""conference_agent — compile conferences into a table and sync to Google Calendar.
|
|
2
|
+
|
|
3
|
+
The public surface is intentionally small while the project is scaffolded. As
|
|
4
|
+
modules are implemented, re-export the key entry points here.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from conference_agent.models import Conference, ConferenceSize, RemoteOption
|
|
8
|
+
|
|
9
|
+
__all__ = ["Conference", "ConferenceSize", "RemoteOption"]
|
|
10
|
+
|
|
11
|
+
__version__ = "0.1.0"
|