UniNews
University news from Greek and international universities in one place
Loading...
Searching...
No Matches
uninews.database Namespace Reference

Classes

class  Database
 

Functions

str sort_key (Article article, set[tuple[str, str]] known_sources)
 
str search_text (Article article)
 
tuple[str, list] build_where (str|None category, str|None publisher, str|None source, str|None search)
 
str escape_like (str text)
 

Variables

int SCHEMA_VERSION = 1
 
list ARTICLE_COLUMNS = [field.name for field in fields(Article)]
 
str SCHEMA
 
str INSERT_ARTICLE
 

Detailed Description

SQLite storage for articles.

Use it from one thread only (the UI thread). Fetch in a worker, save here.

Function Documentation

◆ build_where()

tuple[str, list] uninews.database.build_where ( str | None  category,
str | None  publisher,
str | None  source,
str | None  search 
)

◆ escape_like()

str uninews.database.escape_like ( str  text)

◆ search_text()

str uninews.database.search_text ( Article  article)

◆ sort_key()

str uninews.database.sort_key ( Article  article,
set[tuple[str, str]]  known_sources 
)
Where an article goes in the newest-first list.

- Has a date: its date.
- No date, source fetched before: fetch time, since it appeared since last refresh.
- No date, first fetch of this source: bottom, since its real age is unknown.

Variable Documentation

◆ ARTICLE_COLUMNS

list uninews.database.ARTICLE_COLUMNS = [field.name for field in fields(Article)]

◆ INSERT_ARTICLE

str uninews.database.INSERT_ARTICLE
Initial value:
1= f"""
2INSERT OR IGNORE INTO articles ({", ".join(ARTICLE_COLUMNS)}, sort_at, search_text)
3SELECT {", ".join("?" * (len(ARTICLE_COLUMNS) + 2))}
4WHERE NOT EXISTS (SELECT 1 FROM removed_links WHERE link = ?)
5"""

◆ SCHEMA

str uninews.database.SCHEMA
Initial value:
1= f"""
2CREATE TABLE articles (
3 id INTEGER PRIMARY KEY AUTOINCREMENT,
4 publisher TEXT NOT NULL,
5 category TEXT NOT NULL,
6 source TEXT NOT NULL,
7 title TEXT NOT NULL,
8 link TEXT NOT NULL UNIQUE,
9 published TEXT,
10 published_at TEXT,
11 summary TEXT NOT NULL,
12 image_url TEXT NOT NULL,
13 fetched_at TEXT NOT NULL,
14 sort_at TEXT NOT NULL, -- see sort_key()
15 search_text TEXT NOT NULL -- lowercase, accent-free copy for search
16);
17
18CREATE INDEX articles_by_date ON articles (sort_at DESC, id DESC);
19CREATE INDEX articles_by_source ON articles (category, publisher, source);
20
21-- Links removed by trim(), so they don't come back as new on the next refresh.
22CREATE TABLE removed_links (
23 link TEXT PRIMARY KEY
24);
25
26PRAGMA user_version = {SCHEMA_VERSION};
27"""

◆ SCHEMA_VERSION

int uninews.database.SCHEMA_VERSION = 1