folio-migration-tools 1.9.0a2__py3-none-any.whl → 1.9.0a4__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.
Files changed (39) hide show
  1. folio_migration_tools/__init__.py +3 -0
  2. folio_migration_tools/__main__.py +16 -6
  3. folio_migration_tools/folder_structure.py +3 -0
  4. folio_migration_tools/library_configuration.py +8 -7
  5. folio_migration_tools/mapper_base.py +26 -17
  6. folio_migration_tools/mapping_file_transformation/holdings_mapper.py +23 -11
  7. folio_migration_tools/mapping_file_transformation/item_mapper.py +13 -11
  8. folio_migration_tools/mapping_file_transformation/mapping_file_mapper_base.py +9 -10
  9. folio_migration_tools/mapping_file_transformation/order_mapper.py +2 -2
  10. folio_migration_tools/mapping_file_transformation/organization_mapper.py +1 -1
  11. folio_migration_tools/mapping_file_transformation/user_mapper.py +6 -4
  12. folio_migration_tools/marc_rules_transformation/conditions.py +23 -7
  13. folio_migration_tools/marc_rules_transformation/holdings_statementsparser.py +21 -11
  14. folio_migration_tools/marc_rules_transformation/marc_file_processor.py +36 -9
  15. folio_migration_tools/marc_rules_transformation/marc_reader_wrapper.py +15 -11
  16. folio_migration_tools/marc_rules_transformation/rules_mapper_authorities.py +7 -5
  17. folio_migration_tools/marc_rules_transformation/rules_mapper_base.py +98 -45
  18. folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py +53 -27
  19. folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py +13 -11
  20. folio_migration_tools/migration_tasks/batch_poster.py +78 -38
  21. folio_migration_tools/migration_tasks/bibs_transformer.py +21 -8
  22. folio_migration_tools/migration_tasks/courses_migrator.py +11 -6
  23. folio_migration_tools/migration_tasks/holdings_csv_transformer.py +22 -16
  24. folio_migration_tools/migration_tasks/holdings_marc_transformer.py +9 -7
  25. folio_migration_tools/migration_tasks/items_transformer.py +13 -10
  26. folio_migration_tools/migration_tasks/loans_migrator.py +10 -9
  27. folio_migration_tools/migration_tasks/manual_fee_fines_transformer.py +13 -9
  28. folio_migration_tools/migration_tasks/migration_task_base.py +18 -18
  29. folio_migration_tools/migration_tasks/orders_transformer.py +14 -10
  30. folio_migration_tools/migration_tasks/organization_transformer.py +12 -8
  31. folio_migration_tools/migration_tasks/requests_migrator.py +8 -5
  32. folio_migration_tools/migration_tasks/reserves_migrator.py +7 -4
  33. folio_migration_tools/migration_tasks/user_transformer.py +46 -17
  34. folio_migration_tools/task_configuration.py +3 -3
  35. folio_migration_tools/translations/en.json +2 -1
  36. {folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/METADATA +6 -5
  37. {folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/RECORD +39 -39
  38. {folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/WHEEL +1 -1
  39. {folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/LICENSE +0 -0
@@ -5,18 +5,19 @@ import os
5
5
  import sys
6
6
  import time
7
7
  from abc import abstractmethod
8
- from datetime import datetime
9
- from datetime import timezone
8
+ from datetime import datetime, timezone
9
+ from genericpath import isfile
10
10
  from pathlib import Path
11
11
 
12
+ import folioclient
12
13
  from folio_uuid.folio_namespaces import FOLIONamespaces
13
14
  from folioclient import FolioClient
14
- from genericpath import isfile
15
15
 
16
- from folio_migration_tools import library_configuration
17
- from folio_migration_tools import task_configuration
18
- from folio_migration_tools.custom_exceptions import TransformationProcessError
19
- from folio_migration_tools.custom_exceptions import TransformationRecordFailedError
16
+ from folio_migration_tools import library_configuration, task_configuration
17
+ from folio_migration_tools.custom_exceptions import (
18
+ TransformationProcessError,
19
+ TransformationRecordFailedError,
20
+ )
20
21
  from folio_migration_tools.extradata_writer import ExtradataWriter
21
22
  from folio_migration_tools.folder_structure import FolderStructure
22
23
  from folio_migration_tools.marc_rules_transformation.marc_file_processor import (
@@ -37,22 +38,20 @@ class MigrationTaskBase:
37
38
  self,
38
39
  library_configuration: library_configuration.LibraryConfiguration,
39
40
  task_configuration: task_configuration.AbstractTaskConfiguration,
41
+ folio_client: folioclient.FolioClient,
40
42
  use_logging: bool = True,
41
43
  ):
42
44
  logging.info("MigrationTaskBase init")
43
45
  self.start_datetime = datetime.now(timezone.utc)
44
46
  self.task_configuration = task_configuration
45
47
  logging.info(self.task_configuration.json(indent=4))
46
- self.folio_client: FolioClient = FolioClient(
47
- library_configuration.okapi_url,
48
- library_configuration.tenant_id,
49
- library_configuration.okapi_username,
50
- library_configuration.okapi_password,
48
+ self.folio_client: FolioClient = folio_client
49
+ self.ecs_tenant_id = (
50
+ task_configuration.ecs_tenant_id or library_configuration.ecs_tenant_id
51
+ )
52
+ self.ecs_tenant_header = (
53
+ {"x-okapi-tenant": self.ecs_tenant_id} if self.ecs_tenant_id else {}
51
54
  )
52
- self.ecs_tenant_id = task_configuration.ecs_tenant_id or library_configuration.ecs_tenant_id
53
- self.ecs_tenant_header = {
54
- "x-okapi-tenant": self.ecs_tenant_id
55
- } if self.ecs_tenant_id else {}
56
55
  self.folio_client.okapi_headers.update(self.ecs_tenant_header)
57
56
  self.folder_structure: FolderStructure = FolderStructure(
58
57
  library_configuration.base_folder,
@@ -191,10 +190,11 @@ class MigrationTaskBase:
191
190
  if debug:
192
191
  logger.setLevel(logging.DEBUG)
193
192
  stream_handler.setLevel(logging.DEBUG)
193
+ logging.getLogger("httpx").setLevel(logging.DEBUG)
194
194
  else:
195
195
  logger.setLevel(logging.INFO)
196
196
  stream_handler.setLevel(logging.INFO)
197
- stream_handler.addFilter(ExcludeLevelFilter(30)) # Loose warnings from pymarc
197
+ stream_handler.addFilter(ExcludeLevelFilter(30)) # Exclude warnings from pymarc
198
198
  stream_handler.setFormatter(formatter)
199
199
  logger.addHandler(stream_handler)
200
200
 
@@ -304,7 +304,7 @@ class MigrationTaskBase:
304
304
  ),
305
305
  )
306
306
  logging.info(
307
- "%s will be used for determinig %s",
307
+ "%s will be used for determining %s",
308
308
  ", ".join(ref_data_map[0].keys()),
309
309
  folio_property_name,
310
310
  )
@@ -4,20 +4,22 @@ import json
4
4
  import logging
5
5
  import sys
6
6
  import time
7
- import i18n
8
7
  from os.path import isfile
9
- from typing import List
10
- from typing import Optional
8
+ from typing import List, Optional
11
9
 
10
+ import i18n
12
11
  from deepdiff import DeepDiff
13
12
  from folio_uuid.folio_namespaces import FOLIONamespaces
14
- from pydantic.main import BaseModel
15
13
 
16
- from folio_migration_tools.custom_exceptions import TransformationProcessError
17
- from folio_migration_tools.custom_exceptions import TransformationRecordFailedError
14
+ from folio_migration_tools.custom_exceptions import (
15
+ TransformationProcessError,
16
+ TransformationRecordFailedError,
17
+ )
18
18
  from folio_migration_tools.helper import Helper
19
- from folio_migration_tools.library_configuration import FileDefinition
20
- from folio_migration_tools.library_configuration import LibraryConfiguration
19
+ from folio_migration_tools.library_configuration import (
20
+ FileDefinition,
21
+ LibraryConfiguration,
22
+ )
21
23
  from folio_migration_tools.mapping_file_transformation.mapping_file_mapper_base import (
22
24
  MappingFileMapperBase,
23
25
  )
@@ -25,13 +27,14 @@ from folio_migration_tools.mapping_file_transformation.order_mapper import (
25
27
  CompositeOrderMapper,
26
28
  )
27
29
  from folio_migration_tools.migration_tasks.migration_task_base import MigrationTaskBase
30
+ from folio_migration_tools.task_configuration import AbstractTaskConfiguration
28
31
 
29
32
  csv.field_size_limit(int(ctypes.c_ulong(-1).value // 2))
30
33
 
31
34
 
32
35
  # Read files and do some work
33
36
  class OrdersTransformer(MigrationTaskBase):
34
- class TaskConfiguration(BaseModel):
37
+ class TaskConfiguration(AbstractTaskConfiguration):
35
38
  name: str
36
39
  migration_task_type: str
37
40
  files: List[FileDefinition]
@@ -53,11 +56,12 @@ class OrdersTransformer(MigrationTaskBase):
53
56
  self,
54
57
  task_config: TaskConfiguration,
55
58
  library_config: LibraryConfiguration,
59
+ folio_client,
56
60
  use_logging: bool = True,
57
61
  ):
58
62
  csv.register_dialect("tsv", delimiter="\t")
59
63
 
60
- super().__init__(library_config, task_config, use_logging)
64
+ super().__init__(library_config, task_config, folio_client, use_logging)
61
65
  self.object_type_name = self.get_object_type().name
62
66
  self.task_config = task_config
63
67
  self.files = self.list_source_files()
@@ -5,19 +5,22 @@ import logging
5
5
  import sys
6
6
  import time
7
7
  import uuid
8
- import i18n
9
8
  from hashlib import sha1
10
9
  from os.path import isfile
11
- from typing import List
12
- from typing import Optional
10
+ from typing import List, Optional
13
11
 
12
+ import i18n
14
13
  from folio_uuid.folio_namespaces import FOLIONamespaces
15
14
 
16
- from folio_migration_tools.custom_exceptions import TransformationProcessError
17
- from folio_migration_tools.custom_exceptions import TransformationRecordFailedError
15
+ from folio_migration_tools.custom_exceptions import (
16
+ TransformationProcessError,
17
+ TransformationRecordFailedError,
18
+ )
18
19
  from folio_migration_tools.helper import Helper
19
- from folio_migration_tools.library_configuration import FileDefinition
20
- from folio_migration_tools.library_configuration import LibraryConfiguration
20
+ from folio_migration_tools.library_configuration import (
21
+ FileDefinition,
22
+ LibraryConfiguration,
23
+ )
21
24
  from folio_migration_tools.mapping_file_transformation.mapping_file_mapper_base import (
22
25
  MappingFileMapperBase,
23
26
  )
@@ -50,11 +53,12 @@ class OrganizationTransformer(MigrationTaskBase):
50
53
  self,
51
54
  task_configuration: TaskConfiguration,
52
55
  library_config: LibraryConfiguration,
56
+ folio_client,
53
57
  use_logging: bool = True,
54
58
  ):
55
59
  csv.register_dialect("tsv", delimiter="\t")
56
60
 
57
- super().__init__(library_config, task_configuration, use_logging)
61
+ super().__init__(library_config, task_configuration, folio_client, use_logging)
58
62
  self.object_type_name = self.get_object_type().name
59
63
  self.task_configuration = task_configuration
60
64
  self.files = self.list_source_files()
@@ -3,17 +3,19 @@ import json
3
3
  import logging
4
4
  import sys
5
5
  import time
6
- import i18n
7
6
  from typing import Optional
8
- from zoneinfo import ZoneInfo
9
7
 
8
+ import i18n
10
9
  from folio_uuid.folio_namespaces import FOLIONamespaces
10
+ from zoneinfo import ZoneInfo
11
11
 
12
12
  from folio_migration_tools.circulation_helper import CirculationHelper
13
13
  from folio_migration_tools.custom_dict import InsensitiveDictReader
14
14
  from folio_migration_tools.helper import Helper
15
- from folio_migration_tools.library_configuration import FileDefinition
16
- from folio_migration_tools.library_configuration import LibraryConfiguration
15
+ from folio_migration_tools.library_configuration import (
16
+ FileDefinition,
17
+ LibraryConfiguration,
18
+ )
17
19
  from folio_migration_tools.migration_report import MigrationReport
18
20
  from folio_migration_tools.migration_tasks.migration_task_base import MigrationTaskBase
19
21
  from folio_migration_tools.task_configuration import AbstractTaskConfiguration
@@ -37,11 +39,12 @@ class RequestsMigrator(MigrationTaskBase):
37
39
  self,
38
40
  task_configuration: TaskConfiguration,
39
41
  library_config: LibraryConfiguration,
42
+ folio_client
40
43
  ):
41
44
  csv.register_dialect("tsv", delimiter="\t")
42
45
  self.migration_report = MigrationReport()
43
46
  self.valid_legacy_requests = []
44
- super().__init__(library_config, task_configuration)
47
+ super().__init__(library_config, task_configuration, folio_client)
45
48
  self.circulation_helper = CirculationHelper(
46
49
  self.folio_client,
47
50
  "",
@@ -4,17 +4,19 @@ import logging
4
4
  import sys
5
5
  import time
6
6
  import traceback
7
- import i18n
8
7
  from typing import Dict
9
8
  from urllib.error import HTTPError
10
9
 
11
10
  import httpx
11
+ import i18n
12
12
  from folio_uuid.folio_namespaces import FOLIONamespaces
13
13
 
14
14
  from folio_migration_tools.custom_dict import InsensitiveDictReader
15
15
  from folio_migration_tools.custom_exceptions import TransformationProcessError
16
- from folio_migration_tools.library_configuration import FileDefinition
17
- from folio_migration_tools.library_configuration import LibraryConfiguration
16
+ from folio_migration_tools.library_configuration import (
17
+ FileDefinition,
18
+ LibraryConfiguration,
19
+ )
18
20
  from folio_migration_tools.migration_report import MigrationReport
19
21
  from folio_migration_tools.migration_tasks.migration_task_base import MigrationTaskBase
20
22
  from folio_migration_tools.task_configuration import AbstractTaskConfiguration
@@ -35,11 +37,12 @@ class ReservesMigrator(MigrationTaskBase):
35
37
  self,
36
38
  task_configuration: TaskConfiguration,
37
39
  library_config: LibraryConfiguration,
40
+ folio_client
38
41
  ):
39
42
  csv.register_dialect("tsv", delimiter="\t")
40
43
  self.migration_report = MigrationReport()
41
44
  self.valid_reserves = []
42
- super().__init__(library_config, task_configuration)
45
+ super().__init__(library_config, task_configuration, folio_client)
43
46
  with open(
44
47
  self.folder_structure.legacy_records_folder
45
48
  / task_configuration.course_reserve_file_path.file_name,
@@ -6,11 +6,15 @@ from typing import Optional
6
6
  import i18n
7
7
  from folio_uuid.folio_namespaces import FOLIONamespaces
8
8
 
9
- from folio_migration_tools.custom_exceptions import TransformationProcessError
10
- from folio_migration_tools.custom_exceptions import TransformationRecordFailedError
9
+ from folio_migration_tools.custom_exceptions import (
10
+ TransformationProcessError,
11
+ TransformationRecordFailedError,
12
+ )
11
13
  from folio_migration_tools.helper import Helper
12
- from folio_migration_tools.library_configuration import FileDefinition
13
- from folio_migration_tools.library_configuration import LibraryConfiguration
14
+ from folio_migration_tools.library_configuration import (
15
+ FileDefinition,
16
+ LibraryConfiguration,
17
+ )
14
18
  from folio_migration_tools.mapping_file_transformation.mapping_file_mapper_base import (
15
19
  MappingFileMapperBase,
16
20
  )
@@ -39,9 +43,10 @@ class UserTransformer(MigrationTaskBase):
39
43
  self,
40
44
  task_config: TaskConfiguration,
41
45
  library_config: LibraryConfiguration,
46
+ folio_client,
42
47
  use_logging: bool = True,
43
48
  ):
44
- super().__init__(library_config, task_config, use_logging)
49
+ super().__init__(library_config, task_config, folio_client, use_logging)
45
50
  self.task_config = task_config
46
51
  self.total_records = 0
47
52
 
@@ -187,20 +192,12 @@ class UserTransformer(MigrationTaskBase):
187
192
 
188
193
  @staticmethod
189
194
  def clean_user(folio_user, index_or_id):
195
+ valid_addresses = remove_empty_addresses(folio_user)
190
196
  # Make sure the user has exactly one primary address
191
- if addresses := folio_user.get("personal", {}).get("addresses", []):
192
- primary_true = []
193
- for address in addresses:
194
- if "primaryAddress" not in address:
195
- address["primaryAddress"] = False
196
- elif (
197
- isinstance(address["primaryAddress"], bool)
198
- and address["primaryAddress"] is True
199
- ):
200
- primary_true.append(address)
201
-
197
+ if valid_addresses:
198
+ primary_true = find_primary_addresses(valid_addresses)
202
199
  if len(primary_true) < 1:
203
- addresses[0]["primaryAddress"] = True
200
+ valid_addresses[0]["primaryAddress"] = True
204
201
  elif len(primary_true) > 1:
205
202
  logging.log(
206
203
  26,
@@ -211,6 +208,7 @@ class UserTransformer(MigrationTaskBase):
211
208
  )
212
209
  for pt in primary_true[1:]:
213
210
  pt["primaryAddress"] = False
211
+ folio_user["personal"]["addresses"] = valid_addresses
214
212
 
215
213
 
216
214
  def print_email_warning():
@@ -224,3 +222,34 @@ def print_email_warning():
224
222
  " \n"
225
223
  )
226
224
  print(s)
225
+
226
+
227
+ def remove_empty_addresses(folio_user):
228
+ valid_addresses = []
229
+ # Remove empty addresses
230
+ if addresses := folio_user.get("personal", {}).pop("addresses", []):
231
+ for address in addresses:
232
+ address_fields = [
233
+ x for x in address.keys() if x not in ["primaryAddress", "addressTypeId", "id"]
234
+ ]
235
+ if address_fields:
236
+ valid_addresses.append(address)
237
+ return valid_addresses
238
+
239
+
240
+ def find_primary_addresses(addresses):
241
+ primary_true = []
242
+ for address in addresses:
243
+ if "primaryAddress" not in address:
244
+ address["primaryAddress"] = False
245
+ elif (
246
+ isinstance(address["primaryAddress"], bool)
247
+ and address["primaryAddress"] is True
248
+ ) or (
249
+ isinstance(address["primaryAddress"], str)
250
+ and address["primaryAddress"].lower() == "true"
251
+ ):
252
+ primary_true.append(address)
253
+ else:
254
+ address["primaryAddress"] = False
255
+ return primary_true
@@ -17,9 +17,9 @@ class AbstractTaskConfiguration(BaseModel):
17
17
  title="ECS tenant ID",
18
18
  description=(
19
19
  "The tenant ID to use when making requests to FOLIO APIs for this task, if ",
20
- "different from library configuration"
21
- )
22
- )
20
+ "different from library configuration",
21
+ ),
22
+ ),
23
23
  ] = ""
24
24
 
25
25
  class Config:
@@ -440,5 +440,6 @@
440
440
  "item barcode": "item barcode",
441
441
  "legacy id from %{fro}": "legacy id from %{fro}",
442
442
  "naturalId mapped from %{fro}": "naturalId mapped from %{fro}",
443
- "no matching identifier_types in %{names}": "no matching identifier_types in %{names}"
443
+ "no matching identifier_types in %{names}": "no matching identifier_types in %{names}",
444
+ "subfield present in %{linked_value_tag} but not in %{pattern_field}": "subfield present in %{linked_value_tag} but not in %{pattern_field}"
444
445
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
- Name: folio-migration-tools
3
- Version: 1.9.0a2
2
+ Name: folio_migration_tools
3
+ Version: 1.9.0a4
4
4
  Summary: A tool allowing you to migrate data from legacy ILS:s (Library systems) into FOLIO LSP
5
5
  Home-page: https://github.com/FOLIO-FSE/folio_migration_tools
6
6
  License: MIT
@@ -13,17 +13,18 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.9
14
14
  Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
16
18
  Provides-Extra: docs
17
19
  Requires-Dist: argparse-prompt (>=0.0.5,<0.0.6)
18
20
  Requires-Dist: deepdiff (>=6.2.3,<7.0.0)
19
21
  Requires-Dist: defusedxml (>=0.7.1,<0.8.0)
20
22
  Requires-Dist: folio-uuid (>=0.2.8,<0.3.0)
21
- Requires-Dist: folioclient (>=0.60.0,<0.61.0)
22
- Requires-Dist: httpx (>=0.23.3,<0.24.0)
23
+ Requires-Dist: folioclient (>=0.61.2,<0.62.0)
23
24
  Requires-Dist: pyaml (>=21.10.1,<22.0.0)
24
25
  Requires-Dist: pydantic (>=1.10.2,<2.0.0)
25
26
  Requires-Dist: pyhumps (>=3.7.3,<4.0.0)
26
- Requires-Dist: pymarc (>=5.0.0,<6.0.0)
27
+ Requires-Dist: pymarc (>=5.2.3,<6.0.0)
27
28
  Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
28
29
  Requires-Dist: python-i18n (>=0.3.9,<0.4.0)
29
30
  Project-URL: Repository, https://github.com/FOLIO-FSE/folio_migration_tools
@@ -1,57 +1,57 @@
1
- folio_migration_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- folio_migration_tools/__main__.py,sha256=sBi99s5-DXmDM4nGFvxza9f1p1Xb8pEMXmESEoQzgSs,6498
1
+ folio_migration_tools/__init__.py,sha256=yTPImroNb0CPuYmG4nm6aAcu5gpFJ7o1uM2dJS-47ec,93
2
+ folio_migration_tools/__main__.py,sha256=ceAx_91SQS-Ab2g7umZpQtpMKWEHy3ivnWK4I3x2tuU,6926
3
3
  folio_migration_tools/circulation_helper.py,sha256=2kAkLM6caPiep0ZtBkMICbRDh53KdfdH21oEX1eMRDI,14193
4
4
  folio_migration_tools/colors.py,sha256=GP0wdI_GZ2WD5SjrbPN-S3u8vvN_u6rGQIBBcWv_0ZM,227
5
5
  folio_migration_tools/config_file_load.py,sha256=zHHa6NDkN6EJiQE4DgjrFQPVKsd70POsfbGkB8308jg,2822
6
6
  folio_migration_tools/custom_dict.py,sha256=l9jHmlgXJkY9Itx1WnzjPzOlD8u62RgYLjkhU_CPAOI,648
7
7
  folio_migration_tools/custom_exceptions.py,sha256=6zjwXzFHyv3xhyAO0SCuyLePxluCQe_1yhSVNLDC6Zk,2509
8
8
  folio_migration_tools/extradata_writer.py,sha256=fuchNcMc6BYb9IyfAcvXg7X4J2TfX6YiROfT2hr0JMw,1678
9
- folio_migration_tools/folder_structure.py,sha256=M623DkktDuUPIpNc0cQwct1U9bA2QpR-aRhOoGz-nDs,6573
9
+ folio_migration_tools/folder_structure.py,sha256=yyVvbkM9PbczSHNI8vK0Ru7i0x4nbYGzrRriXrnIh38,6715
10
10
  folio_migration_tools/helper.py,sha256=KkOkNAGO_fuYqxdLrsbLzCJLQHUrFZG1NzD4RmpQ-KM,2804
11
11
  folio_migration_tools/holdings_helper.py,sha256=yJpz6aJrKRBiJ1MtT5bs2vXAc88uJuGh2_KDuCySOKc,7559
12
12
  folio_migration_tools/i18n_config.py,sha256=3AH_2b9zTsxE4XTe4isM_zYtPJSlK0ix6eBmV7kAYUM,228
13
- folio_migration_tools/library_configuration.py,sha256=owINU5IpyNsnozLiJAZrrKpHjWn237J8JFPnQ3X1cew,3527
14
- folio_migration_tools/mapper_base.py,sha256=RuLlU9tQgQQgOHjmi7XUhh2cpfCqAVM8H1QNLLAuiKA,19595
13
+ folio_migration_tools/library_configuration.py,sha256=60hgGtyvHhRUKXHvqz41-2V5EtUaySMV20JIKk279N0,3636
14
+ folio_migration_tools/mapper_base.py,sha256=46eO9wAxGoXZJC3SI7BNh-X7779SKSM8a8KXqdR9S8Y,19942
15
15
  folio_migration_tools/mapping_file_transformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  folio_migration_tools/mapping_file_transformation/courses_mapper.py,sha256=mJQxxeTn1bCYb2zwFYyXJ6EGZpJ0DsmwOY3nED7D_gQ,8091
17
- folio_migration_tools/mapping_file_transformation/holdings_mapper.py,sha256=oMblLb_uBzITIX_86xuj3I9bCznCExvcbZQXzsicGdc,6882
18
- folio_migration_tools/mapping_file_transformation/item_mapper.py,sha256=0ftxmseI_lhADV_WYhx8yHdu3bJX_Pt3w1RKq7C6rOw,10511
17
+ folio_migration_tools/mapping_file_transformation/holdings_mapper.py,sha256=GI9xnN74EsUMAshXKNJ6p9bGPdLtK0PCXqbB3nIxrC8,7207
18
+ folio_migration_tools/mapping_file_transformation/item_mapper.py,sha256=oT64nczTM7XNAA_8PaFMIxaMiu3wzTg8z8SUA-OLRA0,10379
19
19
  folio_migration_tools/mapping_file_transformation/manual_fee_fines_mapper.py,sha256=nCkqbxaDHKxMuqQHh_afxQp48YrVD-SeCZ0L1iGvnkk,13402
20
- folio_migration_tools/mapping_file_transformation/mapping_file_mapper_base.py,sha256=ZvzshrIereAdC17gMazEGs02eiB8VcXH32V-TqrZwgE,38124
20
+ folio_migration_tools/mapping_file_transformation/mapping_file_mapper_base.py,sha256=RacwSOP6r6i28EOywaepq5K5FimD8Ld5MlBo89FYO7c,37963
21
21
  folio_migration_tools/mapping_file_transformation/notes_mapper.py,sha256=auLQZqa4rSJo_MIV4Lc5-LG8RcBpp2bnKH243qNYq_0,3470
22
- folio_migration_tools/mapping_file_transformation/order_mapper.py,sha256=c_2TMgP_raw1YRRdTujMMr8-9ZRzKadjhd8fcD_U4bM,16784
23
- folio_migration_tools/mapping_file_transformation/organization_mapper.py,sha256=9XCh4lVT7TdAXaUl8evUj6ZQLTP0XjkLVJX3xwURKu4,14569
22
+ folio_migration_tools/mapping_file_transformation/order_mapper.py,sha256=Bn9OnVmOA5k8XyB1Lpllc0pL-RO71A_VSBjoZVV1eJ0,16786
23
+ folio_migration_tools/mapping_file_transformation/organization_mapper.py,sha256=0zjw0-C-qTYH9GC6FDBElucWCZWdoOiTHOY7q9_4NQg,14571
24
24
  folio_migration_tools/mapping_file_transformation/ref_data_mapping.py,sha256=qFsn_LwKZeKFdOudfEQnNA3DEHOdNQVKzTPdZAlDPX0,8864
25
- folio_migration_tools/mapping_file_transformation/user_mapper.py,sha256=Zv0VCW23u7qv7OoA4eO0Mjkp7AwPOvtl-wV5xHiXLik,7844
25
+ folio_migration_tools/mapping_file_transformation/user_mapper.py,sha256=oWuIPRQL0anF_qTVFibHtc1oOaqyKCBH4O1hX5rQAZQ,7806
26
26
  folio_migration_tools/marc_rules_transformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- folio_migration_tools/marc_rules_transformation/conditions.py,sha256=wkpcEVJa7M4mRoTr2Y2GwMr9KtXKWbyAkJ5iBpyI-bc,35773
28
- folio_migration_tools/marc_rules_transformation/holdings_statementsparser.py,sha256=TqxUDO8GR_UKIrDQhl-aiDBePvhxMc6PjEY28UvEQQg,11855
27
+ folio_migration_tools/marc_rules_transformation/conditions.py,sha256=MnbMThiOZ6IenXirjMSNkqJ86RtFzbF4cp1T4YcfpyA,36349
28
+ folio_migration_tools/marc_rules_transformation/holdings_statementsparser.py,sha256=lTb5QWEAgwyFHy5vdSK6oDl1Q5v2GnzuV04xWV3p4rc,12401
29
29
  folio_migration_tools/marc_rules_transformation/hrid_handler.py,sha256=lEvtJFWe5FoU372nHqTdnVF76qCKZjWgUJqIpiKUHY0,10026
30
30
  folio_migration_tools/marc_rules_transformation/loc_language_codes.xml,sha256=ztn2_yKws6qySL4oSsZh7sOjxq5bCC1PhAnXJdtgmJ0,382912
31
- folio_migration_tools/marc_rules_transformation/marc_file_processor.py,sha256=jmDP5g4-dJlOaPU7Ns_PnhKh48XjMfmgnAAROZL1hW4,11373
32
- folio_migration_tools/marc_rules_transformation/marc_reader_wrapper.py,sha256=KJOzsSX-ad7wmNcuB3anexbeXmjgZmgU3NzQqQ3nH5A,5194
33
- folio_migration_tools/marc_rules_transformation/rules_mapper_authorities.py,sha256=Dg7mqsuAqJAF6j7A0uFh0f6Ot7_IZ_3hNXLZyCWZzSw,9681
34
- folio_migration_tools/marc_rules_transformation/rules_mapper_base.py,sha256=-BK9HCALP6Ipy6OVxrlwpF-jf1oJPEL4egR4qx6hiQM,37640
35
- folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py,sha256=znE54B9ysG_ElYSBOWYp3QU32h21CdJjL7vrGNNjQZ4,27439
36
- folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py,sha256=h_BOynqV9ejM0M-Lt02BxAfweAsdw6QO4sBkVDlnNoQ,18523
31
+ folio_migration_tools/marc_rules_transformation/marc_file_processor.py,sha256=vP6u8BDrf3v5q-scIPEINXYUL223cmreAQ8BUr9WCcM,12292
32
+ folio_migration_tools/marc_rules_transformation/marc_reader_wrapper.py,sha256=9ATjYMRAjy0QcXtmNZaHVhHLJ5hE1WUgOcF6KMJjbgo,5309
33
+ folio_migration_tools/marc_rules_transformation/rules_mapper_authorities.py,sha256=GFw8j9UtCxnUdLShmPzJa1MpCK8a0NkQIN5C3jyouRs,9604
34
+ folio_migration_tools/marc_rules_transformation/rules_mapper_base.py,sha256=WWSJgYvF9LeY8vh-BtQi7Fm3J-cowUJKWa0Wk2Ge7fc,39358
35
+ folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py,sha256=ys27z3PGF0I4RQfTXYB-YMgs-2nyNS3L70mkXEFnwLY,28555
36
+ folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py,sha256=EBxf9Qh5Y0eDOmqYssWfaizxafiXSYDFzWmCuPtdG-8,18226
37
37
  folio_migration_tools/migration_report.py,sha256=BkRspM1hwTBnWeqsHamf7yVEofzLj560Q-9G--O00hw,4258
38
38
  folio_migration_tools/migration_tasks/__init__.py,sha256=ZkbY_yGyB84Ke8OMlYUzyyBj4cxxNrhMTwQlu_GbdDs,211
39
39
  folio_migration_tools/migration_tasks/authority_transformer.py,sha256=AoXg9s-GLO3yEEDCrQV7hc4YVXxwxsdxDdpj1zhHydE,4251
40
- folio_migration_tools/migration_tasks/batch_poster.py,sha256=Vf4MYndENrXZEwKLHnp2KG2ZXtlFtQcW12ikuc0-p-s,28127
41
- folio_migration_tools/migration_tasks/bibs_transformer.py,sha256=0_jpnzY3vmifcHbjLbzLJgiPgkGuqQ2neRF-px0PK_s,7380
42
- folio_migration_tools/migration_tasks/courses_migrator.py,sha256=TON-vTwTwBgImFxiNluqNb4oJiNA8v4qMpEZBqp6Ces,5773
43
- folio_migration_tools/migration_tasks/holdings_csv_transformer.py,sha256=htCWynOHV0n3l8eYWdEOgvCu78ZCL02KMrRXfvHEUkc,19628
44
- folio_migration_tools/migration_tasks/holdings_marc_transformer.py,sha256=zdDyuQ4AfJ6Ro79PhSvxL7iokJ9lD6yXuQrr12BQFJ0,9622
45
- folio_migration_tools/migration_tasks/items_transformer.py,sha256=y1WU1-vCoU9IOZQdKj3YZJ8XFdECMSg833joS4khu0Y,15142
46
- folio_migration_tools/migration_tasks/loans_migrator.py,sha256=I1gn7ZgIpoZhne6xlpn3cIAFcMUHBYSKywZkeJ_opLY,34336
47
- folio_migration_tools/migration_tasks/manual_fee_fines_transformer.py,sha256=2Eq5h9-ZJ68P7anY8glYMWJodp5i0Vgk5G0Dan--sCk,7356
48
- folio_migration_tools/migration_tasks/migration_task_base.py,sha256=JKnW_jHtHYHP9qFRN1qVAPpA9_mbw7ZuM5RAtmyvyKk,13875
49
- folio_migration_tools/migration_tasks/orders_transformer.py,sha256=IF6pk02miLmHyxUAJZd1eT3Pks5Lp0Ybtc9vefpDDhg,11477
50
- folio_migration_tools/migration_tasks/organization_transformer.py,sha256=McTs5uZxsd00jbM8eQnOADhmFg-ZXlw_sOb28aGnCZ8,14920
51
- folio_migration_tools/migration_tasks/requests_migrator.py,sha256=1WouggZ_sWgKT-8hf-a_SLx1tk-UTJ0_qVio4vQt9lc,13309
52
- folio_migration_tools/migration_tasks/reserves_migrator.py,sha256=RgSkv035LCsSA-Ho12ZzTdqntlsQy_ORg8AR4o-CnQc,9213
53
- folio_migration_tools/migration_tasks/user_transformer.py,sha256=LvnzSeCpoVRelEOfivFExVXCcKNaHmcED2kFhjZk1IU,9936
54
- folio_migration_tools/task_configuration.py,sha256=kfy_qsuMavBM5AVMISO1DQGWuuryJvuPwocFOXAz2TA,630
40
+ folio_migration_tools/migration_tasks/batch_poster.py,sha256=iaWhvxdYli0kgsXLHGmFFBMeVXGpAv9eDg02BagyQ2U,29732
41
+ folio_migration_tools/migration_tasks/bibs_transformer.py,sha256=XzlPo-0uuugJA4SM80xOlOj5nDK6OMDXFnAYg80hOBc,7791
42
+ folio_migration_tools/migration_tasks/courses_migrator.py,sha256=dQerp97P3r7wmxK3Ovg6AriO6K_nTr6vA8RKj_XBEt4,5728
43
+ folio_migration_tools/migration_tasks/holdings_csv_transformer.py,sha256=Hwr4YjgNIQpi2N-x8eq-mmRpXAyxYylQjpYubm03-ec,19668
44
+ folio_migration_tools/migration_tasks/holdings_marc_transformer.py,sha256=yN0a8YVNx2P6NswxSylTca0MmNk1shze3PyKXv9JJIw,9547
45
+ folio_migration_tools/migration_tasks/items_transformer.py,sha256=MOpnw1yvNKc6x4ZNjlB1nA2XiXMFdAso-8v2bET5tbE,15011
46
+ folio_migration_tools/migration_tasks/loans_migrator.py,sha256=3OysTLy15lH0SRWoYgkFIlDXXMLn6OElmAk-YlG4z1M,34260
47
+ folio_migration_tools/migration_tasks/manual_fee_fines_transformer.py,sha256=CnmlTge7nChUJ10EiUkriQtJlVxWqglgfhjgneh2_yM,7247
48
+ folio_migration_tools/migration_tasks/migration_task_base.py,sha256=5vVkBqUvCGuGPUyWlnKsLCFtgOQzq4jjBK_TBUHs7BE,13742
49
+ folio_migration_tools/migration_tasks/orders_transformer.py,sha256=dGJlTZi5OHCsK8HS7bda8jcZcnWNc80DHgOOhuM1nhE,11474
50
+ folio_migration_tools/migration_tasks/organization_transformer.py,sha256=kHxftiRzuFSiA05-L9-YSBvUmsZntbqCDbGfPXtMlHo,14858
51
+ folio_migration_tools/migration_tasks/requests_migrator.py,sha256=8gbgHMca6hxAo9zUC6u3Xh_Zg0K9tiS3UDBaGdE5sSs,13302
52
+ folio_migration_tools/migration_tasks/reserves_migrator.py,sha256=rZzC_HwsjqTrnVAGPFgYuMwgZsjfLsyY6f6bhBRtBr0,9206
53
+ folio_migration_tools/migration_tasks/user_transformer.py,sha256=WkWb7E03OIpq8s2jasCTPdevRoGcaUrlkTwBi0bTrys,10674
54
+ folio_migration_tools/task_configuration.py,sha256=K88TCKz44uk3jiUxFS_VmCYcwr_LV6Wu9jV_p00-Lec,633
55
55
  folio_migration_tools/test_infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  folio_migration_tools/test_infrastructure/mocked_classes.py,sha256=rNes6UlRqIWGwPurfiQK97IvgB5OPwnZTbv1T28jHzk,9150
57
57
  folio_migration_tools/transaction_migration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -59,8 +59,8 @@ folio_migration_tools/transaction_migration/legacy_loan.py,sha256=PUqI2fN3Dx8Jwi
59
59
  folio_migration_tools/transaction_migration/legacy_request.py,sha256=1ulyFzPQw_InOjyPzkWpGnNptgXdQ18nmri0J8Nlpkc,6124
60
60
  folio_migration_tools/transaction_migration/legacy_reserve.py,sha256=rZVtiMBYnt6aI0WxAwPN8fML_MKEUSUYsadCKPTeB4E,1839
61
61
  folio_migration_tools/transaction_migration/transaction_result.py,sha256=cTdCN0BnlI9_ZJB2Z3Fdkl9gpymIi-9mGZsRFlQcmDk,656
62
- folio_migration_tools/translations/en.json,sha256=y_S2c41XoziquzBYdP5hmmRikiDJSYixHZLK1dWyCuM,38525
63
- folio_migration_tools-1.9.0a2.dist-info/LICENSE,sha256=PhIEkitVi3ejgq56tt6sWoJIG_zmv82cjjd_aYPPGdI,1072
64
- folio_migration_tools-1.9.0a2.dist-info/WHEEL,sha256=vxFmldFsRN_Hx10GDvsdv1wroKq8r5Lzvjp6GZ4OO8c,88
65
- folio_migration_tools-1.9.0a2.dist-info/METADATA,sha256=ATuQXlBb645Zd0Mzh42Ao9h51InE6PSiUrmoGNsDO_U,7256
66
- folio_migration_tools-1.9.0a2.dist-info/RECORD,,
62
+ folio_migration_tools/translations/en.json,sha256=HOVpkb_T-SN_x0NpDp8gyvV1hMLCui3SsG7ByyIv0OU,38669
63
+ folio_migration_tools-1.9.0a4.dist-info/LICENSE,sha256=PhIEkitVi3ejgq56tt6sWoJIG_zmv82cjjd_aYPPGdI,1072
64
+ folio_migration_tools-1.9.0a4.dist-info/METADATA,sha256=d0X2DDsYyC0_We_jm13ohilfXLQ_ujWVXejh5WThOis,7318
65
+ folio_migration_tools-1.9.0a4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
66
+ folio_migration_tools-1.9.0a4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.3.2
2
+ Generator: poetry-core 1.9.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any