compair-core 0.3.4__tar.gz → 0.3.6__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.

Potentially problematic release.


This version of compair-core might be problematic. Click here for more details.

Files changed (42) hide show
  1. {compair_core-0.3.4/compair_core.egg-info → compair_core-0.3.6}/PKG-INFO +1 -1
  2. {compair_core-0.3.4 → compair_core-0.3.6}/compair/models.py +63 -35
  3. compair_core-0.3.6/compair/utils.py +42 -0
  4. {compair_core-0.3.4 → compair_core-0.3.6/compair_core.egg-info}/PKG-INFO +1 -1
  5. {compair_core-0.3.4 → compair_core-0.3.6}/pyproject.toml +1 -1
  6. compair_core-0.3.4/compair/utils.py +0 -61
  7. {compair_core-0.3.4 → compair_core-0.3.6}/LICENSE +0 -0
  8. {compair_core-0.3.4 → compair_core-0.3.6}/README.md +0 -0
  9. {compair_core-0.3.4 → compair_core-0.3.6}/compair/__init__.py +0 -0
  10. {compair_core-0.3.4 → compair_core-0.3.6}/compair/celery_app.py +0 -0
  11. {compair_core-0.3.4 → compair_core-0.3.6}/compair/default_groups.py +0 -0
  12. {compair_core-0.3.4 → compair_core-0.3.6}/compair/embeddings.py +0 -0
  13. {compair_core-0.3.4 → compair_core-0.3.6}/compair/feedback.py +0 -0
  14. {compair_core-0.3.4 → compair_core-0.3.6}/compair/logger.py +0 -0
  15. {compair_core-0.3.4 → compair_core-0.3.6}/compair/main.py +0 -0
  16. {compair_core-0.3.4 → compair_core-0.3.6}/compair/schema.py +0 -0
  17. {compair_core-0.3.4 → compair_core-0.3.6}/compair/tasks.py +0 -0
  18. {compair_core-0.3.4 → compair_core-0.3.6}/compair_core.egg-info/SOURCES.txt +0 -0
  19. {compair_core-0.3.4 → compair_core-0.3.6}/compair_core.egg-info/dependency_links.txt +0 -0
  20. {compair_core-0.3.4 → compair_core-0.3.6}/compair_core.egg-info/requires.txt +0 -0
  21. {compair_core-0.3.4 → compair_core-0.3.6}/compair_core.egg-info/top_level.txt +0 -0
  22. {compair_core-0.3.4 → compair_core-0.3.6}/compair_email/__init__.py +0 -0
  23. {compair_core-0.3.4 → compair_core-0.3.6}/compair_email/email.py +0 -0
  24. {compair_core-0.3.4 → compair_core-0.3.6}/compair_email/email_core.py +0 -0
  25. {compair_core-0.3.4 → compair_core-0.3.6}/compair_email/templates.py +0 -0
  26. {compair_core-0.3.4 → compair_core-0.3.6}/compair_email/templates_core.py +0 -0
  27. {compair_core-0.3.4 → compair_core-0.3.6}/server/__init__.py +0 -0
  28. {compair_core-0.3.4 → compair_core-0.3.6}/server/app.py +0 -0
  29. {compair_core-0.3.4 → compair_core-0.3.6}/server/deps.py +0 -0
  30. {compair_core-0.3.4 → compair_core-0.3.6}/server/local_model/__init__.py +0 -0
  31. {compair_core-0.3.4 → compair_core-0.3.6}/server/local_model/app.py +0 -0
  32. {compair_core-0.3.4 → compair_core-0.3.6}/server/providers/__init__.py +0 -0
  33. {compair_core-0.3.4 → compair_core-0.3.6}/server/providers/console_mailer.py +0 -0
  34. {compair_core-0.3.4 → compair_core-0.3.6}/server/providers/contracts.py +0 -0
  35. {compair_core-0.3.4 → compair_core-0.3.6}/server/providers/local_storage.py +0 -0
  36. {compair_core-0.3.4 → compair_core-0.3.6}/server/providers/noop_analytics.py +0 -0
  37. {compair_core-0.3.4 → compair_core-0.3.6}/server/providers/noop_billing.py +0 -0
  38. {compair_core-0.3.4 → compair_core-0.3.6}/server/providers/noop_ocr.py +0 -0
  39. {compair_core-0.3.4 → compair_core-0.3.6}/server/routers/__init__.py +0 -0
  40. {compair_core-0.3.4 → compair_core-0.3.6}/server/routers/capabilities.py +0 -0
  41. {compair_core-0.3.4 → compair_core-0.3.6}/server/settings.py +0 -0
  42. {compair_core-0.3.4 → compair_core-0.3.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: compair-core
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Summary: Open-source foundation of the Compair collaboration platform.
5
5
  Author: RocketResearch, Inc.
6
6
  License: MIT
@@ -38,7 +38,7 @@ class BaseObject(Base):
38
38
 
39
39
  class User(Base):
40
40
  __tablename__ = "user"
41
- __table_args__ = {"schema": "public"}
41
+
42
42
 
43
43
  user_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
44
44
  username: Mapped[str] = mapped_column(String(128))
@@ -73,6 +73,12 @@ class User(Base):
73
73
  passive_deletes=True,
74
74
  )
75
75
 
76
+ activities = relationship(
77
+ "Activity",
78
+ back_populates="user",
79
+ cascade="all, delete-orphan"
80
+ )
81
+
76
82
  def __init__(
77
83
  self,
78
84
  username: str,
@@ -108,17 +114,17 @@ class User(Base):
108
114
 
109
115
  class Session(Base):
110
116
  __tablename__ = "session"
111
- __table_args__ = {"schema": "public"}
117
+
112
118
 
113
119
  id: Mapped[str] = mapped_column(String(128), primary_key=True, init=True)
114
- user_id: Mapped[str] = mapped_column(ForeignKey("public.user.user_id", ondelete="CASCADE"), index=True)
120
+ user_id: Mapped[str] = mapped_column(ForeignKey("user.user_id", ondelete="CASCADE"), index=True)
115
121
  datetime_created: Mapped[datetime]
116
122
  datetime_valid_until: Mapped[datetime]
117
123
 
118
124
 
119
125
  class Group(BaseObject):
120
126
  __tablename__ = "group"
121
- __table_args__ = {"schema": "public"}
127
+
122
128
 
123
129
  group_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
124
130
  name: Mapped[str] = mapped_column(String(256))
@@ -133,6 +139,12 @@ class Group(BaseObject):
133
139
  documents = relationship("Document", secondary="document_to_group", back_populates="groups")
134
140
  notes = relationship("Note", secondary="note_to_group", back_populates="groups")
135
141
 
142
+ activities = relationship(
143
+ "Activity",
144
+ back_populates="group",
145
+ cascade="all, delete-orphan"
146
+ )
147
+
136
148
  __mapper_args__ = {"primary_key": [group_id]}
137
149
 
138
150
  @property
@@ -150,10 +162,10 @@ class Group(BaseObject):
150
162
 
151
163
  class Administrator(Base):
152
164
  __tablename__ = "administrator"
153
- __table_args__ = {"schema": "public"}
165
+
154
166
 
155
167
  admin_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
156
- user_id: Mapped[str] = mapped_column(ForeignKey("public.user.user_id", ondelete="CASCADE"), index=True)
168
+ user_id: Mapped[str] = mapped_column(ForeignKey("user.user_id", ondelete="CASCADE"), index=True)
157
169
 
158
170
  user = relationship("User")
159
171
  groups = relationship("Group", secondary="admin_to_group", back_populates="admins")
@@ -161,11 +173,11 @@ class Administrator(Base):
161
173
 
162
174
  class JoinRequest(Base):
163
175
  __tablename__ = "join_request"
164
- __table_args__ = {"schema": "public"}
176
+
165
177
 
166
178
  request_id: Mapped[int] = mapped_column(Identity(), primary_key=True, autoincrement=True, init=False)
167
- user_id: Mapped[str] = mapped_column(ForeignKey("public.user.user_id", ondelete="CASCADE"))
168
- group_id: Mapped[str] = mapped_column(ForeignKey("public.group.group_id", ondelete="CASCADE"))
179
+ user_id: Mapped[str] = mapped_column(ForeignKey("user.user_id", ondelete="CASCADE"))
180
+ group_id: Mapped[str] = mapped_column(ForeignKey("group.group_id", ondelete="CASCADE"))
169
181
  datetime_requested: Mapped[datetime] = mapped_column(default=datetime.now(timezone.utc), init=False)
170
182
 
171
183
  user = relationship("User")
@@ -174,11 +186,11 @@ class JoinRequest(Base):
174
186
 
175
187
  class GroupInvitation(Base):
176
188
  __tablename__ = "group_invitation"
177
- __table_args__ = {"schema": "public"}
189
+
178
190
 
179
191
  invitation_id: Mapped[int] = mapped_column(Integer, Identity(), primary_key=True, autoincrement=True, init=False)
180
- group_id: Mapped[str] = mapped_column(ForeignKey("public.group.group_id", ondelete="CASCADE"))
181
- inviter_id: Mapped[str] = mapped_column(ForeignKey("public.user.user_id", ondelete="CASCADE"))
192
+ group_id: Mapped[str] = mapped_column(ForeignKey("group.group_id", ondelete="CASCADE"))
193
+ inviter_id: Mapped[str] = mapped_column(ForeignKey("user.user_id", ondelete="CASCADE"))
182
194
  token: Mapped[str] = mapped_column(String(64), unique=True, nullable=False)
183
195
  email: Mapped[str | None] = mapped_column(String(256), nullable=True)
184
196
  datetime_expiration: Mapped[datetime]
@@ -191,10 +203,10 @@ class GroupInvitation(Base):
191
203
 
192
204
  class Document(BaseObject):
193
205
  __tablename__ = "document"
194
- __table_args__ = {"schema": "public"}
206
+
195
207
 
196
208
  document_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
197
- user_id: Mapped[str] = mapped_column(ForeignKey("public.user.user_id", ondelete="CASCADE"), index=True)
209
+ user_id: Mapped[str] = mapped_column(ForeignKey("user.user_id", ondelete="CASCADE"), index=True)
198
210
  author_id: Mapped[str]
199
211
  title: Mapped[str]
200
212
  content: Mapped[str] = mapped_column(Text)
@@ -230,12 +242,12 @@ class Document(BaseObject):
230
242
 
231
243
  class Note(Base):
232
244
  __tablename__ = "note"
233
- __table_args__ = {"schema": "public"}
245
+
234
246
 
235
247
  note_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
236
- document_id: Mapped[str] = mapped_column(ForeignKey("public.document.document_id", ondelete="CASCADE"), index=True)
237
- author_id: Mapped[str] = mapped_column(ForeignKey("public.user.user_id", ondelete="CASCADE"), index=True)
238
- group_id: Mapped[str | None] = mapped_column(ForeignKey("public.group.group_id", ondelete="CASCADE"), index=True, nullable=True)
248
+ document_id: Mapped[str] = mapped_column(ForeignKey("document.document_id", ondelete="CASCADE"), index=True)
249
+ author_id: Mapped[str] = mapped_column(ForeignKey("user.user_id", ondelete="CASCADE"), index=True)
250
+ group_id: Mapped[str | None] = mapped_column(ForeignKey("group.group_id", ondelete="CASCADE"), index=True, nullable=True)
239
251
  content: Mapped[str] = mapped_column(Text)
240
252
  datetime_created: Mapped[datetime] = mapped_column(default=datetime.now(timezone.utc))
241
253
  embedding = mapped_column(Vector(1536))
@@ -259,13 +271,13 @@ class Note(Base):
259
271
 
260
272
  class Chunk(Base):
261
273
  __tablename__ = "chunk"
262
- __table_args__ = {"schema": "public"}
274
+
263
275
 
264
276
  chunk_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
265
277
  hash: Mapped[str] = mapped_column(String(32))
266
278
  content: Mapped[str] = mapped_column(Text)
267
- document_id: Mapped[str | None] = mapped_column(ForeignKey("public.document.document_id", ondelete="CASCADE"), index=True, nullable=True)
268
- note_id: Mapped[str | None] = mapped_column(ForeignKey("public.note.note_id", ondelete="CASCADE"), index=True, nullable=True)
279
+ document_id: Mapped[str | None] = mapped_column(ForeignKey("document.document_id", ondelete="CASCADE"), index=True, nullable=True)
280
+ note_id: Mapped[str | None] = mapped_column(ForeignKey("note.note_id", ondelete="CASCADE"), index=True, nullable=True)
269
281
  chunk_type: Mapped[str] = mapped_column(String(16), default="document")
270
282
  embedding = mapped_column(Vector(1536))
271
283
 
@@ -287,12 +299,12 @@ class Chunk(Base):
287
299
 
288
300
  class Reference(Base):
289
301
  __tablename__ = "reference"
290
- __table_args__ = {"schema": "public"}
302
+
291
303
 
292
304
  reference_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
293
- source_chunk_id: Mapped[str] = mapped_column(ForeignKey("public.chunk.chunk_id", ondelete="CASCADE"), index=True)
294
- reference_document_id: Mapped[str | None] = mapped_column(ForeignKey("public.document.document_id", ondelete="CASCADE"), index=True, nullable=True)
295
- reference_note_id: Mapped[str | None] = mapped_column(ForeignKey("public.note.note_id", ondelete="CASCADE"), index=True, nullable=True)
305
+ source_chunk_id: Mapped[str] = mapped_column(ForeignKey("chunk.chunk_id", ondelete="CASCADE"), index=True)
306
+ reference_document_id: Mapped[str | None] = mapped_column(ForeignKey("document.document_id", ondelete="CASCADE"), index=True, nullable=True)
307
+ reference_note_id: Mapped[str | None] = mapped_column(ForeignKey("note.note_id", ondelete="CASCADE"), index=True, nullable=True)
296
308
  reference_type: Mapped[str] = mapped_column(String(16), default="document")
297
309
 
298
310
  chunk = relationship("Chunk", back_populates="references")
@@ -302,10 +314,10 @@ class Reference(Base):
302
314
 
303
315
  class Feedback(Base):
304
316
  __tablename__ = "feedback"
305
- __table_args__ = {"schema": "public"}
317
+
306
318
 
307
319
  feedback_id: Mapped[str] = mapped_column(String(36), primary_key=True, init=False, default=lambda: str(uuid4()))
308
- source_chunk_id: Mapped[str] = mapped_column(ForeignKey("public.chunk.chunk_id", ondelete="CASCADE"), index=True)
320
+ source_chunk_id: Mapped[str] = mapped_column(ForeignKey("chunk.chunk_id", ondelete="CASCADE"), index=True)
309
321
  feedback: Mapped[str] = mapped_column(Text)
310
322
  model: Mapped[str] = mapped_column(Text)
311
323
  timestamp: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=datetime.now(timezone.utc))
@@ -315,34 +327,50 @@ class Feedback(Base):
315
327
  chunk = relationship("Chunk", back_populates="feedbacks")
316
328
 
317
329
 
330
+ class Activity(Base):
331
+ __tablename__ = "activity"
332
+
333
+ activity_id: Mapped[int] = mapped_column(Identity(), primary_key=True, init=False, autoincrement=True)
334
+ user_id: Mapped[str] = mapped_column(ForeignKey("user.user_id", ondelete="CASCADE"), nullable=False)
335
+ group_id: Mapped[str] = mapped_column(ForeignKey("group.group_id", ondelete="CASCADE"), nullable=False)
336
+ action: Mapped[str] = mapped_column(String(32))
337
+ object_id: Mapped[str] = mapped_column(String(36))
338
+ object_name: Mapped[str] = mapped_column(Text)
339
+ object_type: Mapped[str] = mapped_column(String(32))
340
+ timestamp: Mapped[datetime] = mapped_column(default=datetime.now(timezone.utc))
341
+
342
+ user = relationship("User", back_populates="activities", lazy="joined")
343
+ group = relationship("Group", back_populates="activities")
344
+
345
+
318
346
  user_to_group_table = Table(
319
347
  "user_to_group",
320
348
  Base.metadata,
321
- Column("user_id", ForeignKey("public.user.user_id", ondelete="CASCADE"), primary_key=True),
322
- Column("group_id", ForeignKey("public.group.group_id", ondelete="CASCADE"), primary_key=True),
349
+ Column("user_id", ForeignKey("user.user_id", ondelete="CASCADE"), primary_key=True),
350
+ Column("group_id", ForeignKey("group.group_id", ondelete="CASCADE"), primary_key=True),
323
351
  )
324
352
 
325
353
 
326
354
  admin_to_group_table = Table(
327
355
  "admin_to_group",
328
356
  Base.metadata,
329
- Column("admin_id", ForeignKey("public.administrator.admin_id", ondelete="CASCADE"), primary_key=True),
330
- Column("group_id", ForeignKey("public.group.group_id", ondelete="CASCADE"), primary_key=True),
357
+ Column("admin_id", ForeignKey("administrator.admin_id", ondelete="CASCADE"), primary_key=True),
358
+ Column("group_id", ForeignKey("group.group_id", ondelete="CASCADE"), primary_key=True),
331
359
  )
332
360
 
333
361
 
334
362
  document_to_group_table = Table(
335
363
  "document_to_group",
336
364
  Base.metadata,
337
- Column("document_id", ForeignKey("public.document.document_id", ondelete="CASCADE"), primary_key=True),
338
- Column("group_id", ForeignKey("public.group.group_id", ondelete="CASCADE"), primary_key=True),
365
+ Column("document_id", ForeignKey("document.document_id", ondelete="CASCADE"), primary_key=True),
366
+ Column("group_id", ForeignKey("group.group_id", ondelete="CASCADE"), primary_key=True),
339
367
  )
340
368
 
341
369
  note_to_group_table = Table(
342
370
  "note_to_group",
343
371
  Base.metadata,
344
- Column("note_id", ForeignKey("public.note.note_id", ondelete="CASCADE"), primary_key=True),
345
- Column("group_id", ForeignKey("public.group.group_id", ondelete="CASCADE"), primary_key=True),
372
+ Column("note_id", ForeignKey("note.note_id", ondelete="CASCADE"), primary_key=True),
373
+ Column("group_id", ForeignKey("group.group_id", ondelete="CASCADE"), primary_key=True),
346
374
  )
347
375
 
348
376
 
@@ -0,0 +1,42 @@
1
+ from __future__ import annotations
2
+
3
+ import secrets
4
+ from datetime import datetime, timedelta, timezone
5
+
6
+ from sqlalchemy.orm import Session
7
+
8
+ from compair.models import Activity
9
+
10
+
11
+ def chunk_text(text: str) -> list[str]:
12
+ chunks = text.split("\n\n")
13
+ chunks = [c.strip() for c in chunks]
14
+ return [c for c in chunks if c]
15
+
16
+
17
+ def generate_verification_token() -> tuple[str, datetime]:
18
+ token = secrets.token_urlsafe(32)
19
+ expiration = datetime.now(timezone.utc) + timedelta(hours=24)
20
+ return token, expiration
21
+
22
+
23
+ def log_activity(
24
+ session: Session,
25
+ user_id: str,
26
+ group_id: str,
27
+ action: str,
28
+ object_id: str,
29
+ object_name: str,
30
+ object_type: str,
31
+ ) -> None:
32
+ activity = Activity(
33
+ user_id=user_id,
34
+ group_id=group_id,
35
+ action=action,
36
+ object_id=object_id,
37
+ object_name=object_name,
38
+ object_type=object_type,
39
+ timestamp=datetime.now(timezone.utc),
40
+ )
41
+ session.add(activity)
42
+ session.commit()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: compair-core
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Summary: Open-source foundation of the Compair collaboration platform.
5
5
  Author: RocketResearch, Inc.
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "compair-core"
7
- version = "0.3.4"
7
+ version = "0.3.6"
8
8
  description = "Open-source foundation of the Compair collaboration platform."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -1,61 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import secrets
4
- from datetime import datetime, timedelta, timezone
5
- from typing import Any
6
-
7
- from sqlalchemy.orm import Session
8
-
9
- try:
10
- from compair_cloud.utils import log_activity as cloud_log_activity # type: ignore
11
- except (ImportError, ModuleNotFoundError):
12
- cloud_log_activity = None
13
-
14
-
15
- def chunk_text(text: str) -> list[str]:
16
- chunks = text.split("\n\n")
17
- chunks = [c.strip() for c in chunks]
18
- return [c for c in chunks if c]
19
-
20
-
21
- def generate_verification_token() -> tuple[str, datetime]:
22
- token = secrets.token_urlsafe(32)
23
- expiration = datetime.now(timezone.utc) + timedelta(hours=24)
24
- return token, expiration
25
-
26
-
27
- def log_activity(
28
- session: Session,
29
- user_id: str,
30
- group_id: str,
31
- action: str,
32
- object_id: str,
33
- object_name: str,
34
- object_type: str,
35
- ) -> None:
36
- if cloud_log_activity:
37
- cloud_log_activity(
38
- session=session,
39
- user_id=user_id,
40
- group_id=group_id,
41
- action=action,
42
- object_id=object_id,
43
- object_name=object_name,
44
- object_type=object_type,
45
- )
46
-
47
-
48
- def aggregate_usage_by_user() -> dict[str, Any]:
49
- if cloud_log_activity:
50
- from compair_cloud.utils import aggregate_usage_by_user as cloud_usage # type: ignore
51
-
52
- return cloud_usage()
53
- return {}
54
-
55
-
56
- def aggregate_service_resources() -> dict[str, Any]:
57
- if cloud_log_activity:
58
- from compair_cloud.utils import aggregate_service_resources as cloud_resources # type: ignore
59
-
60
- return cloud_resources()
61
- return {}
File without changes
File without changes
File without changes
File without changes