welearn-database 1.5.1__tar.gz → 1.5.2__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.
Files changed (48) hide show
  1. {welearn_database-1.5.1 → welearn_database-1.5.2}/PKG-INFO +1 -1
  2. {welearn_database-1.5.1 → welearn_database-1.5.2}/pyproject.toml +1 -1
  3. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/5aad97149044_add_histo_table_for_materialized_views.py +3 -3
  4. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/6d4346fad6f4_view_used_feature_per_session.py +2 -2
  5. welearn_database-1.5.2/welearn_database/alembic/versions/95ffe7afa64c_add_index_idx_welearn_document_keyword_.py +35 -0
  6. welearn_database-1.5.2/welearn_database/alembic/versions/f5e91a5c950d_add_analytic_form.py +67 -0
  7. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/enumeration.py +6 -0
  8. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/models/document_related.py +3 -3
  9. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/models/user_related.py +33 -1
  10. {welearn_database-1.5.1 → welearn_database-1.5.2}/LICENSE +0 -0
  11. {welearn_database-1.5.1 → welearn_database-1.5.2}/README.md +0 -0
  12. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/__init__.py +0 -0
  13. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/README +0 -0
  14. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/env.py +0 -0
  15. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/script.py.mako +0 -0
  16. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/068312e7800c_add_referrer_origin_column_to_user_and_.py +0 -0
  17. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/0e0bc0fca384_doc_qty_per_source.py +0 -0
  18. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/16ff997426d3_remove_error_retrieval_unique_constraint.py +0 -0
  19. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/2ad4895b2674_data_collection.py +0 -0
  20. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/4c7161819e5a_grafana_views.py +0 -0
  21. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/4f5a188dd614_add_main_url_column.py +0 -0
  22. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/4fcbfb7f3145_added_api_key_management_table.py +0 -0
  23. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/5d82613c9aca_context_document.py +0 -0
  24. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/821173cf9c5d_initial_migration.py +0 -0
  25. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/84c42739c17b_create_table_errordataquality.py +0 -0
  26. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/89920abb7ff8_add_category.py +0 -0
  27. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/8b780aea403a_add_university_data.py +0 -0
  28. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/96bba9e4842a_merge_external_id_error_quality.py +0 -0
  29. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/9b4f1da0c1f2_data_collection_for_focus_group.py +0 -0
  30. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/a50a1db3ca2a_add_used_since_column_for_embeddings.py +0 -0
  31. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/b031206324b7_agent_related.py +0 -0
  32. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/b049924f7067_modify_corpus_name_embedding_model_lang_.py +0 -0
  33. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/b84462ca3800_update_grafana_process_state_view.py +0 -0
  34. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/ccdbd708c997_create_column_external_id.py +0 -0
  35. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/e354666f951d_inferred_user.py +0 -0
  36. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/f1ce0ad2845b_add_doi_column_to_document.py +0 -0
  37. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/alembic/versions/f8602200fa99_update_session_view.py +0 -0
  38. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/__init__.py +0 -0
  39. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/details_dict.py +0 -0
  40. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/models/__init__.py +0 -0
  41. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/models/agent_related.py +0 -0
  42. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/models/corpus_related.py +0 -0
  43. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/data/models/grafana.py +0 -0
  44. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/database_utils.py +0 -0
  45. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/exceptions.py +0 -0
  46. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/modules/__init__.py +0 -0
  47. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/modules/text_cleaning.py +0 -0
  48. {welearn_database-1.5.1 → welearn_database-1.5.2}/welearn_database/regular_expression.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: welearn-database
3
- Version: 1.5.1
3
+ Version: 1.5.2
4
4
  Summary: All stuff related to relationnal database from the WeLearn project
5
5
  License: cc-by-sa-nc
6
6
  Author: Théo
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "welearn-database"
3
- version = "1.5.1"
3
+ version = "1.5.2"
4
4
  description = "All stuff related to relationnal database from the WeLearn project"
5
5
  authors = [
6
6
  {name = "Théo",email = "theo.nardin@cri-paris.org"}
@@ -27,7 +27,7 @@ def upgrade() -> None:
27
27
  "id", sa.Uuid(), server_default=text("gen_random_uuid()"), nullable=False
28
28
  ),
29
29
  sa.Column("source_name", sa.String(), nullable=False),
30
- sa.Column("quantity", sa.Integer(), nullable=False),
30
+ sa.Column("count", sa.Integer(), nullable=False),
31
31
  sa.Column(
32
32
  "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False
33
33
  ),
@@ -41,7 +41,7 @@ def upgrade() -> None:
41
41
  "id", sa.Uuid(), server_default=text("gen_random_uuid()"), nullable=False
42
42
  ),
43
43
  sa.Column("source_name", sa.String(), nullable=False),
44
- sa.Column("quantity", sa.Integer(), nullable=False),
44
+ sa.Column("count", sa.Integer(), nullable=False),
45
45
  sa.Column(
46
46
  "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False
47
47
  ),
@@ -54,7 +54,7 @@ def upgrade() -> None:
54
54
  sa.Column(
55
55
  "id", sa.Uuid(), server_default=text("gen_random_uuid()"), nullable=False
56
56
  ),
57
- sa.Column("quantity", sa.Integer(), nullable=False),
57
+ sa.Column("count", sa.Integer(), nullable=False),
58
58
  sa.Column(
59
59
  "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False
60
60
  ),
@@ -31,8 +31,8 @@ VALUES
31
31
  ('/api/v1/qna/chat/answer', 'chat'),
32
32
  ('/api/v1/qna/chat/agent', 'chat'),
33
33
  ('/api/v1/tutor/syllabus', 'syllabus'),
34
- ('/api/v1/user/bookmarks/:document_id', 'bookmark'),
35
- ('/api/v1/user/:user_id/bookmarks/:document_id', 'bookmark')
34
+ ('/api/v1/user/bookmarks/' || ':' || 'document_id', 'bookmark'),
35
+ ('/api/v1/user/' || ':' || 'user_id' || '/bookmarks/' || ':' || 'document_id', 'bookmark')
36
36
  ) AS t(endpoint_name, feature_name)
37
37
  ),
38
38
  session_feature_pair AS (
@@ -0,0 +1,35 @@
1
+ """add_index_idx_welearn_document_keyword_document_id
2
+
3
+ Revision ID: 95ffe7afa64c
4
+ Revises: f5e91a5c950d
5
+ Create Date: 2026-09-16 15:44:06.977345
6
+
7
+ """
8
+
9
+ from typing import Sequence, Union
10
+
11
+ import sqlalchemy as sa
12
+ from alembic import op
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision: str = "95ffe7afa64c"
16
+ down_revision: Union[str, None] = "f5e91a5c950d"
17
+ branch_labels: Union[str, Sequence[str], None] = None
18
+ depends_on: Union[str, Sequence[str], None] = None
19
+
20
+
21
+ def upgrade() -> None:
22
+ op.create_index(
23
+ "idx_welearn_document_keyword_document_id",
24
+ "welearn_document_keyword",
25
+ ["welearn_document_id"],
26
+ schema="document_related",
27
+ )
28
+
29
+
30
+ def downgrade() -> None:
31
+ op.drop_index(
32
+ "idx_welearn_document_keyword_document_id",
33
+ table_name="document_keyword",
34
+ schema="document_related",
35
+ )
@@ -0,0 +1,67 @@
1
+ """add analytic form
2
+
3
+ Revision ID: f5e91a5c950d
4
+ Revises: 6d4346fad6f4
5
+ Create Date: 2026-09-02 16:32:55.188400
6
+
7
+ """
8
+
9
+ from typing import Sequence, Union
10
+
11
+ import sqlalchemy as sa
12
+ from alembic import op
13
+ from sqlalchemy.dialects import postgresql
14
+
15
+ # revision identifiers, used by Alembic.
16
+ revision: str = "f5e91a5c950d"
17
+ down_revision: Union[str, None] = "6d4346fad6f4"
18
+ branch_labels: Union[str, Sequence[str], None] = None
19
+ depends_on: Union[str, Sequence[str], None] = None
20
+
21
+
22
+ def upgrade() -> None:
23
+ op.create_table(
24
+ "analytic_form",
25
+ sa.Column(
26
+ "id", sa.Uuid(), server_default=sa.func.gen_random_uuid(), nullable=False
27
+ ),
28
+ sa.Column("form_name", sa.String(), nullable=False),
29
+ sa.Column("question", sa.String(), nullable=False),
30
+ sa.Column("answer", sa.String(), nullable=False),
31
+ sa.Column(
32
+ "answer_type",
33
+ postgresql.ENUM(
34
+ "text",
35
+ "checkbox",
36
+ "predefined_text",
37
+ name="answer_type",
38
+ schema="user_related",
39
+ ),
40
+ nullable=False,
41
+ ),
42
+ sa.Column("session_id", sa.Uuid(), nullable=False),
43
+ sa.Column(
44
+ "created_at",
45
+ sa.TIMESTAMP(timezone=False),
46
+ nullable=False,
47
+ server_default="NOW()",
48
+ ),
49
+ sa.ForeignKeyConstraint(
50
+ ["session_id"],
51
+ ["user_related.session.id"],
52
+ name="analytic_form_session_id_fkey",
53
+ ),
54
+ sa.PrimaryKeyConstraint("id"),
55
+ schema="user_related",
56
+ )
57
+
58
+
59
+ def downgrade() -> None:
60
+ op.drop_constraint(
61
+ "analytic_form_session_id_fkey",
62
+ "analytic_form",
63
+ schema="user_related",
64
+ type_="foreignkey",
65
+ )
66
+ op.drop_table("analytic_form", schema="user_related")
67
+ op.execute("DROP TYPE IF EXISTS user_related.answer_type")
@@ -43,3 +43,9 @@ class ExternalIdType(StrEnum):
43
43
  class FilterType(StrEnum):
44
44
  SDG = auto()
45
45
  SOURCE = auto()
46
+
47
+
48
+ class QuestionType(StrEnum):
49
+ TEXT = auto()
50
+ CHECKBOX = auto()
51
+ PREDEFINED_TEXT = auto()
@@ -490,7 +490,7 @@ class HistoricalQtyDocumentPerCorpus(Base):
490
490
  nullable=False,
491
491
  )
492
492
  source_name: Mapped[str] = mapped_column()
493
- quantity: Mapped[int]
493
+ count: Mapped[int]
494
494
  created_at: Mapped[datetime] = mapped_column(
495
495
  TIMESTAMP(timezone=False),
496
496
  nullable=False,
@@ -510,7 +510,7 @@ class HistoricalQtyDocumentInQdrantPerCorpus(Base):
510
510
  nullable=False,
511
511
  )
512
512
  source_name: Mapped[str] = mapped_column()
513
- quantity: Mapped[int]
513
+ count: Mapped[int]
514
514
  created_at: Mapped[datetime] = mapped_column(
515
515
  TIMESTAMP(timezone=False),
516
516
  nullable=False,
@@ -529,7 +529,7 @@ class HistoricalQtyDocumentInQdrant(Base):
529
529
  server_default=GEN_RANDOM_UUID,
530
530
  nullable=False,
531
531
  )
532
- quantity: Mapped[int]
532
+ count: Mapped[int]
533
533
  created_at: Mapped[datetime] = mapped_column(
534
534
  TIMESTAMP(timezone=False),
535
535
  nullable=False,
@@ -5,7 +5,7 @@ from sqlalchemy import ForeignKey, func, types
5
5
  from sqlalchemy.dialects.postgresql import ENUM, TIMESTAMP
6
6
  from sqlalchemy.orm import Mapped, mapped_column, relationship
7
7
 
8
- from welearn_database.data.enumeration import DbSchemaEnum, FilterType
8
+ from welearn_database.data.enumeration import DbSchemaEnum, FilterType, QuestionType
9
9
  from welearn_database.data.models.document_related import WeLearnDocument
10
10
 
11
11
  from . import Base
@@ -271,3 +271,35 @@ class FilterUsedInQuery(Base):
271
271
  filter_value: Mapped[str]
272
272
 
273
273
  chat_message: Mapped["ChatMessage"] = relationship()
274
+
275
+
276
+ class AnalyticForm(Base):
277
+ __tablename__ = "analytic_form"
278
+ __table_args__ = {"schema": DbSchemaEnum.USER_RELATED.value}
279
+
280
+ id: Mapped[UUID] = mapped_column(
281
+ types.Uuid, primary_key=True, nullable=False, server_default="gen_random_uuid()"
282
+ )
283
+ form_name: Mapped[str] = mapped_column(nullable=False)
284
+ question: Mapped[str] = mapped_column(nullable=False)
285
+ answer: Mapped[str] = mapped_column(nullable=False)
286
+ answer_type: Mapped[str] = mapped_column(
287
+ ENUM(
288
+ *(e.value.lower() for e in QuestionType),
289
+ name="answer_type",
290
+ schema=DbSchemaEnum.USER_RELATED.value,
291
+ ),
292
+ nullable=False,
293
+ )
294
+ session_id: Mapped[UUID] = mapped_column(
295
+ types.Uuid,
296
+ ForeignKey(f"{DbSchemaEnum.USER_RELATED.value}.session.id"),
297
+ nullable=False,
298
+ )
299
+ created_at: Mapped[datetime] = mapped_column(
300
+ TIMESTAMP(timezone=False),
301
+ nullable=False,
302
+ default=func.localtimestamp(),
303
+ server_default="NOW()",
304
+ )
305
+ session = relationship("Session", foreign_keys=[session_id])