folio-migration-tools 1.9.10__py3-none-any.whl → 1.10.0__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 (57) hide show
  1. folio_migration_tools/__init__.py +3 -4
  2. folio_migration_tools/__main__.py +53 -31
  3. folio_migration_tools/circulation_helper.py +118 -108
  4. folio_migration_tools/custom_dict.py +2 -2
  5. folio_migration_tools/custom_exceptions.py +4 -5
  6. folio_migration_tools/folder_structure.py +17 -7
  7. folio_migration_tools/helper.py +8 -7
  8. folio_migration_tools/holdings_helper.py +4 -3
  9. folio_migration_tools/i18n_cache.py +79 -0
  10. folio_migration_tools/library_configuration.py +77 -37
  11. folio_migration_tools/mapper_base.py +45 -31
  12. folio_migration_tools/mapping_file_transformation/courses_mapper.py +1 -1
  13. folio_migration_tools/mapping_file_transformation/holdings_mapper.py +7 -3
  14. folio_migration_tools/mapping_file_transformation/item_mapper.py +13 -26
  15. folio_migration_tools/mapping_file_transformation/manual_fee_fines_mapper.py +1 -2
  16. folio_migration_tools/mapping_file_transformation/mapping_file_mapper_base.py +13 -11
  17. folio_migration_tools/mapping_file_transformation/order_mapper.py +6 -5
  18. folio_migration_tools/mapping_file_transformation/organization_mapper.py +3 -3
  19. folio_migration_tools/mapping_file_transformation/user_mapper.py +47 -28
  20. folio_migration_tools/marc_rules_transformation/conditions.py +82 -97
  21. folio_migration_tools/marc_rules_transformation/holdings_statementsparser.py +13 -5
  22. folio_migration_tools/marc_rules_transformation/hrid_handler.py +3 -2
  23. folio_migration_tools/marc_rules_transformation/marc_file_processor.py +26 -24
  24. folio_migration_tools/marc_rules_transformation/rules_mapper_base.py +56 -51
  25. folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py +28 -17
  26. folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py +68 -37
  27. folio_migration_tools/migration_report.py +18 -7
  28. folio_migration_tools/migration_tasks/batch_poster.py +285 -354
  29. folio_migration_tools/migration_tasks/bibs_transformer.py +14 -9
  30. folio_migration_tools/migration_tasks/courses_migrator.py +2 -3
  31. folio_migration_tools/migration_tasks/holdings_csv_transformer.py +23 -24
  32. folio_migration_tools/migration_tasks/holdings_marc_transformer.py +14 -24
  33. folio_migration_tools/migration_tasks/items_transformer.py +23 -34
  34. folio_migration_tools/migration_tasks/loans_migrator.py +67 -144
  35. folio_migration_tools/migration_tasks/manual_fee_fines_transformer.py +3 -3
  36. folio_migration_tools/migration_tasks/migration_task_base.py +47 -60
  37. folio_migration_tools/migration_tasks/orders_transformer.py +25 -42
  38. folio_migration_tools/migration_tasks/organization_transformer.py +9 -18
  39. folio_migration_tools/migration_tasks/requests_migrator.py +21 -24
  40. folio_migration_tools/migration_tasks/reserves_migrator.py +6 -5
  41. folio_migration_tools/migration_tasks/user_transformer.py +25 -20
  42. folio_migration_tools/task_configuration.py +6 -7
  43. folio_migration_tools/transaction_migration/legacy_loan.py +15 -27
  44. folio_migration_tools/transaction_migration/legacy_request.py +1 -1
  45. folio_migration_tools/translations/en.json +0 -7
  46. {folio_migration_tools-1.9.10.dist-info → folio_migration_tools-1.10.0.dist-info}/METADATA +19 -28
  47. folio_migration_tools-1.10.0.dist-info/RECORD +63 -0
  48. folio_migration_tools-1.10.0.dist-info/WHEEL +4 -0
  49. folio_migration_tools-1.10.0.dist-info/entry_points.txt +3 -0
  50. folio_migration_tools/marc_rules_transformation/rules_mapper_authorities.py +0 -241
  51. folio_migration_tools/migration_tasks/authority_transformer.py +0 -119
  52. folio_migration_tools/test_infrastructure/__init__.py +0 -0
  53. folio_migration_tools/test_infrastructure/mocked_classes.py +0 -406
  54. folio_migration_tools-1.9.10.dist-info/RECORD +0 -67
  55. folio_migration_tools-1.9.10.dist-info/WHEEL +0 -4
  56. folio_migration_tools-1.9.10.dist-info/entry_points.txt +0 -3
  57. folio_migration_tools-1.9.10.dist-info/licenses/LICENSE +0 -21
@@ -14,6 +14,7 @@ from folio_uuid.folio_namespaces import FOLIONamespaces
14
14
 
15
15
  from folio_migration_tools.custom_dict import InsensitiveDictReader
16
16
  from folio_migration_tools.custom_exceptions import TransformationProcessError
17
+ from folio_migration_tools.i18n_cache import i18n_t
17
18
  from folio_migration_tools.library_configuration import (
18
19
  FileDefinition,
19
20
  LibraryConfiguration,
@@ -59,7 +60,7 @@ class ReservesMigrator(MigrationTaskBase):
59
60
  self,
60
61
  task_configuration: TaskConfiguration,
61
62
  library_config: LibraryConfiguration,
62
- folio_client
63
+ folio_client,
63
64
  ):
64
65
  csv.register_dialect("tsv", delimiter="\t")
65
66
  self.migration_report = MigrationReport()
@@ -90,7 +91,7 @@ class ReservesMigrator(MigrationTaskBase):
90
91
  logging.info("Starting")
91
92
  for num_reserves, legacy_reserve in enumerate(self.valid_reserves, start=1):
92
93
  t0_migration = time.time()
93
- self.migration_report.add_general_statistics(i18n.t("Processed reserves"))
94
+ self.migration_report.add_general_statistics(i18n_t("Processed reserves"))
94
95
  try:
95
96
  self.post_single_reserve(legacy_reserve)
96
97
  except Exception as ee:
@@ -107,10 +108,10 @@ class ReservesMigrator(MigrationTaskBase):
107
108
  path, legacy_reserve.to_dict(), "POST", i18n.t("Posted reserves")
108
109
  ):
109
110
  self.migration_report.add_general_statistics(
110
- i18n.t("Successfully posted reserves")
111
+ i18n_t("Successfully posted reserves")
111
112
  )
112
113
  else:
113
- self.migration_report.add_general_statistics(i18n.t("Failure to post reserve"))
114
+ self.migration_report.add_general_statistics(i18n_t("Failure to post reserve"))
114
115
  except Exception as ee:
115
116
  logging.error(ee)
116
117
 
@@ -123,7 +124,7 @@ class ReservesMigrator(MigrationTaskBase):
123
124
 
124
125
  with open(self.folder_structure.migration_reports_file, "w+") as report_file:
125
126
  self.migration_report.write_migration_report(
126
- i18n.t("Reserves migration report"), report_file, self.start_datetime
127
+ i18n_t("Reserves migration report"), report_file, self.start_datetime
127
128
  )
128
129
  self.clean_out_empty_logs()
129
130
 
@@ -4,7 +4,6 @@ import sys
4
4
  from typing import Optional, Annotated
5
5
  from pydantic import Field
6
6
 
7
- import i18n
8
7
  from folio_uuid.folio_namespaces import FOLIONamespaces
9
8
  from art import tprint
10
9
 
@@ -13,6 +12,7 @@ from folio_migration_tools.custom_exceptions import (
13
12
  TransformationRecordFailedError,
14
13
  )
15
14
  from folio_migration_tools.helper import Helper
15
+ from folio_migration_tools.i18n_cache import i18n_t
16
16
  from folio_migration_tools.library_configuration import (
17
17
  FileDefinition,
18
18
  LibraryConfiguration,
@@ -49,41 +49,37 @@ class UserTransformer(MigrationTaskBase):
49
49
  Field(
50
50
  title="Group map path",
51
51
  description="Define the path for group mapping",
52
- )
52
+ ),
53
53
  ]
54
54
  departments_map_path: Annotated[
55
55
  Optional[str],
56
56
  Field(
57
57
  title="Departments map path",
58
58
  description=(
59
- "Define the path for departments mapping. "
60
- "Optional, by dfault is empty string"
59
+ "Define the path for departments mapping. Optional, by dfault is empty string"
61
60
  ),
62
- )
61
+ ),
63
62
  ] = ""
64
63
  use_group_map: Annotated[
65
64
  Optional[bool],
66
65
  Field(
67
66
  title="Use group map",
68
- description=(
69
- "Specify whether to use group mapping. "
70
- "Optional, by default is True"
71
- ),
72
- )
67
+ description=("Specify whether to use group mapping. Optional, by default is True"),
68
+ ),
73
69
  ] = True
74
70
  user_mapping_file_name: Annotated[
75
71
  str,
76
72
  Field(
77
73
  title="User mapping file name",
78
74
  description="Specify the user mapping file name",
79
- )
75
+ ),
80
76
  ]
81
77
  user_file: Annotated[
82
78
  FileDefinition,
83
79
  Field(
84
80
  title="User file",
85
81
  description="Select the user data file",
86
- )
82
+ ),
87
83
  ]
88
84
  remove_id_and_request_preferences: Annotated[
89
85
  Optional[bool],
@@ -93,7 +89,7 @@ class UserTransformer(MigrationTaskBase):
93
89
  "Specify whether to remove user ID and request preferences. "
94
90
  "Optional, by default is False"
95
91
  ),
96
- )
92
+ ),
97
93
  ] = False
98
94
  remove_request_preferences: Annotated[
99
95
  Optional[bool],
@@ -103,7 +99,17 @@ class UserTransformer(MigrationTaskBase):
103
99
  "Specify whether to remove user request preferences. "
104
100
  "Optional, by default is False"
105
101
  ),
106
- )
102
+ ),
103
+ ] = False
104
+ remove_username: Annotated[
105
+ Optional[bool],
106
+ Field(
107
+ title="Remove username",
108
+ description=(
109
+ "Specify whether to remove username. Resulting objects are not compatible with"
110
+ " the mod-user-import. Optional, by default is False"
111
+ ),
112
+ ),
107
113
  ] = False
108
114
 
109
115
  @staticmethod
@@ -212,13 +218,13 @@ class UserTransformer(MigrationTaskBase):
212
218
  logging.info("## First FOLIO user")
213
219
  logging.info(json.dumps(folio_user, indent=4, sort_keys=True))
214
220
  self.mapper.migration_report.add_general_statistics(
215
- i18n.t("Successful user transformations")
221
+ i18n_t("Successful user transformations")
216
222
  )
217
223
  if num_users % 1000 == 0:
218
224
  logging.info(f"{num_users} users processed.")
219
225
  except TransformationRecordFailedError as tre:
220
226
  self.mapper.migration_report.add_general_statistics(
221
- i18n.t("Records failed")
227
+ i18n_t("Records failed")
222
228
  )
223
229
  Helper.log_data_issue(tre.index_or_id, tre.message, tre.data_value)
224
230
  logging.error(tre)
@@ -235,7 +241,7 @@ class UserTransformer(MigrationTaskBase):
235
241
  logging.error(num_users)
236
242
  logging.error(json.dumps(legacy_user))
237
243
  self.mapper.migration_report.add_general_statistics(
238
- i18n.t("Failed user transformations")
244
+ i18n_t("Failed user transformations")
239
245
  )
240
246
  logging.error(ee, exc_info=True)
241
247
 
@@ -249,7 +255,7 @@ class UserTransformer(MigrationTaskBase):
249
255
  self.extradata_writer.flush()
250
256
  with open(self.folder_structure.migration_reports_file, "w") as migration_report_file:
251
257
  self.mapper.migration_report.write_migration_report(
252
- i18n.t("Users transformation report"),
258
+ i18n_t("Users transformation report"),
253
259
  migration_report_file,
254
260
  self.mapper.start_datetime,
255
261
  )
@@ -306,8 +312,7 @@ def find_primary_addresses(addresses):
306
312
  if "primaryAddress" not in address:
307
313
  address["primaryAddress"] = False
308
314
  elif (
309
- isinstance(address["primaryAddress"], bool)
310
- and address["primaryAddress"] is True
315
+ isinstance(address["primaryAddress"], bool) and address["primaryAddress"] is True
311
316
  ) or (
312
317
  isinstance(address["primaryAddress"], str)
313
318
  and address["primaryAddress"].lower() == "true"
@@ -1,7 +1,7 @@
1
1
  from typing import Annotated
2
2
 
3
3
  from humps import camelize
4
- from pydantic import BaseModel
4
+ from pydantic import BaseModel, ConfigDict
5
5
  from pydantic import Field
6
6
 
7
7
 
@@ -25,9 +25,7 @@ class AbstractTaskConfiguration(BaseModel):
25
25
  str,
26
26
  Field(
27
27
  title="Migration task type",
28
- description=(
29
- "The type of migration task you want to perform."
30
- ),
28
+ description=("The type of migration task you want to perform."),
31
29
  ),
32
30
  ]
33
31
  ecs_tenant_id: Annotated[
@@ -41,6 +39,7 @@ class AbstractTaskConfiguration(BaseModel):
41
39
  ),
42
40
  ] = ""
43
41
 
44
- class Config:
45
- alias_generator = to_camel
46
- allow_population_by_field_name = True
42
+ model_config = ConfigDict(
43
+ alias_generator=to_camel,
44
+ populate_by_name=True,
45
+ )
@@ -67,10 +67,11 @@ class LegacyLoan(object):
67
67
  self.row,
68
68
  f"Provided due_date is not UTC in {row=}, "
69
69
  f"setting tz-info to tenant timezone ({self.tenant_timezone})",
70
- json.dumps(self.legacy_loan_dict)
70
+ json.dumps(self.legacy_loan_dict),
71
71
  )
72
72
  self.report(
73
- f"Provided due_date is not UTC, setting tz-info to tenant timezone ({self.tenant_timezone})"
73
+ "Provided due_date is not UTC, setting tz-info to tenant "
74
+ f"timezone ({self.tenant_timezone})"
74
75
  )
75
76
  if temp_date_due.hour == 0 and temp_date_due.minute == 0:
76
77
  temp_date_due = temp_date_due.replace(hour=23, minute=59)
@@ -78,16 +79,12 @@ class LegacyLoan(object):
78
79
  self.row,
79
80
  f"Hour and minute not specified for due date in {row=}. "
80
81
  "Assuming end of local calendar day (23:59)...",
81
- json.dumps(self.legacy_loan_dict)
82
- )
83
- self.report(
84
- "Hour and minute not specified for due date"
82
+ json.dumps(self.legacy_loan_dict),
85
83
  )
84
+ self.report("Hour and minute not specified for due date")
86
85
  except (ParserError, OverflowError) as ee:
87
86
  logging.error(ee)
88
- self.errors.append(
89
- (f"Parse date failure in {row=}. Setting UTC NOW", "due_date")
90
- )
87
+ self.errors.append((f"Parse date failure in {row=}. Setting UTC NOW", "due_date"))
91
88
  temp_date_due = datetime.now(ZoneInfo("UTC"))
92
89
  try:
93
90
  temp_date_out: datetime = parse(self.legacy_loan_dict["out_date"])
@@ -97,33 +94,28 @@ class LegacyLoan(object):
97
94
  self.row,
98
95
  f"Provided out_date is not UTC in {row=}, "
99
96
  f"setting tz-info to tenant timezone ({self.tenant_timezone})",
100
- json.dumps(self.legacy_loan_dict)
97
+ json.dumps(self.legacy_loan_dict),
101
98
  )
102
99
  self.report(
103
- f"Provided out_date is not UTC, setting tz-info to tenant timezone ({self.tenant_timezone})"
100
+ "Provided out_date is not UTC, setting tz-info to tenant "
101
+ f"timezone ({self.tenant_timezone})"
104
102
  )
105
103
  except (ParserError, OverflowError):
106
104
  temp_date_out = datetime.now(
107
105
  ZoneInfo("UTC")
108
106
  ) # TODO: Consider moving this assignment block above the temp_date_due
109
- self.errors.append(
110
- (f"Parse date failure in {row=}. Setting UTC NOW", "out_date")
111
- )
107
+ self.errors.append((f"Parse date failure in {row=}. Setting UTC NOW", "out_date"))
112
108
 
113
109
  # good to go, set properties
114
110
  self.item_barcode: str = self.legacy_loan_dict["item_barcode"].strip()
115
111
  self.patron_barcode: str = self.legacy_loan_dict["patron_barcode"].strip()
116
- self.proxy_patron_barcode: str = self.legacy_loan_dict.get(
117
- "proxy_patron_barcode", ""
118
- )
112
+ self.proxy_patron_barcode: str = self.legacy_loan_dict.get("proxy_patron_barcode", "")
119
113
  self.due_date: datetime = temp_date_due
120
114
  self.out_date: datetime = temp_date_out
121
115
  self.correct_for_1_day_loans()
122
116
  self.make_utc()
123
117
  self.renewal_count = self.set_renewal_count(self.legacy_loan_dict)
124
- self.next_item_status = self.legacy_loan_dict.get(
125
- "next_item_status", ""
126
- ).strip()
118
+ self.next_item_status = self.legacy_loan_dict.get("next_item_status", "").strip()
127
119
  if self.next_item_status not in legal_statuses:
128
120
  self.errors.append((f"Not an allowed status {row=}", self.next_item_status))
129
121
  self.service_point_id = (
@@ -141,13 +133,11 @@ class LegacyLoan(object):
141
133
  Helper.log_data_issue(
142
134
  self.row,
143
135
  i18n.t("Unresolvable %{renewal_count=} was replaced with 0."),
144
- json.dumps(loan)
136
+ json.dumps(loan),
145
137
  )
146
138
  else:
147
139
  Helper.log_data_issue(
148
- self.row,
149
- i18n.t("Missing renewal count was replaced with 0."),
150
- json.dumps(loan)
140
+ self.row, i18n.t("Missing renewal count was replaced with 0."), json.dumps(loan)
151
141
  )
152
142
  return 0
153
143
 
@@ -160,9 +150,7 @@ class LegacyLoan(object):
160
150
  if self.due_date <= self.out_date:
161
151
  raise TransformationRecordFailedError(
162
152
  self.row,
163
- i18n.t(
164
- "Due date is before out date, or date information is missing from both"
165
- ),
153
+ i18n.t("Due date is before out date, or date information is missing from both"),
166
154
  json.dumps(self.legacy_loan_dict, indent=2),
167
155
  )
168
156
 
@@ -122,7 +122,7 @@ class LegacyRequest(object):
122
122
  missing = [r for r in required if not req.get(r, "")]
123
123
  if any(missing):
124
124
  raise TransformationRecordFailedError(
125
- "", "Required properties missing:" ", ".join(missing)
125
+ "", "Required properties missing:, ".join(missing)
126
126
  )
127
127
  return req
128
128
 
@@ -24,7 +24,6 @@
24
24
  "Aged to lost and checked out": "Aged to lost and checked out",
25
25
  "Already set to %{value}. %{leader_key} was %{leader}": "Already set to %{value}. %{leader_key} was %{leader}",
26
26
  "An Unmapped": "An Unmapped",
27
- "Authority records transformation report": "Authority records transformation report",
28
27
  "BW Items found tied to previously created BW Holdings": "BW Items found tied to previously created BW Holdings",
29
28
  "Bib identifier not in instances_id_map, no instance linked": "Bib identifier not in instances_id_map, no instance linked",
30
29
  "Bib ids referenced in bound-with items": "Bib ids referenced in bound-with items",
@@ -264,12 +263,6 @@
264
263
  "blurbs.AcquisitionMethodMapping.title": "POL Acquisition Method Mapping",
265
264
  "blurbs.AddedValueFromParameter.description": "",
266
265
  "blurbs.AddedValueFromParameter.title": "Added value from parameter since value is empty",
267
- "blurbs.AuthorityEncodingLevel.description": "Library action: **All values that are not n or o will be set to n. If this is not what you want, you need to correct these values in your system. **<br/>An overview of the Encoding levels (Leader position 17) present in your source data. Allowed values according to the MARC standard are n or o",
268
- "blurbs.AuthorityEncodingLevel.title": "Encoding level (leader pos 17)",
269
- "blurbs.AuthoritySourceFileMapping.description": "Mappings based on FOLIO authority `naturalId` alpha prefix",
270
- "blurbs.AuthoritySourceFileMapping.title": "Authority Source File Mapping Results",
271
- "blurbs.AuthoritySources.description": "",
272
- "blurbs.AuthoritySources.title": "Authorization sources and related information",
273
266
  "blurbs.BoundWithMappings.description": "",
274
267
  "blurbs.BoundWithMappings.title": "Bound-with mapping",
275
268
  "blurbs.CallNumberTypeMapping.description": "Call number types in MFHDs are mapped from 852, Indicator 1 according to a certain scheme. (LOC documentation)[https://www.loc.gov/marc/holdings/hd852.html]",
@@ -1,33 +1,25 @@
1
1
  Metadata-Version: 2.4
2
- Name: folio_migration_tools
3
- Version: 1.9.10
2
+ Name: folio-migration-tools
3
+ Version: 1.10.0
4
4
  Summary: A tool allowing you to migrate data from legacy ILS:s (Library systems) into FOLIO LSP
5
- License-Expression: MIT
6
- License-File: LICENSE
7
5
  Keywords: FOLIO,ILS,LSP,Library Systems,MARC21,Library data
8
- Author: Theodor Tolstoy
9
- Author-email: github.teddes@tolstoy.se
10
- Requires-Python: >=3.10,<4.0
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
- Classifier: Programming Language :: Python :: 3.14
17
- Provides-Extra: docs
18
- Requires-Dist: argparse-prompt (>=0.0.5,<0.0.6)
19
- Requires-Dist: art (>=6.5,<7.0)
20
- Requires-Dist: deepdiff (>=6.2.3,<7.0.0)
21
- Requires-Dist: defusedxml (>=0.7.1,<0.8.0)
22
- Requires-Dist: folio-data-import (>=0.4.1)
23
- Requires-Dist: folio-uuid (>=1.0.0,<2.0.0)
24
- Requires-Dist: folioclient (>=0.70.1,<0.71.0)
25
- Requires-Dist: pyaml (>=21.10.1,<22.0.0)
26
- Requires-Dist: pydantic (>=1.10.2,<2.0.0)
27
- Requires-Dist: pyhumps (>=3.7.3,<4.0.0)
28
- Requires-Dist: pymarc (>=5.2.3,<6.0.0)
29
- Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
30
- Requires-Dist: python-i18n (>=0.3.9,<0.4.0)
6
+ Author: Theodor Tolstoy, Lisa Sjögren, Brooks Travis, Jeremy Nelson, Clinton Bradford
7
+ Author-email: Theodor Tolstoy <github.teddes@tolstoy.se>, Brooks Travis <brooks.travis@gmail.com>
8
+ License-Expression: MIT
9
+ Requires-Dist: folioclient>=1.0.4
10
+ Requires-Dist: pyhumps>=3.7.3,<4.0.0
11
+ Requires-Dist: defusedxml>=0.7.1,<1.0.0
12
+ Requires-Dist: python-dateutil>=2.8.2,<3.0.0
13
+ Requires-Dist: folio-uuid>=1.0.0,<2.0.0
14
+ Requires-Dist: pymarc>=5.2.3,<6.0.0
15
+ Requires-Dist: pydantic>=2.12.3,<3.0.0
16
+ Requires-Dist: argparse-prompt>=0.0.5,<1.0.0
17
+ Requires-Dist: deepdiff>=6.2.3,<7.0.0
18
+ Requires-Dist: pyaml>=21.10.1,<22.0.0
19
+ Requires-Dist: python-i18n>=0.3.9,<1.0.0
20
+ Requires-Dist: art>=6.5,<7.0
21
+ Requires-Dist: folio-data-import>=0.5.0,<0.6.0
22
+ Requires-Python: >=3.10, <4.0
31
23
  Project-URL: Documentation, https://folio-migration-tools.readthedocs.io/en/latest/
32
24
  Project-URL: Homepage, https://github.com/folio-fse/folio_migration_tools
33
25
  Project-URL: Repository, https://github.com/FOLIO-FSE/folio_migration_tools
@@ -166,4 +158,3 @@ Translate all new strings, which begin with `TRANSLATE`, then commit.
166
158
  # Running the scripts
167
159
  For information on syntax, what files are needed and produced by the toolkit, refer to the documentation and example files in the [template repository](https://github.com/FOLIO-FSE/migration_repo_template). We are building out the docs section in this repository as well:[Documentation](https://folio-migration-tools.readthedocs.io/en/latest/)
168
160
  ¨
169
-
@@ -0,0 +1,63 @@
1
+ folio_migration_tools/__init__.py,sha256=lnYgqA47l0iA-iORkVH3dgevk7gyGxVwg3MnLltA-U8,223
2
+ folio_migration_tools/__main__.py,sha256=KJdmLkKwAygTKuIKfvDL3M0JdVgsCbf2_LTL1FP6GxU,9233
3
+ folio_migration_tools/circulation_helper.py,sha256=CIrr_8DVDlFN8gvNKRBxgOqW8zNRamP7SZtxOdzz5PQ,14713
4
+ folio_migration_tools/colors.py,sha256=GP0wdI_GZ2WD5SjrbPN-S3u8vvN_u6rGQIBBcWv_0ZM,227
5
+ folio_migration_tools/config_file_load.py,sha256=zHHa6NDkN6EJiQE4DgjrFQPVKsd70POsfbGkB8308jg,2822
6
+ folio_migration_tools/custom_dict.py,sha256=rRd9_RQqI85171p7wTfpMM0Mladh-LChbgMSmLvN7N0,680
7
+ folio_migration_tools/custom_exceptions.py,sha256=BLP1gMPbTHSN-rqxzTawT4sRLiyAU3blBdkUBwiiPRk,2642
8
+ folio_migration_tools/extradata_writer.py,sha256=fuchNcMc6BYb9IyfAcvXg7X4J2TfX6YiROfT2hr0JMw,1678
9
+ folio_migration_tools/folder_structure.py,sha256=YTLCjmiY0RhQwsCiXSQ0awkLOncZZmLdFuaP7rDVAIY,7301
10
+ folio_migration_tools/helper.py,sha256=t2SgSkNKqdz1eenZjpqgokrLnFQcx7vO7xeQ-UxTniE,3020
11
+ folio_migration_tools/holdings_helper.py,sha256=Thx8vJyEZKuJTQvgPODtaUv73Dhmqb_Nb4JprGyhV4U,7611
12
+ folio_migration_tools/i18n_cache.py,sha256=wOJc3OkHwItlFNC2jQB5R9AoIga0g0P1YhQqHgjeqK4,2858
13
+ folio_migration_tools/i18n_config.py,sha256=3AH_2b9zTsxE4XTe4isM_zYtPJSlK0ix6eBmV7kAYUM,228
14
+ folio_migration_tools/library_configuration.py,sha256=lgfnY1yXIK-sNlfooV646H6O0QEUvF-yRRh-YdOGjG4,8993
15
+ folio_migration_tools/mapper_base.py,sha256=sSnPK9yicr7fJEvlfG8AHN2Ght4FVwiqcUR3gRKHYS8,23777
16
+ folio_migration_tools/mapping_file_transformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ folio_migration_tools/mapping_file_transformation/courses_mapper.py,sha256=ZRQ8KNgmM4Ki3ZQ3eqwyceOM55Bn8t3ZT8Pn3T-wmK8,8092
18
+ folio_migration_tools/mapping_file_transformation/holdings_mapper.py,sha256=1y64W1i4v3lV7LD0_QwrHBPx6HkA1o5muyXpWKiH2Hk,8305
19
+ folio_migration_tools/mapping_file_transformation/item_mapper.py,sha256=t2s0ShczOzz67pHwngKpxkpxDVnSNHLD3S1tJm83yOg,10257
20
+ folio_migration_tools/mapping_file_transformation/manual_fee_fines_mapper.py,sha256=CarOu2tUVXZ0mVxlM4Ahrxlc87znlLZWKLp4ZBTgols,13415
21
+ folio_migration_tools/mapping_file_transformation/mapping_file_mapper_base.py,sha256=M7Abf2Vh81vzTkmTmZSYAE6SjIQAjXzLOGUWJ1923TI,38474
22
+ folio_migration_tools/mapping_file_transformation/notes_mapper.py,sha256=vCmZmjrjyYtXeFCyVqvWfnP8y1jGGu15RXzXIHh12xY,3530
23
+ folio_migration_tools/mapping_file_transformation/order_mapper.py,sha256=VUcbeBGlQ7KsDPgJlaOOe8bO0y5IRLTCBH_IQKcaqiA,18267
24
+ folio_migration_tools/mapping_file_transformation/organization_mapper.py,sha256=MKlN3doQ_R-Y3klkbCFL4qHUfhMATBsIhvq1jpmajqQ,14641
25
+ folio_migration_tools/mapping_file_transformation/ref_data_mapping.py,sha256=rROcBiL5TE7bWsJ95A6shurPZ1e4In6PTwR5BN9amzU,8991
26
+ folio_migration_tools/mapping_file_transformation/user_mapper.py,sha256=nqyoSQAo3IGAAzXVRM-R0M5Q83zS3uU6jvKx4_c1mt8,8940
27
+ folio_migration_tools/marc_rules_transformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ folio_migration_tools/marc_rules_transformation/conditions.py,sha256=-5U6nBGcBO49C9MMyxOL2wMhHGxUawkIM9e-MwNaM_4,46938
29
+ folio_migration_tools/marc_rules_transformation/holdings_statementsparser.py,sha256=-mOGtoPa3qmEqGWtyBTN-fQ743ZmT8caDLc9ES9J74Y,13667
30
+ folio_migration_tools/marc_rules_transformation/hrid_handler.py,sha256=WudBOzCwcJAuhEm4urLhAk5OQWGfbKz9_4Ou8fmjm1E,10022
31
+ folio_migration_tools/marc_rules_transformation/loc_language_codes.xml,sha256=ztn2_yKws6qySL4oSsZh7sOjxq5bCC1PhAnXJdtgmJ0,382912
32
+ folio_migration_tools/marc_rules_transformation/marc_file_processor.py,sha256=o03d_G-4MR4e5VPfu7ljxAVDl79o2ONpQIqQ-V2RCdA,12523
33
+ folio_migration_tools/marc_rules_transformation/marc_reader_wrapper.py,sha256=9ATjYMRAjy0QcXtmNZaHVhHLJ5hE1WUgOcF6KMJjbgo,5309
34
+ folio_migration_tools/marc_rules_transformation/rules_mapper_base.py,sha256=xxLH27uGGUyMjpE_Hdh1c1kGhg4X0eANm3dq49TfqNs,45909
35
+ folio_migration_tools/marc_rules_transformation/rules_mapper_bibs.py,sha256=f62Ig0Nqe0szUHzr7th6V65kcsfzhtzKzjGkxAc7ui4,30480
36
+ folio_migration_tools/marc_rules_transformation/rules_mapper_holdings.py,sha256=zMmS2j4_HegVFlQMerTuZzH0WyGILJcRITzrGSeyll4,29236
37
+ folio_migration_tools/migration_report.py,sha256=Hecfb9XcXhH01VgHWD4D0e4dQwGMlanm6mgVuLBolu4,4589
38
+ folio_migration_tools/migration_tasks/__init__.py,sha256=ZkbY_yGyB84Ke8OMlYUzyyBj4cxxNrhMTwQlu_GbdDs,211
39
+ folio_migration_tools/migration_tasks/batch_poster.py,sha256=XKtCM0HgHJNuWR4NGA2r9bedvO_KLPlzPwHg4qQrzsg,46254
40
+ folio_migration_tools/migration_tasks/bibs_transformer.py,sha256=zAKKAyLmqv2-AaJsP0sLHg4lQVEJtVyJjKJwmVG_xys,6391
41
+ folio_migration_tools/migration_tasks/courses_migrator.py,sha256=sKIeyUlc7o189lw88XbGILVkwnR9krqO0PgS-vLCCm8,7039
42
+ folio_migration_tools/migration_tasks/holdings_csv_transformer.py,sha256=-SKgDJLNAWamLAfXEyJVC9vZCKUY3eyZqVfA_oaVmmU,21955
43
+ folio_migration_tools/migration_tasks/holdings_marc_transformer.py,sha256=L4oY0N25NLk_rbzO6HsMbGRh-aeG7LWgr_xypFOJzGw,14231
44
+ folio_migration_tools/migration_tasks/items_transformer.py,sha256=GKDer0Nwff_1Wv5wOofElC84I4ZDRg0w2oTZZB-xGCU,19551
45
+ folio_migration_tools/migration_tasks/loans_migrator.py,sha256=vSmhcyUJraPRY3GNc4F4sUN3GHYHQCO_Nfc1XJaL3tY,38837
46
+ folio_migration_tools/migration_tasks/manual_fee_fines_transformer.py,sha256=qFu5QcaFIvo7K8DD6VEgtJ1h9InHr1x5-D3pdcXt4bg,7287
47
+ folio_migration_tools/migration_tasks/migration_task_base.py,sha256=rhIYFZ_dYWEyopkR2shht5ybKk4JQzxctSlBizml50g,22551
48
+ folio_migration_tools/migration_tasks/orders_transformer.py,sha256=XaQ0q6Hoe2n-NsrjxE_iB5n5CC69F4-WW6xN_EC5WHI,13937
49
+ folio_migration_tools/migration_tasks/organization_transformer.py,sha256=5s-ACb9-R8JLlPnROOq1ZnDIRCLQeWaxORDn0SrhQqs,16747
50
+ folio_migration_tools/migration_tasks/requests_migrator.py,sha256=6WtYyMNGEQgyCHwgUWj9K_fpWtXfcCiZFy56Y2ZJSIw,14820
51
+ folio_migration_tools/migration_tasks/reserves_migrator.py,sha256=RQdAQQORgHUJzA3DyVLVJ9N_fqNj2mDG688fWRSvda0,10005
52
+ folio_migration_tools/migration_tasks/user_transformer.py,sha256=p_B-Ywnk4d6c-gEyU24sv2YpZYByJFfDJRGlidXSed0,12661
53
+ folio_migration_tools/task_configuration.py,sha256=6eqbjjSWfi-qgp0bhCsuBVE3gTK4HaXzXsAo68JPGc0,1146
54
+ folio_migration_tools/transaction_migration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ folio_migration_tools/transaction_migration/legacy_loan.py,sha256=A5qvThfP3g62YnykLyti_tqTY7dq1SbLi3WZz7QXk6s,7399
56
+ folio_migration_tools/transaction_migration/legacy_request.py,sha256=Kv7jpBIuZ_qyay8BdaeCPJID67l43Cl6x-ws9Lt49NI,6121
57
+ folio_migration_tools/transaction_migration/legacy_reserve.py,sha256=qzw0okg4axAE_ezXopP9gFsQ_e60o0zh7zqRzFBSWHY,1806
58
+ folio_migration_tools/transaction_migration/transaction_result.py,sha256=cTdCN0BnlI9_ZJB2Z3Fdkl9gpymIi-9mGZsRFlQcmDk,656
59
+ folio_migration_tools/translations/en.json,sha256=pS7dhHmj4XBqTcFNIcqFgRMY557fQan1RomdNg6PtdA,40941
60
+ folio_migration_tools-1.10.0.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
61
+ folio_migration_tools-1.10.0.dist-info/entry_points.txt,sha256=mJRRiCNP9j7_NpVXamHEiW8pDEjWQs1vEqD89G354cM,79
62
+ folio_migration_tools-1.10.0.dist-info/METADATA,sha256=siV2h9AlkY0MczWX75nmZip0zJtw4y5JBAiiwkKYYBM,7207
63
+ folio_migration_tools-1.10.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: uv 0.8.24
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ folio-migration-tools = folio_migration_tools.__main__:main
3
+