folio-migration-tools 1.9.0rc2__py3-none-any.whl → 1.9.0rc4__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 (23) hide show
  1. folio_migration_tools/mapping_file_transformation/holdings_mapper.py +1 -1
  2. folio_migration_tools/mapping_file_transformation/order_mapper.py +8 -4
  3. folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py +22 -2
  4. folio_migration_tools/migration_tasks/batch_poster.py +143 -26
  5. folio_migration_tools/migration_tasks/courses_migrator.py +54 -8
  6. folio_migration_tools/migration_tasks/holdings_csv_transformer.py +102 -14
  7. folio_migration_tools/migration_tasks/holdings_marc_transformer.py +46 -4
  8. folio_migration_tools/migration_tasks/items_transformer.py +133 -20
  9. folio_migration_tools/migration_tasks/loans_migrator.py +61 -9
  10. folio_migration_tools/migration_tasks/migration_task_base.py +104 -11
  11. folio_migration_tools/migration_tasks/orders_transformer.py +107 -14
  12. folio_migration_tools/migration_tasks/organization_transformer.py +79 -14
  13. folio_migration_tools/migration_tasks/requests_migrator.py +56 -7
  14. folio_migration_tools/migration_tasks/reserves_migrator.py +26 -4
  15. folio_migration_tools/migration_tasks/user_transformer.py +88 -18
  16. folio_migration_tools/task_configuration.py +2 -2
  17. folio_migration_tools/transaction_migration/legacy_loan.py +13 -1
  18. folio_migration_tools/transaction_migration/legacy_reserve.py +3 -5
  19. {folio_migration_tools-1.9.0rc2.dist-info → folio_migration_tools-1.9.0rc4.dist-info}/METADATA +1 -1
  20. {folio_migration_tools-1.9.0rc2.dist-info → folio_migration_tools-1.9.0rc4.dist-info}/RECORD +23 -23
  21. {folio_migration_tools-1.9.0rc2.dist-info → folio_migration_tools-1.9.0rc4.dist-info}/WHEEL +1 -1
  22. {folio_migration_tools-1.9.0rc2.dist-info → folio_migration_tools-1.9.0rc4.dist-info}/LICENSE +0 -0
  23. {folio_migration_tools-1.9.0rc2.dist-info → folio_migration_tools-1.9.0rc4.dist-info}/entry_points.txt +0 -0
@@ -7,7 +7,8 @@ import time
7
7
  import uuid
8
8
  from hashlib import sha1
9
9
  from os.path import isfile
10
- from typing import List, Optional
10
+ from typing import List, Optional, Annotated
11
+ from pydantic import Field
11
12
 
12
13
  import i18n
13
14
  from folio_uuid.folio_namespaces import FOLIONamespaces
@@ -36,14 +37,78 @@ csv.field_size_limit(int(ctypes.c_ulong(-1).value // 2))
36
37
  # Read files and do some work
37
38
  class OrganizationTransformer(MigrationTaskBase):
38
39
  class TaskConfiguration(AbstractTaskConfiguration):
39
- name: str
40
- migration_task_type: str
41
- files: List[FileDefinition]
42
- organization_map_path: str
43
- organization_types_map_path: Optional[str] = ""
44
- address_categories_map_path: Optional[str] = ""
45
- email_categories_map_path: Optional[str] = ""
46
- phone_categories_map_path: Optional[str] = ""
40
+ name: Annotated[
41
+ str,
42
+ Field(
43
+ description=(
44
+ "Name of this migration task. The name is being used to call the specific "
45
+ "task, and to distinguish tasks of similar types"
46
+ ),
47
+ ),
48
+ ]
49
+ migration_task_type: Annotated[
50
+ str,
51
+ Field(
52
+ title="Migration task type",
53
+ description=(
54
+ "The type of migration task you want to perform"
55
+ ),
56
+ ),
57
+ ]
58
+ files: Annotated[
59
+ List[FileDefinition],
60
+ Field(
61
+ title="Source files",
62
+ description=(
63
+ "List of MARC21 files with holdings records"
64
+ ),
65
+ ),
66
+ ]
67
+ organization_map_path: Annotated[
68
+ str,
69
+ Field(
70
+ title="Organization map path",
71
+ description=(
72
+ "Path to the organization map file"
73
+ ),
74
+ ),
75
+ ]
76
+ organization_types_map_path: Annotated[
77
+ Optional[str],
78
+ Field(
79
+ title="Organization types map path",
80
+ description=(
81
+ "Path to the organization types map file. By default is empty string"
82
+ ),
83
+ ),
84
+ ] = ""
85
+ address_categories_map_path: Annotated[
86
+ Optional[str],
87
+ Field(
88
+ title="Address categories map path",
89
+ description=(
90
+ "Path to the address categories map file. By default is empty string"
91
+ ),
92
+ ),
93
+ ] = ""
94
+ email_categories_map_path: Annotated[
95
+ Optional[str],
96
+ Field(
97
+ title="Email categories map path",
98
+ description=(
99
+ "Path to the email categories map file. By default is empty string"
100
+ ),
101
+ ),
102
+ ] = ""
103
+ phone_categories_map_path: Annotated[
104
+ Optional[str],
105
+ Field(
106
+ title="Phone categories map path",
107
+ description=(
108
+ "Path to the phone categories map file. By default is empty string"
109
+ ),
110
+ ),
111
+ ] = ""
47
112
 
48
113
  @staticmethod
49
114
  def get_object_type() -> FOLIONamespaces:
@@ -178,8 +243,8 @@ class OrganizationTransformer(MigrationTaskBase):
178
243
  self.mapper.handle_transformation_process_error(idx, process_error)
179
244
  except TransformationRecordFailedError as error:
180
245
  self.mapper.handle_transformation_record_failed_error(idx, error)
181
- except Exception as excepion:
182
- self.mapper.handle_generic_exception(idx, excepion)
246
+ except Exception as exception:
247
+ self.mapper.handle_generic_exception(idx, exception)
183
248
 
184
249
  self.mapper.migration_report.add_general_statistics(
185
250
  i18n.t("Number of objects in source data file")
@@ -227,7 +292,7 @@ class OrganizationTransformer(MigrationTaskBase):
227
292
  self.folder_structure.migration_reports_file,
228
293
  )
229
294
  self.mapper.migration_report.write_migration_report(
230
- i18n.t("Ogranization transformation report"),
295
+ i18n.t("Organization transformation report"),
231
296
  migration_report_file,
232
297
  self.start_datetime,
233
298
  )
@@ -269,7 +334,7 @@ class OrganizationTransformer(MigrationTaskBase):
269
334
  if address.get("isPrimary") is True:
270
335
  primary_address_exists = True
271
336
 
272
- # If none of the existing addresses is pimrary
337
+ # If none of the existing addresses is primary
273
338
  # Make the first one primary
274
339
  if not primary_address_exists:
275
340
  addresses[0]["isPrimary"] = True
@@ -364,7 +429,7 @@ class OrganizationTransformer(MigrationTaskBase):
364
429
 
365
430
  if len(identical_objects) > 0:
366
431
  self.mapper.migration_report.add_general_statistics(
367
- i18n.t("Number of reoccuring identical %{type}", type=extradata_object_type)
432
+ i18n.t("Number of reoccurring identical %{type}", type=extradata_object_type)
368
433
  )
369
434
  Helper.log_data_issue(
370
435
  f"{self.legacy_id}",
@@ -3,7 +3,8 @@ import json
3
3
  import logging
4
4
  import sys
5
5
  import time
6
- from typing import Optional
6
+ from typing import Optional, Annotated
7
+ from pydantic import Field
7
8
 
8
9
  import i18n
9
10
  from folio_uuid.folio_namespaces import FOLIONamespaces
@@ -24,12 +25,60 @@ from folio_migration_tools.transaction_migration.legacy_request import LegacyReq
24
25
 
25
26
  class RequestsMigrator(MigrationTaskBase):
26
27
  class TaskConfiguration(AbstractTaskConfiguration):
27
- name: str
28
- migration_task_type: str
29
- open_requests_file: FileDefinition
30
- starting_row: Optional[int] = 1
31
- item_files: Optional[list[FileDefinition]] = []
32
- patron_files: Optional[list[FileDefinition]] = []
28
+ name: Annotated[
29
+ str,
30
+ Field(
31
+ title="Task name",
32
+ description=(
33
+ "Name of this migration task. The name is being used to call "
34
+ "the specific task, and to distinguish tasks of similar types"
35
+ )
36
+ ),
37
+ ]
38
+ migration_task_type: Annotated[
39
+ str,
40
+ Field(
41
+ title="Migration task type",
42
+ description="The type of migration task you want to perform",
43
+ ),
44
+ ]
45
+ open_requests_file: Annotated[
46
+ FileDefinition,
47
+ Field(
48
+ title="Open requests file",
49
+ description="File with list of open requests",
50
+ ),
51
+ ]
52
+ starting_row: Annotated[
53
+ Optional[int],
54
+ Field(
55
+ title="Starting row",
56
+ description=(
57
+ "Row number to start processing data from. "
58
+ "Optional, by default is first row"
59
+ ),
60
+ ),
61
+ ] = 1
62
+ item_files: Annotated[
63
+ Optional[list[FileDefinition]],
64
+ Field(
65
+ title="Item files",
66
+ description=(
67
+ "List of files containing item data. "
68
+ "Optional, by default is empty list"
69
+ ),
70
+ ),
71
+ ] = []
72
+ patron_files: Annotated[
73
+ Optional[list[FileDefinition]],
74
+ Field(
75
+ title="Patron files",
76
+ description=(
77
+ "List of files containing patron data. "
78
+ "Optional, by default is empty list"
79
+ ),
80
+ ),
81
+ ] = []
33
82
 
34
83
  @staticmethod
35
84
  def get_object_type() -> FOLIONamespaces:
@@ -4,8 +4,9 @@ import logging
4
4
  import sys
5
5
  import time
6
6
  import traceback
7
- from typing import Dict
7
+ from typing import Dict, Annotated
8
8
  from urllib.error import HTTPError
9
+ from pydantic import Field
9
10
 
10
11
  import httpx
11
12
  import i18n
@@ -25,9 +26,30 @@ from folio_migration_tools.transaction_migration.legacy_reserve import LegacyRes
25
26
 
26
27
  class ReservesMigrator(MigrationTaskBase):
27
28
  class TaskConfiguration(AbstractTaskConfiguration):
28
- name: str
29
- migration_task_type: str
30
- course_reserve_file_path: FileDefinition
29
+ name: Annotated[
30
+ str,
31
+ Field(
32
+ title="Migration task name",
33
+ description=(
34
+ "Name of this migration task. The name is being used to call the specific "
35
+ "task, and to distinguish tasks of similar types"
36
+ ),
37
+ ),
38
+ ]
39
+ migration_task_type: Annotated[
40
+ str,
41
+ Field(
42
+ title="Migration task type",
43
+ description="The type of migration task you want to perform",
44
+ ),
45
+ ]
46
+ course_reserve_file_path: Annotated[
47
+ FileDefinition,
48
+ Field(
49
+ title="Course reserve file path",
50
+ description="Path to the file with course reserves",
51
+ ),
52
+ ]
31
53
 
32
54
  @staticmethod
33
55
  def get_object_type() -> FOLIONamespaces:
@@ -1,7 +1,8 @@
1
1
  import json
2
2
  import logging
3
3
  import sys
4
- from typing import Optional
4
+ from typing import Optional, Annotated
5
+ from pydantic import Field
5
6
 
6
7
  import i18n
7
8
  from folio_uuid.folio_namespaces import FOLIONamespaces
@@ -25,15 +26,84 @@ from folio_migration_tools.task_configuration import AbstractTaskConfiguration
25
26
 
26
27
  class UserTransformer(MigrationTaskBase):
27
28
  class TaskConfiguration(AbstractTaskConfiguration):
28
- name: str
29
- migration_task_type: str
30
- group_map_path: str
31
- departments_map_path: Optional[str] = ""
32
- use_group_map: Optional[bool] = True
33
- user_mapping_file_name: str
34
- user_file: FileDefinition
35
- remove_id_and_request_preferences: Optional[bool] = False
36
- remove_request_preferences: Optional[bool] = False
29
+ name: Annotated[
30
+ str,
31
+ Field(
32
+ title="Migration task name",
33
+ description=(
34
+ "Name of this migration task. The name is being used to call "
35
+ "the specific task, and to distinguish tasks of similar types"
36
+ ),
37
+ ),
38
+ ]
39
+ migration_task_type: Annotated[
40
+ str,
41
+ Field(
42
+ title="Migration task type",
43
+ description="The type of migration task you want to perform",
44
+ ),
45
+ ]
46
+ group_map_path: Annotated[
47
+ str,
48
+ Field(
49
+ title="Group map path",
50
+ description="Define the path for group mapping",
51
+ )
52
+ ]
53
+ departments_map_path: Annotated[
54
+ Optional[str],
55
+ Field(
56
+ title="Departments map path",
57
+ description=(
58
+ "Define the path for departments mapping. "
59
+ "Optional, by dfault is empty string"
60
+ ),
61
+ )
62
+ ] = ""
63
+ use_group_map: Annotated[
64
+ Optional[bool],
65
+ Field(
66
+ title="Use group map",
67
+ description=(
68
+ "Specify whether to use group mapping. "
69
+ "Optional, by default is True"
70
+ ),
71
+ )
72
+ ] = True
73
+ user_mapping_file_name: Annotated[
74
+ str,
75
+ Field(
76
+ title="User mapping file name",
77
+ description="Specify the user mapping file name",
78
+ )
79
+ ]
80
+ user_file: Annotated[
81
+ FileDefinition,
82
+ Field(
83
+ title="User file",
84
+ description="Select the user data file",
85
+ )
86
+ ]
87
+ remove_id_and_request_preferences: Annotated[
88
+ Optional[bool],
89
+ Field(
90
+ title="Remove ID and request preferences",
91
+ description=(
92
+ "Specify whether to remove user ID and request preferences. "
93
+ "Optional, by default is False"
94
+ ),
95
+ )
96
+ ] = False
97
+ remove_request_preferences: Annotated[
98
+ Optional[bool],
99
+ Field(
100
+ title="Remove request preferences",
101
+ description=(
102
+ "Specify whether to remove user request preferences. "
103
+ "Optional, by default is False"
104
+ ),
105
+ )
106
+ ] = False
37
107
 
38
108
  @staticmethod
39
109
  def get_object_type() -> FOLIONamespaces:
@@ -128,7 +198,7 @@ class UserTransformer(MigrationTaskBase):
128
198
  print_email_warning()
129
199
  folio_user, index_or_id = self.mapper.do_map(
130
200
  legacy_user,
131
- num_users,
201
+ str(num_users),
132
202
  FOLIONamespaces.users,
133
203
  )
134
204
  folio_user = self.mapper.perform_additional_mapping(
@@ -168,9 +238,9 @@ class UserTransformer(MigrationTaskBase):
168
238
  logging.error(ee, exc_info=True)
169
239
 
170
240
  self.total_records = num_users
171
- except FileNotFoundError as fnfe:
241
+ except FileNotFoundError as fn:
172
242
  logging.exception("File not found")
173
- print(f"\n{fnfe}")
243
+ print(f"\n{fn}")
174
244
  sys.exit(1)
175
245
 
176
246
  def wrap_up(self):
@@ -214,10 +284,10 @@ class UserTransformer(MigrationTaskBase):
214
284
  def print_email_warning():
215
285
  s = (
216
286
  " ______ __ __ _____ _ _____ ___ \n" # noqa: E501, W605
217
- " | ____| | \/ | /\ |_ _| | | / ____| |__ \ \n" # noqa: E501, W605
218
- " | |__ | \ / | / \ | | | | | (___ ) |\n" # noqa: E501, W605
219
- " | __| | |\/| | / /\ \ | | | | \___ \ / / \n" # noqa: E501, W605
220
- " |______| |_| |_| /_/ \_\ |_____| |______| |_____/ (_) \n" # noqa: E501, W605
287
+ " | ____| | \\/ | /\\ |_ _| | | / ____| |__ \\ \n" # noqa: E501, W605
288
+ " | |__ | \\ / | / \\ | | | | | (___ ) |\n" # noqa: E501, W605
289
+ " | __| | |\\/| | / /\\ \\ | | | | \\___ \\ / / \n" # noqa: E501, W605
290
+ " |______| |_| |_| /_/ \\_\\ |_____| |______| |_____/ (_) \n" # noqa: E501, W605
221
291
  " \n" # noqa: E501, W605
222
292
  " \n"
223
293
  )
@@ -252,4 +322,4 @@ def find_primary_addresses(addresses):
252
322
  primary_true.append(address)
253
323
  else:
254
324
  address["primaryAddress"] = False
255
- return primary_true
325
+ return primary_true
@@ -16,8 +16,8 @@ class AbstractTaskConfiguration(BaseModel):
16
16
  Field(
17
17
  title="ECS tenant ID",
18
18
  description=(
19
- "The tenant ID to use when making requests to FOLIO APIs for this task, if ",
20
- "different from library configuration",
19
+ "The tenant ID to use when making requests to FOLIO APIs "
20
+ "for this task, if different from library configuration",
21
21
  ),
22
22
  ),
23
23
  ] = ""
@@ -91,7 +91,7 @@ class LegacyLoan(object):
91
91
  self.out_date: datetime = temp_date_out
92
92
  self.correct_for_1_day_loans()
93
93
  self.make_utc()
94
- self.renewal_count = int(legacy_loan_dict["renewal_count"])
94
+ self.renewal_count = self.set_renewal_count(legacy_loan_dict)
95
95
  self.next_item_status = legacy_loan_dict.get("next_item_status", "").strip()
96
96
  if self.next_item_status not in legal_statuses:
97
97
  self.errors.append(("Not an allowed status", self.next_item_status))
@@ -101,6 +101,18 @@ class LegacyLoan(object):
101
101
  else fallback_service_point_id
102
102
  )
103
103
 
104
+ def set_renewal_count(self, loan: dict) -> int:
105
+ if "renewal_count" in loan:
106
+ renewal_count = loan["renewal_count"]
107
+ try:
108
+ return int(renewal_count)
109
+ except ValueError:
110
+ self.report(
111
+ f"Unresolvable {renewal_count=} was replaced with 0.")
112
+ else:
113
+ self.report(f"Missing renewal count was replaced with 0.")
114
+ return 0
115
+
104
116
  def correct_for_1_day_loans(self):
105
117
  try:
106
118
  if self.due_date.date() <= self.out_date.date():
@@ -1,7 +1,5 @@
1
1
  import uuid
2
- from typing import Dict
3
- from typing import List
4
- from typing import Tuple
2
+ from typing import Dict, List, Tuple
5
3
 
6
4
  from folio_uuid.folio_namespaces import FOLIONamespaces
7
5
  from folio_uuid.folio_uuid import FolioUUID
@@ -17,9 +15,9 @@ class LegacyReserve(object):
17
15
  for h in correct_headers:
18
16
  if h not in legacy_request_dict:
19
17
  raise TransformationProcessError(
20
- int,
18
+ row,
21
19
  "Missing header in file. The following are required:",
22
- ",".join(correct_headers),
20
+ ", ".join(correct_headers),
23
21
  )
24
22
  self.errors: List[Tuple[str, str]] = [
25
23
  ("Missing properties in legacy data", prop)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: folio_migration_tools
3
- Version: 1.9.0rc2
3
+ Version: 1.9.0rc4
4
4
  Summary: A tool allowing you to migrate data from legacy ILS:s (Library systems) into FOLIO LSP
5
5
  License: MIT
6
6
  Keywords: FOLIO,ILS,LSP,Library Systems,MARC21,Library data
@@ -14,12 +14,12 @@ folio_migration_tools/library_configuration.py,sha256=JE23VSUKDeCxzj_fOeQwkXF4fw
14
14
  folio_migration_tools/mapper_base.py,sha256=4rtZxmWp1qaAIG2awiJ3RElPM9IVA-n8-Qzzs0R31qc,20317
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=GI9xnN74EsUMAshXKNJ6p9bGPdLtK0PCXqbB3nIxrC8,7207
17
+ folio_migration_tools/mapping_file_transformation/holdings_mapper.py,sha256=nJS-xx1LszvbYfw0qdTUHX9xXHlxS7wP5mYmixFMh8A,7221
18
18
  folio_migration_tools/mapping_file_transformation/item_mapper.py,sha256=CWKpve0UdppztCd5ex1dz47g78mTqKkgiij1HEsGMC8,10622
19
19
  folio_migration_tools/mapping_file_transformation/manual_fee_fines_mapper.py,sha256=nCkqbxaDHKxMuqQHh_afxQp48YrVD-SeCZ0L1iGvnkk,13402
20
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=z7FGQ9BDSgIM3AWzw_lw90Ee7zH_zzW2mNqD5iMhr_I,17464
22
+ folio_migration_tools/mapping_file_transformation/order_mapper.py,sha256=k-kIuf2ceXrPWe3oVnfhuQlE7eglcx6PDLVJtddkeiM,17680
23
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
25
  folio_migration_tools/mapping_file_transformation/user_mapper.py,sha256=oWuIPRQL0anF_qTVFibHtc1oOaqyKCBH4O1hX5rQAZQ,7806
@@ -33,35 +33,35 @@ folio_migration_tools/marc_rules_transformation/marc_reader_wrapper.py,sha256=9A
33
33
  folio_migration_tools/marc_rules_transformation/rules_mapper_authorities.py,sha256=GFw8j9UtCxnUdLShmPzJa1MpCK8a0NkQIN5C3jyouRs,9604
34
34
  folio_migration_tools/marc_rules_transformation/rules_mapper_base.py,sha256=WWSJgYvF9LeY8vh-BtQi7Fm3J-cowUJKWa0Wk2Ge7fc,39358
35
35
  folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py,sha256=ckVeysbpW9s19pmHvogdRFOCouzz17Y6oKJD0_QfQAk,28924
36
- folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py,sha256=EBxf9Qh5Y0eDOmqYssWfaizxafiXSYDFzWmCuPtdG-8,18226
36
+ folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py,sha256=gPJaWcvt-CKIJxrEzheRzohnc3mFEnsznuZIXLPhyZM,18954
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=6-PMMvhdoFbydIGeN1duHcoHMEFe4ePGzMX6tP5gxSs,30729
40
+ folio_migration_tools/migration_tasks/batch_poster.py,sha256=xwrjx8Lh--B1tGUcIzzvDi6r_5g3up6rq-6-Z2DY6YQ,35285
41
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=vcBEkH4znw3JU9rgekCXKoHiUXDj9QEZWvhoOtbusOc,15386
46
- folio_migration_tools/migration_tasks/loans_migrator.py,sha256=PCjr_bC2ixhPPk_D54m7B871_bQObn5oP_Sow3ocg54,33238
42
+ folio_migration_tools/migration_tasks/courses_migrator.py,sha256=CzXnsu-KGP7B4zcINJzLYUqz47D16NuFfzu_DPqRlTQ,7061
43
+ folio_migration_tools/migration_tasks/holdings_csv_transformer.py,sha256=WT-RlDRm2ILr2-2shfG3TZ3nlSfqxEXT3TklZSqtJCM,22311
44
+ folio_migration_tools/migration_tasks/holdings_marc_transformer.py,sha256=8dtrhxyA9hbISISzpvMJGYaMaDbtZ1MOZeoJJF5lk24,11164
45
+ folio_migration_tools/migration_tasks/items_transformer.py,sha256=7J222fmUIWeJ-d3Oz7YQeb0zGSQ1ff4aJ19-rfYyMKI,18777
46
+ folio_migration_tools/migration_tasks/loans_migrator.py,sha256=4n7zbwljX_jgj9ltnxZAegjN3e8QJMjr6JJa5XfVueY,34771
47
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
48
+ folio_migration_tools/migration_tasks/migration_task_base.py,sha256=8enHPNrgOHZs5sDGsz0yMPXap0HBprz8-1HVr9udvf0,16704
49
+ folio_migration_tools/migration_tasks/orders_transformer.py,sha256=Q9YU8DUtVBqXfmvwa2LFxsO09h3IRRXXh3xWF5hUNg8,14249
50
+ folio_migration_tools/migration_tasks/organization_transformer.py,sha256=vcCjhN1sS55c_a0LXi1Yw1eq3zpDn5E4BGbm2zDQ_Z4,16885
51
+ folio_migration_tools/migration_tasks/requests_migrator.py,sha256=QP9OBezC3FfcKpI78oMmydxcPaUIYAgHyKevyLwC-WQ,14841
52
+ folio_migration_tools/migration_tasks/reserves_migrator.py,sha256=SA3b7FQWHMHb7bEO8ZqOlblQ9m65zWUMH71uRk-zOKw,9950
53
+ folio_migration_tools/migration_tasks/user_transformer.py,sha256=g-0etM5MpW3gjOrJ4pHotJHfubH8nxsZqUI8ZDi_TC0,12912
54
+ folio_migration_tools/task_configuration.py,sha256=C5-OQtZLH7b4lVeyj5v8OXsqKNN4tzfp9F3b4vhthN4,632
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
58
- folio_migration_tools/transaction_migration/legacy_loan.py,sha256=PUqI2fN3Dx8Jwi2hGtushAB84KZG1XEmFnz8MoZYAlI,5459
58
+ folio_migration_tools/transaction_migration/legacy_loan.py,sha256=M48ZU45yEL1h93Jbld5qKwF1DEKt6sGYPc-t_JgLYX0,5896
59
59
  folio_migration_tools/transaction_migration/legacy_request.py,sha256=1ulyFzPQw_InOjyPzkWpGnNptgXdQ18nmri0J8Nlpkc,6124
60
- folio_migration_tools/transaction_migration/legacy_reserve.py,sha256=rZVtiMBYnt6aI0WxAwPN8fML_MKEUSUYsadCKPTeB4E,1839
60
+ folio_migration_tools/transaction_migration/legacy_reserve.py,sha256=d0qbh2fWpwlVSYRL6wZyZG20__NAYNxh7sPSsB-LAes,1804
61
61
  folio_migration_tools/transaction_migration/transaction_result.py,sha256=cTdCN0BnlI9_ZJB2Z3Fdkl9gpymIi-9mGZsRFlQcmDk,656
62
62
  folio_migration_tools/translations/en.json,sha256=HOVpkb_T-SN_x0NpDp8gyvV1hMLCui3SsG7ByyIv0OU,38669
63
- folio_migration_tools-1.9.0rc2.dist-info/LICENSE,sha256=PhIEkitVi3ejgq56tt6sWoJIG_zmv82cjjd_aYPPGdI,1072
64
- folio_migration_tools-1.9.0rc2.dist-info/METADATA,sha256=USDS4Z7GevPBnNe8l9eBpe8Zy0NiUhQW2kl4K2paHjA,7415
65
- folio_migration_tools-1.9.0rc2.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
66
- folio_migration_tools-1.9.0rc2.dist-info/entry_points.txt,sha256=Hbe-HjqMcU8FwVshVIkeWyZd9XwgT1CCMNf06EpHQu8,77
67
- folio_migration_tools-1.9.0rc2.dist-info/RECORD,,
63
+ folio_migration_tools-1.9.0rc4.dist-info/LICENSE,sha256=PhIEkitVi3ejgq56tt6sWoJIG_zmv82cjjd_aYPPGdI,1072
64
+ folio_migration_tools-1.9.0rc4.dist-info/METADATA,sha256=zh8mko180EbmuZjoSJ9ElvXWmQQVg0TW_NGgjRzS_Qc,7415
65
+ folio_migration_tools-1.9.0rc4.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
66
+ folio_migration_tools-1.9.0rc4.dist-info/entry_points.txt,sha256=Hbe-HjqMcU8FwVshVIkeWyZd9XwgT1CCMNf06EpHQu8,77
67
+ folio_migration_tools-1.9.0rc4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.1
2
+ Generator: poetry-core 2.1.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any