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.
- folio_migration_tools/__init__.py +3 -0
- folio_migration_tools/__main__.py +16 -6
- folio_migration_tools/folder_structure.py +3 -0
- folio_migration_tools/library_configuration.py +8 -7
- folio_migration_tools/mapper_base.py +26 -17
- folio_migration_tools/mapping_file_transformation/holdings_mapper.py +23 -11
- folio_migration_tools/mapping_file_transformation/item_mapper.py +13 -11
- folio_migration_tools/mapping_file_transformation/mapping_file_mapper_base.py +9 -10
- folio_migration_tools/mapping_file_transformation/order_mapper.py +2 -2
- folio_migration_tools/mapping_file_transformation/organization_mapper.py +1 -1
- folio_migration_tools/mapping_file_transformation/user_mapper.py +6 -4
- folio_migration_tools/marc_rules_transformation/conditions.py +23 -7
- folio_migration_tools/marc_rules_transformation/holdings_statementsparser.py +21 -11
- folio_migration_tools/marc_rules_transformation/marc_file_processor.py +36 -9
- folio_migration_tools/marc_rules_transformation/marc_reader_wrapper.py +15 -11
- folio_migration_tools/marc_rules_transformation/rules_mapper_authorities.py +7 -5
- folio_migration_tools/marc_rules_transformation/rules_mapper_base.py +98 -45
- folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py +53 -27
- folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py +13 -11
- folio_migration_tools/migration_tasks/batch_poster.py +78 -38
- folio_migration_tools/migration_tasks/bibs_transformer.py +21 -8
- folio_migration_tools/migration_tasks/courses_migrator.py +11 -6
- folio_migration_tools/migration_tasks/holdings_csv_transformer.py +22 -16
- folio_migration_tools/migration_tasks/holdings_marc_transformer.py +9 -7
- folio_migration_tools/migration_tasks/items_transformer.py +13 -10
- folio_migration_tools/migration_tasks/loans_migrator.py +10 -9
- folio_migration_tools/migration_tasks/manual_fee_fines_transformer.py +13 -9
- folio_migration_tools/migration_tasks/migration_task_base.py +18 -18
- folio_migration_tools/migration_tasks/orders_transformer.py +14 -10
- folio_migration_tools/migration_tasks/organization_transformer.py +12 -8
- folio_migration_tools/migration_tasks/requests_migrator.py +8 -5
- folio_migration_tools/migration_tasks/reserves_migrator.py +7 -4
- folio_migration_tools/migration_tasks/user_transformer.py +46 -17
- folio_migration_tools/task_configuration.py +3 -3
- folio_migration_tools/translations/en.json +2 -1
- {folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/METADATA +6 -5
- {folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/RECORD +39 -39
- {folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/WHEEL +1 -1
- {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
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
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 =
|
|
47
|
-
|
|
48
|
-
library_configuration.
|
|
49
|
-
|
|
50
|
-
|
|
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)) #
|
|
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
|
|
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
|
|
17
|
-
|
|
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
|
|
20
|
-
|
|
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(
|
|
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
|
|
17
|
-
|
|
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
|
|
20
|
-
|
|
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
|
|
16
|
-
|
|
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
|
|
17
|
-
|
|
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
|
|
10
|
-
|
|
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
|
|
13
|
-
|
|
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
|
|
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
|
-
|
|
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
|
}
|
{folio_migration_tools-1.9.0a2.dist-info → folio_migration_tools-1.9.0a4.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
|
-
Name:
|
|
3
|
-
Version: 1.9.
|
|
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.
|
|
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.
|
|
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=
|
|
2
|
-
folio_migration_tools/__main__.py,sha256=
|
|
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=
|
|
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=
|
|
14
|
-
folio_migration_tools/mapper_base.py,sha256=
|
|
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=
|
|
18
|
-
folio_migration_tools/mapping_file_transformation/item_mapper.py,sha256=
|
|
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=
|
|
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=
|
|
23
|
-
folio_migration_tools/mapping_file_transformation/organization_mapper.py,sha256=
|
|
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=
|
|
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=
|
|
28
|
-
folio_migration_tools/marc_rules_transformation/holdings_statementsparser.py,sha256=
|
|
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=
|
|
32
|
-
folio_migration_tools/marc_rules_transformation/marc_reader_wrapper.py,sha256=
|
|
33
|
-
folio_migration_tools/marc_rules_transformation/rules_mapper_authorities.py,sha256=
|
|
34
|
-
folio_migration_tools/marc_rules_transformation/rules_mapper_base.py,sha256
|
|
35
|
-
folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py,sha256=
|
|
36
|
-
folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py,sha256=
|
|
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=
|
|
41
|
-
folio_migration_tools/migration_tasks/bibs_transformer.py,sha256=
|
|
42
|
-
folio_migration_tools/migration_tasks/courses_migrator.py,sha256=
|
|
43
|
-
folio_migration_tools/migration_tasks/holdings_csv_transformer.py,sha256=
|
|
44
|
-
folio_migration_tools/migration_tasks/holdings_marc_transformer.py,sha256=
|
|
45
|
-
folio_migration_tools/migration_tasks/items_transformer.py,sha256=
|
|
46
|
-
folio_migration_tools/migration_tasks/loans_migrator.py,sha256=
|
|
47
|
-
folio_migration_tools/migration_tasks/manual_fee_fines_transformer.py,sha256=
|
|
48
|
-
folio_migration_tools/migration_tasks/migration_task_base.py,sha256=
|
|
49
|
-
folio_migration_tools/migration_tasks/orders_transformer.py,sha256=
|
|
50
|
-
folio_migration_tools/migration_tasks/organization_transformer.py,sha256=
|
|
51
|
-
folio_migration_tools/migration_tasks/requests_migrator.py,sha256=
|
|
52
|
-
folio_migration_tools/migration_tasks/reserves_migrator.py,sha256=
|
|
53
|
-
folio_migration_tools/migration_tasks/user_transformer.py,sha256=
|
|
54
|
-
folio_migration_tools/task_configuration.py,sha256=
|
|
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=
|
|
63
|
-
folio_migration_tools-1.9.
|
|
64
|
-
folio_migration_tools-1.9.
|
|
65
|
-
folio_migration_tools-1.9.
|
|
66
|
-
folio_migration_tools-1.9.
|
|
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,,
|
|
File without changes
|