hipster-philology / pyrrha

A language-independent post-correction app for POS-tagging and lemmatization
https://pyrrha.huma-num.fr
MIT License
27 stars 16 forks source link

Debug postgresql #304

Closed Juliettejns closed 6 months ago

Juliettejns commented 6 months ago

Branche de debug pour la version postgresql de pyrrha. Log des erreurs avant debug:

FAILED tests/test_selenium/test_corpus_init.py::TestCorpusRegistration::test_registration_with_an_existing_name - sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "control_lists_pkey"
DETAIL:  Key (id)=(1) already exists.

[SQL: INSERT INTO control_lists (name, public, parent_id, description, bibliography, language, notes) VALUES (%(name)s, %(public)s, %(parent_id)s, %(description)s, %(bibliography)s, %(language)s, %(notes)s) RETURNING control_lists.id]
[parameters: {'name': 'Français Moderne', 'public': 'public', 'parent_id': None, 'description': 'Une configuration générique pour le français moderne', 'bibliography': None, 'language': 'fre', 'notes': None}]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
FAILED tests/test_selenium/test_dashboard.py::TestDashboard::test_corpora_displayed_same_as_header_items - sqlalchemy.exc.IntegrityError: (psycopg2.errors.ForeignKeyViolation) insert or update on table "favorite" violates foreign key constraint "favorite_corpus_id_fkey"
DETAIL:  Key (corpus_id)=(3) is not present in table "corpus".

[SQL: INSERT INTO favorite (corpus_id, user_id) VALUES (%(corpus_id)s, %(user_id)s)]
[parameters: {'corpus_id': 3, 'user_id': 1}]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
FAILED tests/test_selenium/test_manage_corpus_user.py::TestManageCorpusUser::test_corpus_creator_is_owner - ValueError: Corpus not found FreshNewCorpus
FAILED tests/test_selenium/test_tokens_edit.py::TestTokenEdit::test_delete - selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="token_2_row"]"}
  (Session info: chrome-headless-shell=120.0.6099.216); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Stacktrace:
#0 0x556c77c81f83 <unknown>
#1 0x556c7793acf7 <unknown>
#2 0x556c7798a99e <unknown>
#3 0x556c7798aaa1 <unknown>
#4 0x556c779d5d64 <unknown>
#5 0x556c779b40dd <unknown>
#6 0x556c779d3006 <unknown>
#7 0x556c779b3e53 <unknown>
#8 0x556c7797bdd4 <unknown>
#9 0x556c7797d1de <unknown>
#10 0x556c77c46531 <unknown>
#11 0x556c77c4a455 <unknown>
#12 0x556c77c32f55 <unknown>
#13 0x556c77c4b0ef <unknown>
#14 0x556c77c1699f <unknown>
#15 0x556c77c6f008 <unknown>
#16 0x556c77c6f1d7 <unknown>
#17 0x556c77c81124 <unknown>
#18 0x7fb35dc94ac3 <unknown>
FAILED tests/test_selenium/test_tokens_search_through_fields.py::TestTokensSearchThroughFields::test_search_with_or_operator - AssertionError: False is not true
============ 5 failed, 144 passed, 40 warnings in 519.42s (0:08:39) ============
Error: Process completed with exit code 1.

Traitement de l'erreur 1 (test.registration_with_same_name) en rendant non obligatoire l'ajout d'une control List lors de l'ajout d'un corpus dans le test.

Traitement des erreurs 2 et 3 en autoincrémentant les control_list_id dans la fonction add_control_list située dans app.

Juliettejns commented 6 months ago

A faire: Test4 (test_delete): conserve des foreign key dans la table Token_History qui ont été supprimés de la Table Word_Token. Proposition: rendre non obligatoire cette foreign key. La supprimer et ajouter à la place le nom du token supprimé sur la ligne?

Test5: test recherche avec | (ne fonctionne pas car on recherche sein*, ce qui ne sort pas Seinz. Proposition 1: rendre la recherche case insentitive avec ilike_op si c'est ce que l'on veut tester Proposition 2: Si l'erreur est non voulu et on ne souhaite pas tester la recherche avec case insentitive, changer de mot ou bien enlever Seinz des éléments de tests.

PonteIneptique commented 6 months ago

@Juliettejns Il semble que le SET fasse planter un truc, d'une manière ou d'une autre. À mon avis, il faut transformer le warning en raise, et donc planter le serveur en cas de mauvaise locale.

PonteIneptique commented 6 months ago

Il y a des plantages PSQL que je ne m'explique pas.

PonteIneptique commented 6 months ago

J'ai essayé d'ajouter des with self.app.app_context() mais les runs continuent de casser...

Cf. https://github.com/hipster-philology/pyrrha/blob/05f8a75d5ba3aa5ac779b7adb4b8ef7ee8b04eee/tests/test_selenium/test_corpus_init.py#L127

PonteIneptique commented 6 months ago

@Juliettejns Peux-tu tester voir si les crash psql (sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly) disparaissent en cas de non utilisation du SHOW ? Car je vois rien qui aurait changer sinon.

PonteIneptique commented 6 months ago

Maybe https://github.com/dpgaspar/Flask-AppBuilder/issues/1130

Juliettejns commented 6 months ago
Juliettejns commented 6 months ago

Issues corrigées. Prêt à push si validation