-
Notifications
You must be signed in to change notification settings - Fork 4
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
Update to Python 3.11, upgrade to SQLAlchemy 2.0 and Flask 2.4, refactor DB code #3446
Conversation
Jes, kiitos. Nyt korjattu. Vanha SQLAlchemy käyttäytyi vähän oudosti siten, että db.session.query(TranslationService).all() palauttaa
palauttaisi Päivityksen myötä uusi SQLAlchemy antaa mahdollisuuden määrittää, miten tulokset palautetaan. Eli nyt run_sql(select(TranslationService.service_name)).scalars().all() palauttaa aina yksinkertaisimman listan, eli Tässä tapauksessa koodiin jäi typo, joka sai polun palauttamaan jokaisen kääntäjän nimen ensimmäisen kirjaimen. Nyt on tämä korjattu :) |
ba3cca9
to
4c4c072
Compare
Jätän Jäljelle jää siis vaan testaaminen https://timdevs02.it.jyu.fi:ssä. |
91d1c3a
to
4bb3a54
Compare
1b3398b
to
48a7bce
Compare
Pastean tähän oman listan asioista, jotka ovat vielä testaamatta ennen mergetystä:
|
38e6a27
to
dce02fd
Compare
Nopeasti lokaalisti testattuna velppaus ja velppiryhmät näyttäis toimivan ok. Huomasin pari pientä bugia, mutta ne taitaa olla jo aikaisemmin olemassa olleita. |
* Mark relationship overlaps * Remove TimDb class as unused and unsupported
The API is used by SQLAlchemy 2.0 as the primary approach to querying
Based on the recommendations of SQLAlchemy, selectin loading should be preferred over joined loading for all relationships where there is a chance of database duplicating the rows.
Instead of using references like db.relationship or db.Index, this commit refactors to use directly SQA's API for brevity and better typing. db.Model is replaced by TIM's own DbModel that inherits DeclarativeBase. This allows future-proof any behaviour changes to SQA or SQA-Flask
This commit adds a run_sql helper which can be used to execute SQL queries. All current uses of basic SQL execution are replaces to use run_sql instead
The roundup seems to be introduced by Python 3.11. Now, all answers are automatically rounded to remove potential floating point round-off error.
e9c485e
to
3cfb3ef
Compare
Kaikki osat ovat nyt testattu. Katson PRn koodin vielä läpi, mutta lähtökohtaisesti nyt on oikea aika mergetä se. Laitan ilmoituksen päivityksestä tänään yöllä, sillä uskon ehtiväni tarkastaa toimivuuden ennen sitä. |
21f1305
to
0d8a617
Compare
Tämä PR päivittää TIMin palvelinpuolen käyttämään Python 3.11 ja uusimpia Python-kirjastoja.
PR:n merkittävin muutos on SQLAlchemy-kirjaston päivittäminen versioon 2.0, joka merkittävästi muuttaa SQL-kyselyjen syntaksia.
Olennaisimmat muutokset:
Otettu käyttöön Python 3.11, joka nopeuttaa Python-koodia 10-60 %
Kaikki tietokantakyselyt on muutettu käyttämään SQLAlchemy:n Select-rajapintaa. Esimerkiksi
muuttuu eksplisiittiseksi SQL-kyselyn ajamiseksi:
jossa
select(User)
vastaa siisSELECT * FROM useraccount
-kyselyä..scalars().all()
ovat valinnaiset apufunktiot, jolla tietokannan tuloksesta tuotetaan lista.Kaikki tietokantamallit muutettu vahvasti tyypitetyiksi käyttäen uutta
Mapped
-tyyppiäPäivitetty käyttämään PostgreSQL 15, mikä tuo joitain nopeutuksia tietokantahakuun
csplugin nyt tukee Python 3.11
Selkeytetty testien toimintaa, mikä on esiaste siirtymiseksi pytest-testauskirjaston käyttöön
Muutoksien myötä palvelinpuolella kaikki kirjastot voidaan päivittää. SQLAlchemy oli tähän mennessä suurin blokki, koska SQLAlchemy-Flask ja muut apukirjastot alkoivat vaatia sitä.
Testaus
Tämä PR pääsee yksikkötestit läpi, mutta kaikkia ominaisuuksia ei ole täysin testattu. On siis olennaista, että mahdollisimman moni voisi testata TIMia. Laitoin testin timdevs02:een
https://timdevs02.it.jyu.fi/
Testattavaa on kaikki mahdolliset dokummentit ja ominaisuudet.
TODOt
Vielä korjattavaa ennen mergeä:
[ ]Jätetään myöhemmpään korjaukseenDynamicMapped
muuttaminenWriteOnlyMapped