julee 0.1.3__py3-none-any.whl → 0.1.4__py3-none-any.whl

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.
@@ -3,7 +3,7 @@ Unit tests for MemoryDocumentRepository.
3
3
 
4
4
  These tests verify the memory implementation logic without requiring external
5
5
  dependencies. They follow the Clean Architecture testing patterns and verify
6
- idempotency, error handling, and content operations including content_string.
6
+ idempotency, error handling, and content operations including content_bytes.
7
7
  """
8
8
 
9
9
  import io
@@ -46,16 +46,16 @@ def sample_document(sample_content: ContentStream) -> Document:
46
46
  )
47
47
 
48
48
 
49
- class TestMemoryDocumentRepositoryContentString:
50
- """Test content_string functionality."""
49
+ class TestMemoryDocumentRepositoryContentBytes:
50
+ """Test content_bytes functionality."""
51
51
 
52
- async def test_save_document_with_content_string(
52
+ async def test_save_document_with_content_bytes(
53
53
  self, repository: MemoryDocumentRepository
54
54
  ) -> None:
55
- """Test saving document with content_string (small content)."""
55
+ """Test saving document with content_bytes."""
56
56
  content = '{"assembled": "document", "data": "test"}'
57
57
 
58
- # Create document with content_string
58
+ # Create document with content_bytes
59
59
  document = Document(
60
60
  document_id="test-doc-content-string",
61
61
  original_filename="assembled.json",
@@ -63,10 +63,10 @@ class TestMemoryDocumentRepositoryContentString:
63
63
  size_bytes=100, # Will be updated automatically
64
64
  content_multihash="placeholder", # Will be updated automatically
65
65
  status=DocumentStatus.CAPTURED,
66
- content_string=content,
66
+ content_bytes=content,
67
67
  )
68
68
 
69
- # Act - save should convert content_string to ContentStream
69
+ # Act - save should convert content_bytes to ContentStream
70
70
  await repository.save(document)
71
71
 
72
72
  # Assert document was saved successfully
@@ -80,10 +80,10 @@ class TestMemoryDocumentRepositoryContentString:
80
80
  retrieved_content = retrieved.content.read().decode("utf-8")
81
81
  assert retrieved_content == content
82
82
 
83
- async def test_save_document_with_content_string_unicode(
83
+ async def test_save_document_with_content_bytes_unicode(
84
84
  self, repository: MemoryDocumentRepository
85
85
  ) -> None:
86
- """Test saving document with unicode content_string."""
86
+ """Test saving document with unicode content_bytes."""
87
87
  content = '{"title": "测试文档", "emoji": "🚀", "content": "éñ"}'
88
88
 
89
89
  document = Document(
@@ -93,7 +93,7 @@ class TestMemoryDocumentRepositoryContentString:
93
93
  size_bytes=100,
94
94
  content_multihash="placeholder",
95
95
  status=DocumentStatus.CAPTURED,
96
- content_string=content,
96
+ content_bytes=content,
97
97
  )
98
98
 
99
99
  await repository.save(document)
@@ -107,10 +107,10 @@ class TestMemoryDocumentRepositoryContentString:
107
107
  # Note: Empty content test removed because domain model requires
108
108
  # size_bytes > 0
109
109
 
110
- async def test_save_excludes_content_string_from_storage(
110
+ async def test_save_excludes_content_bytes_from_storage(
111
111
  self, repository: MemoryDocumentRepository
112
112
  ) -> None:
113
- """Test that content_string is not stored in memory storage."""
113
+ """Test that content_bytes is not stored in memory storage."""
114
114
  content = '{"test": "data that should not be in storage"}'
115
115
 
116
116
  document = Document(
@@ -120,7 +120,7 @@ class TestMemoryDocumentRepositoryContentString:
120
120
  size_bytes=100,
121
121
  content_multihash="placeholder",
122
122
  status=DocumentStatus.CAPTURED,
123
- content_string=content,
123
+ content_bytes=content,
124
124
  )
125
125
 
126
126
  await repository.save(document)
@@ -129,8 +129,8 @@ class TestMemoryDocumentRepositoryContentString:
129
129
  stored_document = repository.storage_dict.get("test-storage-exclusion")
130
130
  assert stored_document is not None
131
131
 
132
- # Verify content_string is not in stored document
133
- assert stored_document.content_string is None
132
+ # Verify content_bytes is not in stored document
133
+ assert stored_document.content_bytes is None
134
134
 
135
135
  # Verify essential fields are still present
136
136
  assert stored_document.document_id == "test-storage-exclusion"
@@ -195,7 +195,7 @@ class TestMemoryDocumentRepositoryErrorHandling:
195
195
  size_bytes=100,
196
196
  content_multihash="test_hash",
197
197
  status=DocumentStatus.CAPTURED,
198
- content_string="test content",
198
+ content_bytes="test content",
199
199
  )
200
200
 
201
201
  async def test_save_handles_empty_filename(
@@ -210,5 +210,5 @@ class TestMemoryDocumentRepositoryErrorHandling:
210
210
  size_bytes=100,
211
211
  content_multihash="test_hash",
212
212
  status=DocumentStatus.CAPTURED,
213
- content_string="test content",
213
+ content_bytes="test content",
214
214
  )
@@ -175,27 +175,7 @@ class MinioDocumentRepository(DocumentRepository, MinioRepositoryMixin):
175
175
 
176
176
  try:
177
177
  # Handle content_string conversion (only if no content provided)
178
- if document.content_string is not None:
179
- # Convert content_string to ContentStream
180
- assert document.content_string is not None # For MyPy
181
- content_bytes = document.content_string.encode("utf-8")
182
- content_stream = ContentStream(io.BytesIO(content_bytes))
183
-
184
- # Create new document with ContentStream
185
- document = document.model_copy(
186
- update={
187
- "content": content_stream,
188
- "size_bytes": len(content_bytes),
189
- }
190
- )
191
-
192
- self.logger.debug(
193
- "Converted content_string to ContentStream",
194
- extra={
195
- "document_id": document.document_id,
196
- "content_length": len(content_bytes),
197
- },
198
- )
178
+ document = self._normalize_document_content(document)
199
179
 
200
180
  # Store content first and get calculated multihash
201
181
  calculated_multihash = await self._store_content(document)
@@ -449,6 +429,29 @@ class MinioDocumentRepository(DocumentRepository, MinioRepositoryMixin):
449
429
  )
450
430
  raise
451
431
 
432
+ def _normalize_document_content(self, document: Document) -> Document:
433
+ """Ensure document has a ContentStream in content"""
434
+ if document.content is not None:
435
+ return document
436
+
437
+ content_bytes = document.content_bytes
438
+ if content_bytes is not None:
439
+ if isinstance(content_bytes, str):
440
+ content_bytes = content_bytes.encode("utf-8")
441
+
442
+ stream = ContentStream(io.BytesIO(content_bytes))
443
+ size_bytes = len(content_bytes)
444
+ return document.model_copy(
445
+ update={
446
+ "content": stream,
447
+ "size_bytes": size_bytes,
448
+ }
449
+ )
450
+
451
+ raise ValueError(
452
+ f"Document {document.document_id} has no content, content_bytes"
453
+ )
454
+
452
455
  def _calculate_multihash_from_stream(self, content_stream: ContentStream) -> str:
453
456
  """Calculate multihash from content stream."""
454
457
  if not content_stream:
@@ -471,7 +474,7 @@ class MinioDocumentRepository(DocumentRepository, MinioRepositoryMixin):
471
474
 
472
475
  # Serialize metadata (content stream and content_string excluded)
473
476
  metadata_json = document.model_dump_json(
474
- exclude={"content", "content_string"}
477
+ exclude={"content", "content_string", "content_bytes"}
475
478
  ).encode("utf-8")
476
479
 
477
480
  try:
@@ -429,16 +429,16 @@ class TestMinioDocumentRepositoryMultihash:
429
429
  assert len(multihash_result) > 0
430
430
 
431
431
 
432
- class TestMinioDocumentRepositoryContentString:
433
- """Test content_string functionality."""
432
+ class TestMinioDocumentRepositoryContentBytes:
433
+ """Test content_bytes functionality."""
434
434
 
435
- async def test_save_document_with_content_string(
435
+ async def test_save_document_with_content_bytes(
436
436
  self, repository: MinioDocumentRepository
437
437
  ) -> None:
438
- """Test saving document with content_string (small content)."""
438
+ """Test saving document with content_bytes (small content)."""
439
439
  content = '{"assembled": "document", "data": "test"}'
440
440
 
441
- # Create document with content_string
441
+ # Create document with content_bytes
442
442
  document = Document(
443
443
  document_id="test-doc-content-string",
444
444
  original_filename="assembled.json",
@@ -446,27 +446,27 @@ class TestMinioDocumentRepositoryContentString:
446
446
  size_bytes=100, # Will be updated automatically
447
447
  content_multihash="placeholder", # Will be updated automatically
448
448
  status=DocumentStatus.CAPTURED,
449
- content_string=content,
449
+ content_bytes=content,
450
450
  )
451
451
 
452
- # Act - save should convert content_string to ContentStream
452
+ # Act - save should convert content_bytes to ContentStream
453
453
  await repository.save(document)
454
454
 
455
455
  # Assert document was saved successfully
456
456
  retrieved = await repository.get(document.document_id)
457
457
  assert retrieved is not None
458
458
  assert retrieved.content_multihash != "placeholder" # Hash was calculated
459
- assert retrieved.size_bytes == len(content.encode("utf-8"))
459
+ assert retrieved.size_bytes == len(content)
460
460
 
461
461
  # Verify content can be read
462
462
  assert retrieved.content is not None
463
463
  retrieved_content = retrieved.content.read().decode("utf-8")
464
464
  assert retrieved_content == content
465
465
 
466
- async def test_save_document_with_content_string_unicode(
466
+ async def test_save_document_with_content_bytes_unicode(
467
467
  self, repository: MinioDocumentRepository
468
468
  ) -> None:
469
- """Test saving document with unicode content_string."""
469
+ """Test saving document with unicode content_bytes."""
470
470
  content = '{"title": "测试文档", "emoji": "🚀", "content": "éñ"}'
471
471
 
472
472
  document = Document(
@@ -476,7 +476,7 @@ class TestMinioDocumentRepositoryContentString:
476
476
  size_bytes=100,
477
477
  content_multihash="placeholder",
478
478
  status=DocumentStatus.CAPTURED,
479
- content_string=content,
479
+ content_bytes=content,
480
480
  )
481
481
 
482
482
  await repository.save(document)
@@ -490,12 +490,12 @@ class TestMinioDocumentRepositoryContentString:
490
490
  # Note: Empty content test removed because domain model requires
491
491
  # size_bytes > 0
492
492
 
493
- async def test_save_excludes_content_string_from_metadata(
493
+ async def test_save_excludes_content_bytes_from_metadata(
494
494
  self,
495
495
  repository: MinioDocumentRepository,
496
496
  fake_minio_client: FakeMinioClient,
497
497
  ) -> None:
498
- """Test that content_string is not stored in metadata."""
498
+ """Test that content_bytes is not stored in metadata."""
499
499
  content = '{"test": "data that should not be in metadata"}'
500
500
 
501
501
  document = Document(
@@ -505,7 +505,7 @@ class TestMinioDocumentRepositoryContentString:
505
505
  size_bytes=100,
506
506
  content_multihash="placeholder",
507
507
  status=DocumentStatus.CAPTURED,
508
- content_string=content,
508
+ content_bytes=content,
509
509
  )
510
510
 
511
511
  await repository.save(document)
@@ -521,8 +521,8 @@ class TestMinioDocumentRepositoryContentString:
521
521
 
522
522
  metadata_dict = json.loads(metadata_json)
523
523
 
524
- # Verify content_string is not in stored metadata
525
- assert "content_string" not in metadata_dict
524
+ # Verify content_bytes is not in stored metadata
525
+ assert "content_bytes" not in metadata_dict
526
526
  assert "content" not in metadata_dict
527
527
 
528
528
  # Verify essential fields are still present
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: julee
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Julee - Clean architecture for accountable and transparent digital supply chains
5
5
  Author-email: Pyx Industries <chris@pyx.io>
6
6
  License: GPL-3.0
@@ -13,11 +13,10 @@ Classifier: Development Status :: 3 - Alpha
13
13
  Classifier: Intended Audience :: Developers
14
14
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
15
15
  Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
- Requires-Python: >=3.10
19
+ Requires-Python: >=3.11
21
20
  Description-Content-Type: text/markdown
22
21
  License-File: LICENSE
23
22
  Requires-Dist: fastapi>=0.100.0
@@ -20,7 +20,7 @@ julee/api/tests/test_dependencies.py,sha256=BpMGWilh9wbWW4aYuu_Agw7LL7YjfLVGqnIo
20
20
  julee/api/tests/test_requests.py,sha256=JxiSL38VDoo-6pdoWy9iJrXWbTJa18enoN5jI79COcE,9877
21
21
  julee/api/tests/routers/__init__.py,sha256=IawydYDi3sIBEPE6vyX8r_UBxUKc6NDh_UFL2kqdbqM,634
22
22
  julee/api/tests/routers/test_assembly_specifications.py,sha256=3puq2f4l1OwLxEBbzstNaJ6e-t3iKABsrIlI29i0okQ,27462
23
- julee/api/tests/routers/test_documents.py,sha256=v6QaYOimLsxu7qu-UxxdecX3jz5392q1yJHP6NrTLRY,10726
23
+ julee/api/tests/routers/test_documents.py,sha256=6LlFvwRUJOqkPv1f7laRVzMz7k5VmH5J7xi-tqE9bw8,10720
24
24
  julee/api/tests/routers/test_knowledge_service_configs.py,sha256=EO2Ngfrd0oQvUKVrbxQ7T5lvfG5eBXcfQ9NDvsJks3g,7848
25
25
  julee/api/tests/routers/test_knowledge_service_queries.py,sha256=m-uqPQQQxX0cEx3NVNt-xdgjjSXhinAGZnJVZQIrFK0,26191
26
26
  julee/api/tests/routers/test_system.py,sha256=xoOdf0Lt8PO212x4GpM8B5gAyTFbjdjcg5q8sHbC1cA,6287
@@ -49,16 +49,16 @@ julee/contrib/polling/tests/unit/infrastructure/services/polling/__init__.py,sha
49
49
  julee/contrib/polling/tests/unit/infrastructure/services/polling/http/__init__.py,sha256=OVMmGLJ7KEmvKeoDakizgFXSi-Z4QvHFh4B0CINbGSM,283
50
50
  julee/contrib/polling/tests/unit/infrastructure/services/polling/http/test_http_poller_service.py,sha256=4B-CTyeHVYRAv-TmG9igSk_ifQeZNYNDeF8uPRz-bHk,6212
51
51
  julee/docs/__init__.py,sha256=wknBFq8RF9S1M-oU-S1sw3UWQsmZSjq5Oj7HCCh1AHg,169
52
- julee/docs/sphinx_hcd/__init__.py,sha256=W2uHpBQmyF4oaylidDv41S1ggUpyOkzJPZXSurXII9o,2480
53
- julee/docs/sphinx_hcd/accelerators.py,sha256=n14PPjVLCm0mSQ3VMCaVEEMaVBGoI0_Au4lip8SdBnU,37358
54
- julee/docs/sphinx_hcd/apps.py,sha256=Fwd5pWae_VRMHcBPa9ALy17RCExoXw-mmkuQbTTevmI,15932
55
- julee/docs/sphinx_hcd/config.py,sha256=VisFQ05iDU8Qq2AbXuu8aiMGBXQ-cIlWO7d9is8H_pc,4159
56
- julee/docs/sphinx_hcd/epics.py,sha256=80j2NpFIzO5C0o-lZq5oJKb9MsdNgUcUxjd4wnRWSmA,13879
57
- julee/docs/sphinx_hcd/integrations.py,sha256=9LU5cWaHLaS2QJmv9vFebWFH2hPNWQz4-oMcAYQ9RYw,9796
58
- julee/docs/sphinx_hcd/journeys.py,sha256=cfZFp0fjYnC-WS9yY1yiBizELMSbNU90_vgXz4Bd5Gs,26472
59
- julee/docs/sphinx_hcd/personas.py,sha256=QDoFAFC5vxXCnmnm8M-WZDvMHPRuHXOqYwUv4g32PnQ,13690
60
- julee/docs/sphinx_hcd/stories.py,sha256=1iku_hFKSVap-O3uGKunZJwoPameMlR6wC4ssCyiUhI,31913
61
- julee/docs/sphinx_hcd/utils.py,sha256=kiLVN0BgXZTEUqWvXD9oAd5KPJo1t_uVuKvZNbjNAbg,4403
52
+ julee/docs/sphinx_hcd/__init__.py,sha256=mpEbmaDGoT74LGDS9wCEakov2mzagpFvWGp6TDDJegA,2378
53
+ julee/docs/sphinx_hcd/accelerators.py,sha256=fNrP9ztTbNjAe0sib23RnkkEuxk3cBkb8lfMojtqz0M,38759
54
+ julee/docs/sphinx_hcd/apps.py,sha256=lNHVJrF-OQ4c6VTv4MZn2b3ewcmSW3IvvgZyUD1HDwk,15974
55
+ julee/docs/sphinx_hcd/config.py,sha256=ilxLjnrG7oLgbSSUL90biFj7xxohgij4hlEfYSjIX0A,4159
56
+ julee/docs/sphinx_hcd/epics.py,sha256=anZXSrvWTzD6SU1fzBioMxZccIjym0TDmppN_eOVCN8,13894
57
+ julee/docs/sphinx_hcd/integrations.py,sha256=3baWEph9uYMipeWrPywmeRMko8LdkQx-LFQvkVcoJ08,9796
58
+ julee/docs/sphinx_hcd/journeys.py,sha256=abmd9kplnsy3gB209Iq_tFOseABkPJU4MGYEAHCSjhY,26582
59
+ julee/docs/sphinx_hcd/personas.py,sha256=V4l6-31KgkDe-TEY0iDEe_TBI3VlFQJyZgAc6m8GKNQ,13662
60
+ julee/docs/sphinx_hcd/stories.py,sha256=cFiNGDlpOE6wNEjZowzlmaGc_bK6xJjzYed9aIQFZLY,32233
61
+ julee/docs/sphinx_hcd/utils.py,sha256=lkmyQShHWLoU6nwxs4PS5pxn_jjsRWVeAexizR46PhA,4488
62
62
  julee/domain/__init__.py,sha256=UWEUgtMguDCCsRbTQtsdkaR8-PBei9YI9tn46FtDLe8,774
63
63
  julee/domain/models/__init__.py,sha256=HQYop2b0QjroxFHskoX4lcuMVIFRj8jteUI-P9TTze4,1230
64
64
  julee/domain/models/assembly/__init__.py,sha256=3bivk26_gmKFUhoUMHumsFHRrXyhgv0ClTxyBPWr9B0,494
@@ -78,10 +78,10 @@ julee/domain/models/custom_fields/content_stream.py,sha256=DRpGjMSUuUwOzbJW-_pVy
78
78
  julee/domain/models/custom_fields/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
79
  julee/domain/models/custom_fields/tests/test_custom_fields.py,sha256=1x-MH3FFgC5Ltw7tTqvvWpb1ZnsoRb7BtJ-p6EcdZuQ,1936
80
80
  julee/domain/models/document/__init__.py,sha256=DJr8HKqB47AiJ5YIrTf3E-mpFYiKLLOZPEN8qcAJPWI,469
81
- julee/domain/models/document/document.py,sha256=xxKfBRdz0-lL-YFS0LN9ba3mGJUoBUq8linpJ5PpI6w,5640
81
+ julee/domain/models/document/document.py,sha256=DgQNP_7alH3qHIhOS77Cx_JvTxZwTLtVuMrU4N5ztAU,5079
82
82
  julee/domain/models/document/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  julee/domain/models/document/tests/factories.py,sha256=4sgVAOXInPO-RnT4ChO4zWWB0cAF9JFwYA50j692Ir0,2457
84
- julee/domain/models/document/tests/test_document.py,sha256=AVImfTZgLceUupEs64gEHwzRO9BGXp0wRyinntbNg98,9830
84
+ julee/domain/models/document/tests/test_document.py,sha256=hIufVemhkA-s403xQsJsyB6mTkcq6a8M0za1pLQ_ItY,9093
85
85
  julee/domain/models/knowledge_service_config/__init__.py,sha256=5qYB-nGcVp6CIP7V85hzsQqvBg3HAq5H_p9hPQ5YqGM,431
86
86
  julee/domain/models/knowledge_service_config/knowledge_service_config.py,sha256=WAoFtVv60leuWu0pyZrjy46tFD89lCcEHRMshSLnuBU,2945
87
87
  julee/domain/models/policy/__init__.py,sha256=jsmjUb1QHD8T5X1Ri_wJkAQTaRig4B997yb6_ll2uC0,283
@@ -102,38 +102,37 @@ julee/domain/repositories/knowledge_service_query.py,sha256=9qrWMLT9Xxms9Q7fMjBb
102
102
  julee/domain/repositories/policy.py,sha256=-1Miwk_wmblr9QqVb4aZ_ajk9YIwPUXhxfhGG5CTuFQ,1874
103
103
  julee/domain/use_cases/__init__.py,sha256=rKJyunXCHorEyxPfKDEYD27kese53e5spCfFTbDxpOc,534
104
104
  julee/domain/use_cases/decorators.py,sha256=mMlR5ws94frAZEUEjj545cZpwnTimZI6JVpMlGu3EpA,3497
105
- julee/domain/use_cases/extract_assemble_data.py,sha256=2gBgvBAfZuEXeYxROcrXCiUZUzFJUdSiunBQEf0G17g,24979
106
- julee/domain/use_cases/initialize_system_data.py,sha256=ff9iB7Hn4EbJDI0ZZprvrvzyr_XjQtqSDUBHlFE4a8E,29252
105
+ julee/domain/use_cases/extract_assemble_data.py,sha256=D7w63bR-3WXpwDaj2SH_L4ZO-pp4lHWV-K0--xLa7Qs,24946
106
+ julee/domain/use_cases/initialize_system_data.py,sha256=CIYasO96HQMKXh098Gw3r2rerPKsVXRRVLsxnSJnVfo,31330
107
107
  julee/domain/use_cases/validate_document.py,sha256=noLzQp4hSJVAr-hL668ywxe4m7aNv2yuBMZzPgJPpIs,28219
108
108
  julee/domain/use_cases/tests/__init__.py,sha256=xKgoU78i5zK5mlZ2NNfp8nhbnb9fIcNwCTcQD0j9gEw,199
109
109
  julee/domain/use_cases/tests/test_extract_assemble_data.py,sha256=uNcKtzy-u7nwr68wOdDmXLdfw_2p4SA0Lm3czec9mAI,21596
110
110
  julee/domain/use_cases/tests/test_initialize_system_data.py,sha256=6JwxQDNwknyPqtmSugKn2Eq1CA1Y8rFEb44yrN1_SCA,17918
111
111
  julee/domain/use_cases/tests/test_validate_document.py,sha256=_VcGZK98oDzxN0iLP81hIVdjCPbgmjIJwFeBn5MuWZk,50922
112
- julee/fixtures/assembly_specifications.yaml,sha256=ke3KFR3vRoGPMYZ8AmOvgVRY1-pmicCrfEEAov37sIA,2202
113
- julee/fixtures/documents.yaml,sha256=nAI2ReHxoaPdPW2b4IFAWNw5N_1aHgexa_fMMWMr3lw,6389
112
+ julee/fixtures/documents.yaml,sha256=QMPbdMtjvsf08iFuNa4U2Kx7nTIGVpeRMlp-eeW9dY0,4918
114
113
  julee/fixtures/knowledge_service_configs.yaml,sha256=SfJO1SJFzYtF2Y7XTZmhl3d9Eiv2-xMrHKW1kI7NhI0,1378
115
- julee/fixtures/knowledge_service_queries.yaml,sha256=63Mrz083lFBXV94tB40eob5VxuTyKp8ZgN8vk8KcjoY,1706
114
+ julee/fixtures/knowledge_service_queries.yaml,sha256=uYKD24jMIBhHjGaItyDVqtRlHLVeIRCw8XfhNjiMENk,2447
116
115
  julee/maintenance/__init__.py,sha256=tThzvZBQ4bTSiXVfLVuHI2uLQOhZRMfND1ndj26BNu0,65
117
- julee/maintenance/release.py,sha256=tfxEdd2RibsQS9bAbapcbGrKL6Lbsi9X1wcf2KbF11k,5849
116
+ julee/maintenance/release.py,sha256=595Cs7CKSV7jsBVWHE3lZNclDievh8BVw5SP5JbrkAk,7697
118
117
  julee/repositories/__init__.py,sha256=mJpDFYP5f4LBhavYSnC3SnTcWnozMCz7aXje4iB5pyU,571
119
118
  julee/repositories/memory/__init__.py,sha256=w0ibQfMm3HYdFhLXXMPa_aRtbRiG60j2bqmEGdjmOtg,1225
120
119
  julee/repositories/memory/assembly.py,sha256=1XuLtNiVKVg8jqwHxzQPJS-YmLGR0PtTiD_XhoPSUSo,2807
121
120
  julee/repositories/memory/assembly_specification.py,sha256=pPv3nJuAdqkS3wMs220vp_4uu0OMH3EOuMwWQnk-ZNg,4234
122
121
  julee/repositories/memory/base.py,sha256=9FSV9cIgFBfhPqZcUhprDo5QyE9YK-a1m2bnwKX04wQ,7722
123
- julee/repositories/memory/document.py,sha256=ndp82jDsQ_clV4MT_OMPV0z3ie45-gi-IRdLNAJZCRA,5242
122
+ julee/repositories/memory/document.py,sha256=-lcB37q4KIMVL9NxRBq4wq7tuyY7-h4_BI_N62fDSrA,5481
124
123
  julee/repositories/memory/document_policy_validation.py,sha256=vjSAT6tk-V4IbWTKZjUTgTQ15YlR1MAZjbYnGprn8Wo,3715
125
124
  julee/repositories/memory/knowledge_service_config.py,sha256=sG7bHAO2O131k7GD-8RwGrQ3VNyyEZulVIVBps57aAM,4215
126
125
  julee/repositories/memory/knowledge_service_query.py,sha256=0rav6H4caKw-CGM4gsjcwsFba2vjLGJbg7WYg9eB7-Y,3939
127
126
  julee/repositories/memory/policy.py,sha256=UjLCqm4V2hiF5kF2H_5IonNb4jXAQcdJ57jouMWjYns,2874
128
127
  julee/repositories/memory/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
- julee/repositories/memory/tests/test_document.py,sha256=e9LCiPZSxy5tis9-0CYu1LzlhvXoL7nFBrygcsxADp0,7827
128
+ julee/repositories/memory/tests/test_document.py,sha256=Ah0pnC1CuDvjDPilM_rR1dzyCwLGjGZIioUAQJqU__o,7793
130
129
  julee/repositories/memory/tests/test_document_policy_validation.py,sha256=NDQ0DSUA5tDM33ulmZM9fU93GMbYmj6l_9m6G_YrOwg,6210
131
130
  julee/repositories/memory/tests/test_policy.py,sha256=EVi1Zl1mUrkGezjRQGCHQDPK4Loqapg94kAKno72yi8,15840
132
131
  julee/repositories/minio/__init__.py,sha256=KiDxZUJ2Cvq9sD8TM2_SO50uDSsRq7g4cKTbDmYHHxI,1211
133
132
  julee/repositories/minio/assembly.py,sha256=X3KPgzCEH8Z9kaQN2ANYughPPyF8InBV8-fSM7LSA2s,3724
134
133
  julee/repositories/minio/assembly_specification.py,sha256=dnnxxyXteaPjWxsndoo6UIXqjiYmOKI5thMzhQP5ZWo,6393
135
134
  julee/repositories/minio/client.py,sha256=p4NnTCL4FaQwPTrAUUyQztQVfQ2WcLubAGjQPn9Efdc,18365
136
- julee/repositories/minio/document.py,sha256=guI2FZulUA0J9JMc0tZ2iu7Fhbzlsa_q7-YHljY22W4,20039
135
+ julee/repositories/minio/document.py,sha256=A79MT1cKoO7N9Wt3y52JuxgWlNqpNA3jPc9dqiCG60Y,20022
137
136
  julee/repositories/minio/document_policy_validation.py,sha256=960wS15N7P1PyrBGi1QGAzcjfO01PTO-koXrrZeAoHs,4860
138
137
  julee/repositories/minio/knowledge_service_config.py,sha256=IaZlwTXuq4F6efUckUDjKX1gSm6tzBJVQW4COQjnRFA,6714
139
138
  julee/repositories/minio/knowledge_service_query.py,sha256=nSH-UBt_42OgWokEKwpIhLmtBf17ShFA2jf8uUaWK8A,6955
@@ -143,7 +142,7 @@ julee/repositories/minio/tests/fake_client.py,sha256=qyV6ApmVm54e3hPZganteE5n2wa
143
142
  julee/repositories/minio/tests/test_assembly.py,sha256=Sj5qgDgBRZ9gWQZGTC9H81c1LuP7Klq9yi5Wrvs9WvI,13793
144
143
  julee/repositories/minio/tests/test_assembly_specification.py,sha256=wCsd6Mbxwsiju1Pn-OQGBpCAEr-4l2wwW9niVOciUms,15240
145
144
  julee/repositories/minio/tests/test_client_protocol.py,sha256=mLESv_xrEM2A2eRm2GLfrqeMHdrDdMAdgI-pRRF-svk,2310
146
- julee/repositories/minio/tests/test_document.py,sha256=qxXtLvxohEEi1lBtPYIbBjbCTA6Ofxf5Q06OR03_BZk,22208
145
+ julee/repositories/minio/tests/test_document.py,sha256=z806S9Fjyc5lSJQYy7JL0zfcaensqVIh50eYGfdO2OI,22177
147
146
  julee/repositories/minio/tests/test_document_policy_validation.py,sha256=klBc_5dq421I5tN2hIwOgLsfFQ4YnsjDgPb8Ywh74cI,7542
148
147
  julee/repositories/minio/tests/test_knowledge_service_config.py,sha256=SeDPWr0Gmxtu-ytRHTUHfxC38Aii64GvteBDunJziBg,14823
149
148
  julee/repositories/minio/tests/test_knowledge_service_query.py,sha256=tqlS9w9MShaL83PyfQo8xjFL2Kxli6uJqLIE36qdxa8,15331
@@ -190,8 +189,8 @@ julee/util/validation/type_guards.py,sha256=sH9NfnrWAOQnLKQQNpJRdz1ygkt5nTUmKyjV
190
189
  julee/workflows/__init__.py,sha256=sHXZm4EPvsch6IYcJGqGuPJIep8XZQ8XvEju5b34tTs,724
191
190
  julee/workflows/extract_assemble.py,sha256=ZldmLdwwn1LomDJg4gNGYrnY87tiXtU8em3-l_fqLGs,7876
192
191
  julee/workflows/validate_document.py,sha256=Cwl-XgcQWeVCC-cGOAslS1vCjQosiWUi79c2uQfTYNc,8230
193
- julee-0.1.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
194
- julee-0.1.3.dist-info/METADATA,sha256=IAWKnb0s-DFJaxwAHf6jUPl0u-GfXFKvf3_mB2ITqaY,7062
195
- julee-0.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
196
- julee-0.1.3.dist-info/top_level.txt,sha256=woyPXhn9n-aM3oekZ341P1enrjj6nIcTwOxQL32VCLc,6
197
- julee-0.1.3.dist-info/RECORD,,
192
+ julee-0.1.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
193
+ julee-0.1.4.dist-info/METADATA,sha256=2BMROf21mgMvdnWvHOr1YCh5Z8ZVc-llVk7ZrJdMm48,7011
194
+ julee-0.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
195
+ julee-0.1.4.dist-info/top_level.txt,sha256=woyPXhn9n-aM3oekZ341P1enrjj6nIcTwOxQL32VCLc,6
196
+ julee-0.1.4.dist-info/RECORD,,
@@ -1,70 +0,0 @@
1
- assembly_specifications:
2
- - assembly_specification_id: "meeting-minutes-assembly"
3
- name: "Meeting Minutes Assembly"
4
- applicability: "Meeting transcripts from video conferences or in-person meetings that need to be structured into formal meeting minutes"
5
- status: "active"
6
- version: "1.0"
7
- jsonschema:
8
- $schema: "http://json-schema.org/draft-07/schema#"
9
- title: "Meeting Minutes"
10
- type: "object"
11
- properties:
12
- meeting_info:
13
- type: "object"
14
- properties:
15
- title:
16
- type: "string"
17
- date:
18
- type: "string"
19
- format: "date"
20
- start_time:
21
- type: "string"
22
- end_time:
23
- type: "string"
24
- attendees:
25
- type: "array"
26
- items:
27
- type: "object"
28
- properties:
29
- name:
30
- type: "string"
31
- role:
32
- type: "string"
33
- required: ["name", "role"]
34
- required: ["title", "date", "attendees"]
35
- agenda_items:
36
- type: "array"
37
- items:
38
- type: "object"
39
- properties:
40
- topic:
41
- type: "string"
42
- discussion_points:
43
- type: "array"
44
- items:
45
- type: "string"
46
- decisions:
47
- type: "array"
48
- items:
49
- type: "string"
50
- required: ["topic"]
51
- action_items:
52
- type: "array"
53
- items:
54
- type: "object"
55
- properties:
56
- task:
57
- type: "string"
58
- assignee:
59
- type: "string"
60
- due_date:
61
- type: "string"
62
- priority:
63
- type: "string"
64
- enum: ["low", "medium", "high"]
65
- required: ["task", "assignee"]
66
- required: ["meeting_info", "agenda_items"]
67
- knowledge_service_queries:
68
- "/properties/meeting_info": "extract-meeting-info-query"
69
- "/properties/agenda_items": "extract-agenda-items-query"
70
- "/properties/action_items": "extract-action-items-query"
File without changes