warn-transformer 1.3.276__py3-none-any.whl → 1.3.278__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.

Potentially problematic release.


This version of warn-transformer might be problematic. Click here for more details.

@@ -182,6 +182,7 @@ class Transformer(BaseTransformer):
182
182
  "1/4/26 & 1/23/26": datetime(2026, 1, 4),
183
183
  "1/15/26 & 1/17/26": datetime(2026, 1, 15),
184
184
  "11/19/25 - 12/2/25": datetime(2025, 11, 19),
185
+ "11/19/25 - 12/15/25": datetime(2025, 11, 19),
185
186
  }
186
187
 
187
188
  def transform_jobs(self, value: str) -> typing.Optional[int]:
@@ -0,0 +1,243 @@
1
+ import typing
2
+ from datetime import datetime
3
+
4
+ from ..schema import BaseTransformer
5
+
6
+
7
+ class Transformer(BaseTransformer):
8
+ """Transform Pennsylvania raw data for consolidation."""
9
+
10
+ postal_code = "PA"
11
+ fields = dict(
12
+ company="company",
13
+ location="county",
14
+ # notice_date="Date Received",
15
+ effective_date="date_effective",
16
+ jobs="jobs",
17
+ )
18
+ date_format = ["%m/%d/%Y", "%m/%d/%y"]
19
+ date_corrections = {
20
+ "Unknown": None,
21
+ "": None,
22
+ "beginning 10/9/25; ending 10/31/25": datetime(2025, 10, 9),
23
+ "beginning 8/26/2025; ending 9/9/2025": datetime(2025, 8, 26),
24
+ "beginning 9/1/2025; ending 9/15/2025": datetime(2025, 9, 1),
25
+ "8/30/2025 - 12/31/2025": datetime(2025, 8, 30),
26
+ "beginning 8/18/2025; ending 12/31/2026": datetime(2025, 8, 18),
27
+ "beginning 8/12/25; ending 10/18/25": datetime(2025, 8, 12),
28
+ "beginning 6/13/25; ending 6/30/25": datetime(2025, 6, 13),
29
+ "beginning 1/17/25; ending 6/30/25": datetime(2025, 1, 17),
30
+ "beginning 7/31/25; ending 8/3/25": datetime(2025, 7, 31),
31
+ "8/25/2025 - 9/8/2025": datetime(2025, 8, 25),
32
+ "5/5/2025 @ Etters location; 6/4/2025 @ Philadelphia location": datetime(
33
+ 2025, 5, 5
34
+ ),
35
+ "7/1/2025 - 7/15/2025": datetime(2025, 7, 1),
36
+ "8/1/2025 - 12/31/2025": datetime(2025, 8, 1),
37
+ "beginning 4/25/25; ending 5/2/25": datetime(2025, 4, 25),
38
+ "first wave - 6/9/2025 impacting 192 workers ... second wave - 9/30/2025 impacting 106 workers ... final wave ending - 11/17/2025 impacting 25 workers": datetime(
39
+ 2025, 6, 9
40
+ ),
41
+ "4/22/2025 for Frankford Avenue location ... 4/24/2025 for Castor Avenue location": datetime(
42
+ 2025, 4, 22
43
+ ),
44
+ "first wave - 5/9/2025 impacting 124 workers ... second wave - 7/1/2025 impacting 112 workers ... final wave ending - 12/31/2025 impacting 62 workers": datetime(
45
+ 2025, 5, 9
46
+ ),
47
+ "6/27/2025 - 12/31/2025": datetime(2025, 6, 27),
48
+ "beginning: 3/24/2025; ending: 4/12/2025": datetime(2025, 3, 24),
49
+ "May 19, 23, 30 ... June 6, 20, 27 ... July 11, 18 ... August 8, 22, 29 ... September 12": datetime(
50
+ 2025, 5, 19
51
+ ),
52
+ "first round -- 5/16 through 5/30; second round -- 6/23 through 7/7; final round -- sometime in 2026": datetime(
53
+ 2025, 5, 16
54
+ ),
55
+ "4/23/25; ending: 5/7/25": datetime(2025, 4, 23),
56
+ "4/9/25-10/15/25": datetime(2025, 4, 9),
57
+ "5/26/25-5/30/25": datetime(2025, 1, 31),
58
+ "1/31/25-3/31/25": datetime(2025, 1, 31),
59
+ "beginning: 3/18/25; ending: 3/31/25": datetime(2025, 3, 18),
60
+ "beginning: 1/6/2025; completed: 3/31/2025": datetime(2025, 1, 6),
61
+ "Layoff date: 2/18/2025; Closure date: 2/21/2025": datetime(2025, 2, 18),
62
+ "2/17/2025 through 3/3/2025": datetime(2025, 2, 17),
63
+ "Layoffs: 1/25/2025; Closure: 1/31/2025": datetime(2025, 1, 25),
64
+ "beginning: 1/1/2025; ending: 1/3/2025": datetime(2025, 1, 1),
65
+ "1/3/2025 - 1/31/2026": datetime(2025, 1, 3),
66
+ "1. 1/15/2025 ... 2. 1/22/2025 ... 3. 2/12/2025": datetime(2025, 1, 15),
67
+ "beginning: 12/14/2024; ending: 12/28/2024": datetime(2024, 12, 14),
68
+ "12/9/2024 -- 173 workers ... 12/20/2024 -- 60 workers ... 1/13/2025 -- 2 workers ... 1/27/2025 -- 9 workers ... 2/17/2025 -- 26 workers": datetime(
69
+ 2024, 12, 9
70
+ ),
71
+ "beginning: 11/30/24; ending: 12/3/24": datetime(2024, 11, 30),
72
+ "11/27/2024 - 12/31/2024": datetime(2024, 11, 27),
73
+ "11/10/2024 ": datetime(2024, 11, 10),
74
+ "11/22/2024 ": datetime(2024, 11, 22),
75
+ "9/23/2024 ": datetime(2024, 9, 23),
76
+ "11/22 /2024 ": datetime(2024, 11, 22),
77
+ "beginning: 10/26/2024; ending: 11/9/2024 ": datetime(2024, 10, 26),
78
+ "beginning: 10/27/2024; ending: 11/10/2024": datetime(2024, 10, 27),
79
+ "8/30/2024 - 10/4/2024": datetime(2024, 8, 30),
80
+ "beginning: 10/7/2024; ending: 12/31/2024": datetime(2024, 10, 7),
81
+ "6/7 /2024": datetime(2024, 6, 7),
82
+ "8/9 /2024": datetime(2024, 8, 9),
83
+ "8/16 /2024": datetime(2024, 8, 16),
84
+ "8/9/2024 or within a 14-day window ": datetime(2024, 8, 9),
85
+ "beginning: 8/26/2024; E nding: 12/31/2024 ": datetime(2024, 8, 26),
86
+ "beginning: 8/26/2024; E nding: 12/31/2024": datetime(2024, 8, 26),
87
+ "beginning: 8/26/2024; Ending: 12/31/2024": datetime(2024, 8, 26),
88
+ "8/2/2024-8/16/2024": datetime(2024, 8, 2),
89
+ "Beginning 4/20/24; Ending 5/4/2024": datetime(2024, 4, 20),
90
+ "Beginning 4/13/2024; Ending 5/31/2024": datetime(2024, 4, 13),
91
+ "Beginning 2/15/2024; Ending 4/30/2024": datetime(2024, 2, 15),
92
+ "14 day period commencing 4/15/2024": datetime(2024, 4, 15),
93
+ "Beginning 3/8/2024; Ending end of year 2024": datetime(2024, 3, 8),
94
+ "Beginning 1/31/2024; Ending end of year 2024": datetime(2024, 1, 31),
95
+ "3/15/24 - 9/30/24": datetime(2024, 3, 15),
96
+ "Beginning 2/11/2024; Ending 2/25/2024": datetime(2024, 2, 11),
97
+ "Beginning February/March 2024; Ending July 1, 2024": datetime(2024, 2, 1),
98
+ "1/2/2024 and continuing periodically": datetime(2024, 1, 2),
99
+ "1/6/2024 - 3/26/2024": datetime(2024, 1, 6),
100
+ "1/16/2024 - 3/1/2024": datetime(2024, 1, 16),
101
+ "1/18/2024. Additional layoff dates: 2/19/24 & 4/18/24": datetime(2024, 1, 18),
102
+ "beginning: 1/3/2024 (52 employees); ending: 3/31/2024 (128 employees)": datetime(
103
+ 2024, 1, 3
104
+ ),
105
+ "Beginning 12/15/2023 - Ending 9/30/2024": datetime(2023, 12, 15),
106
+ "Beginning 11/20/2023 - Ending 12/15/2023": datetime(2023, 11, 20),
107
+ "9/8/23 - 10/1/23": datetime(2023, 9, 8),
108
+ "Beginning 9/29/23; Ending 11/16/23": datetime(2023, 9, 23),
109
+ "Beginning: October 31, 2023 - ... Ending: April 15, 2024": datetime(
110
+ 2023, 10, 31
111
+ ),
112
+ "Beginning: October 21, 2023 - ... Ending: December 30, 2023": datetime(
113
+ 2023, 10, 21
114
+ ),
115
+ "9/8/23 (96 employees) ... 9/15/23 (66 employees) ... 9/22/23 (36 employees) ... 9/29/23 (26 employees) ... 9/30/23 (1 employee) ... 10/6/23 (13 employees) ... 10/13/23 (37 employees) ... 10/20/23 (34 employees) ... 11/10/23 (10 employees) ... 12/1/23 (61 employees) ... 2/2/24 (13 employees) ... ": datetime(
116
+ 2023, 9, 8
117
+ ),
118
+ "9/8/23 (96 employees)": datetime(2023, 9, 8),
119
+ "Beginning 8/21/23 - Ending 9/19/23": datetime(2023, 8, 21),
120
+ "beginning 5/10/23 and ending 60-74 days thereafter": datetime(2023, 5, 10),
121
+ "7/14/23 (37 workers); 9/15/23 (125 workers)": datetime(2023, 7, 14),
122
+ "04/14 -- 11 Employees ... 05/05 -- 20 Employees ... 06/17 -- 40 Employees ... 07/07 -- 20 Employees ... 08/04 -- 20 Employees ... 09/08 -- 20 Employees ... 10/06 -- 20 Employees ... 11/03 -- 69 Employees ... 12/29 -- 40 Employees": datetime(
123
+ 2023, 4, 14
124
+ ),
125
+ "04/14": datetime(2023, 4, 14),
126
+ "Phase 1: 4/14 ... Phase 2: 5/13 -- 5/27 ... Phase 3: 6/12 -- 8/11": datetime(
127
+ 2023, 4, 14
128
+ ),
129
+ "Phase 1: 4/14": datetime(2023, 4, 14),
130
+ "7/3/20223 - 10/16/2023": datetime(2023, 7, 3),
131
+ "6/25/2023 - 7/9/2023": datetime(2023, 6, 25),
132
+ "6/2/23 -- 105 Employees ... 7/7/23 -- 10 Employees ... 10/6/23 -- 70 Employees ... 12/1/23 -- 18 Employees": datetime(
133
+ 2023, 6, 2
134
+ ),
135
+ "6/2/23 -- 105 Employees": datetime(2023, 6, 2),
136
+ "6/30/23 -- 50 Employees ... 8/11/23 -- 74 Employees": datetime(2023, 6, 30),
137
+ "6/30/23 -- 50 Employees": datetime(2023, 6, 30),
138
+ "Phase 1: 4/28/23 (67 employees) ... Phase 2: 7/14/23 (9 employees) ... Phase 3: 10/6/23 (4 employees)": datetime(
139
+ 2023, 4, 28
140
+ ),
141
+ "Phase 1: 4/28/23 (67 employees)": datetime(2023, 4, 28),
142
+ "February 1, 2023 -- 82 Employees ... March 1, 2023 -- 1 Employee ... April 1, 2023 -- 21 Employees": datetime(
143
+ 2023, 2, 1
144
+ ),
145
+ "February 1, 2023 -- 82 Employees": datetime(2023, 2, 1),
146
+ "1st Phase: 1/9/2023 (49 Employees) ... 2nd Phase: 7/31/2023 (15 Employees)": datetime(
147
+ 2023, 1, 9
148
+ ),
149
+ "1st Phase: 1/9/2023 (49 Employees)": datetime(2023, 1, 9),
150
+ "Phase 1: 1/11/23 (38 workers) ... Phase 2: 2/10/23 (59 workers) ... Phase 3: 3/31/23 (11 workers) ... Phase 4: TBD (6 workers)": datetime(
151
+ 2023, 1, 11
152
+ ),
153
+ "Phase 1: 1/11/23 (38 workers)": datetime(2023, 1, 11),
154
+ "Beginning: 7/15/25; Ending: 7/29/25": datetime(2025, 7, 15),
155
+ "Beginning: 12/9/2024; Ending: 12/21/2024": datetime(2024, 12, 9),
156
+ "beginning: 10/26/2024; ending: 11/9/2024": datetime(2024, 10, 26),
157
+ "beginning: 10/27/2024; ending: 11/10/2024": datetime(2024, 10, 27),
158
+ "Commencing: 5/30/2024; Ending: 7/29/2024": datetime(2024, 5, 30),
159
+ "8/9/2024 or within a 14-day window": datetime(2024, 8, 9),
160
+ "Commencing: 7/6/2024; Ending: 9/1/2024": datetime(2024, 7, 6),
161
+ "Beginning: 6/3/24; Ending: 6/16/24": datetime(2024, 6, 3),
162
+ "Beginning: 2/24/24; Ending: 4/23/24": datetime(2024, 2, 24),
163
+ "Beginning: 5/17/24; Ending: 8/30/24": datetime(2024, 5, 17),
164
+ "Beginning: 1/16/24; Ending: 3/29/24": datetime(2024, 1, 16),
165
+ "Beginning: 1/2/2024 - Ending: 3/31/2024": datetime(2024, 1, 2),
166
+ "November 3, 2023": datetime(2023, 11, 3),
167
+ "9/8/23 (96 employees) ... 9/15/23 (66 employees) ... 9/22/23 (36 employees) ... 9/29/23 (26 employees) ... 9/30/23 (1 employee) ... 10/6/23 (13 employees) ... 10/13/23 (37 employees) ... 10/20/23 (34 employees) ... 11/10/23 (10 employees) ... 12/1/23 (61 employees) ... 2/2/24 (13 employees) ...": datetime(
168
+ 2023, 9, 8
169
+ ),
170
+ "Beginning: 2/28/23 - Ending: 12/31/23": datetime(2023, 2, 28),
171
+ "March 3, 2023": datetime(2023, 3, 3),
172
+ "March 31, 2023": datetime(2023, 3, 31),
173
+ "March 5, 2023": datetime(2023, 3, 5),
174
+ "February 28, 2023": datetime(2023, 2, 28),
175
+ "Beginning: March 15, 2023; Ending: October 2, 2023": datetime(2023, 3, 15),
176
+ "Beginning: January 23, 2023; Ending: March 24, 2023": datetime(2023, 1, 23),
177
+ }
178
+
179
+ jobs_corrections = {
180
+ "Unknown": None,
181
+ "TBD": None,
182
+ "unknown": None,
183
+ "To be determined": None,
184
+ "60 total": 60,
185
+ "72 (54 PA residents impacted)": 54,
186
+ "9 Pennsylvania workers (209 total) ... EFFECTIVE DATE: Beginning: 7/15/25; Ending: 7/29/25": 9,
187
+ "501 @ Etters location; 595 @ Philadelphia location": 1096,
188
+ "14 Pennsylvania residents": 14,
189
+ "430 nationwide; unknown number of PA residents impacted": None,
190
+ "Cooked Plant -- 110 ... Raw Plant - 119": 229,
191
+ "420 ... EFFECTIVE DATE: Beginning: 12/9/2024; Ending: 12/21/2024": 420,
192
+ "124 ... EFFECTIVE DATE: Commencing: 5/30/2024; Ending: 7/29/2024": 124,
193
+ "645 (**ONLY FIVE PA RESIDENTS AFFECTED**)": 5,
194
+ "253 (173 @ Allentown and 80 @ Greensburg)": 253,
195
+ "9 Pennsylvania workers (209 total)": 9,
196
+ "105 (91 Temporary Layoffs and 14 Permanent Layoffs)": 105,
197
+ "60 (all employees work remotely)": None,
198
+ "206 (198 P/T and 8 F/T Employees)": 206,
199
+ "54 (All employees can be relocated to other Amazon Delivery Service Partners)": 54,
200
+ "179 (80 Marsden Employees and 99 Temporary Employees from both Express Labor & Integrated Staffing Agencies)": 179,
201
+ "9236 Nationwide; PA total pending verification": None,
202
+ "81 Total -- 13 of which reside in PA": 81,
203
+ }
204
+
205
+ def transform_date(self, value: str) -> typing.Optional[str]:
206
+ """Transform a raw date string into a date object.
207
+
208
+ Args:
209
+ value (str): The raw date string provided by the source
210
+
211
+ Returns: A date object ready for consolidation. Or, if the date string is invalid, a None.
212
+ """
213
+ # Cut out cruft
214
+ # value = value.replace("Updated", "")
215
+ # value = value.replace("Revised", "")
216
+ # value = value.replace("-", "").strip()
217
+
218
+ # Split double dates
219
+ # if len(value) == 20:
220
+ # value = value[:10]
221
+ # elif len(value) == 19:
222
+ # value = value[:9]
223
+ # value = re.split(r"\s{2,}", value)[0].strip()
224
+ # value = value.split("Originated")[0].strip()
225
+ # print(value)
226
+
227
+ try:
228
+ return super().transform_date(value)
229
+ except Exception:
230
+ # value = value.split(" to ")[0].strip()
231
+ # value = value.split()[0].strip()
232
+ # value = value.replace("‐", "")
233
+ return super().transform_date(value)
234
+
235
+ def check_if_closure(self, row: typing.Dict) -> typing.Optional[bool]:
236
+ """Determine whether a row is a closure or not.
237
+
238
+ Args:
239
+ row (dict): The raw row of data.
240
+
241
+ Returns: A boolean or null
242
+ """
243
+ return "clos" in row["closure_or_layoff"].lower() or None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warn-transformer
3
- Version: 1.3.276
3
+ Version: 1.3.278
4
4
  Summary: Consolidate, enrich and analyze the data gathered by warn-scraper
5
5
  Home-page: https://github.com/biglocalnews/warn-transformer
6
6
  Author: Big Local News
@@ -3,7 +3,6 @@ warn_transformer/cli.py,sha256=gwO96jz_dj_LSpMYtY-avRvZl3hzE7sUMhimpMZwUFU,3180
3
3
  warn_transformer/consolidate.py,sha256=P2kgwxGt7V-ltD-XVnPMwsRhzNpXnxlm8J962hRPwn0,2393
4
4
  warn_transformer/download.py,sha256=xkSV4jj2cwz70DqtNzoIs5pWIJUXdtBtv5W68Y2lNhU,1642
5
5
  warn_transformer/integrate.py,sha256=ofeIvJGqktxsX8bj2ngSgEtJcIn293s_IXNCGNUIMwA,14829
6
- warn_transformer/pa.py,sha256=Xk-kgEunbVkOUfW6ncbLEOOi5THDf_YagnihdCV5kD8,11960
7
6
  warn_transformer/schema.py,sha256=6m62x1-B5LJFPMmUicZe6TZUzjkIfxJjm5-0hlo-x2k,13051
8
7
  warn_transformer/utils.py,sha256=wEgK9lE2aLKdtlQAgu21vMo0nTcSK6LbT_eMrkke-50,655
9
8
  warn_transformer/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -31,12 +30,13 @@ warn_transformer/transformers/mi.py,sha256=fXKiv-Slgh34tpKGPZiNs0hVd2mDqiaOP2ZEa
31
30
  warn_transformer/transformers/mo.py,sha256=NYmHMISfXawIoIm00Bsvjzjw4TGAxbsHiS8MQ6oYEdk,1709
32
31
  warn_transformer/transformers/mt.py,sha256=QSSlo3BFjJklcE4e6tUu_vJa1H887XeDXdxsCY0LGm0,762
33
32
  warn_transformer/transformers/ne.py,sha256=WqUkSsoR9a2Oi4Y7sjOqH3C2lbbaYWQzFCvhme2iNKo,982
34
- warn_transformer/transformers/nj.py,sha256=z2XKkkeYlxkPjF3mt1ioU5cHIsHU9L_z2cGvQnH7Xpk,9903
33
+ warn_transformer/transformers/nj.py,sha256=xHPljWr_oStct6PHDltvmqgaKbofwmTFR0pmWNtwElo,9958
35
34
  warn_transformer/transformers/nm.py,sha256=w_u9AmXyc-VCqnspTvuUNlP2cwqjwSRvqeVHwQoLux0,664
36
35
  warn_transformer/transformers/ny.py,sha256=YGlomU9-pr6dBLrR0xROL8jJzOwJWPGV01GSByqUHds,2559
37
36
  warn_transformer/transformers/oh.py,sha256=ZTREXZgvurJjigJ-g38qBtiDmT4P1p5ZvOH0G7Y4Q9I,3273
38
37
  warn_transformer/transformers/ok.py,sha256=LxjyrJ4uzhVllXSqWLZhlZ9p60tshwrfco5kGv8m94E,733
39
38
  warn_transformer/transformers/or.py,sha256=YcSBOndSS7sd04LICuVwmMwY4al2bBOCGxowXXj34vE,1433
39
+ warn_transformer/transformers/pa.py,sha256=h-bIOYeDMhmGf6TGAeSO7Xut4LvusNPAqJ0SDnoXhl0,13129
40
40
  warn_transformer/transformers/ri.py,sha256=nodHs6DIiZeReJo5R6kKQQiXecfrA2CdTgWc54xP-Z0,2270
41
41
  warn_transformer/transformers/sc.py,sha256=0GNL3aFCCNsVKtHpUfS-W7Tb5bDkNnTIUrqJwsSu31o,1911
42
42
  warn_transformer/transformers/sd.py,sha256=PYMbuI_va2lk8mZ92PG3ReXxm6J83wxW7-xf_Vxd2Nk,459
@@ -47,9 +47,9 @@ warn_transformer/transformers/va.py,sha256=vxlkvIgrphAUqqCKi_6xZ8raOEhbUpskBukKb
47
47
  warn_transformer/transformers/vt.py,sha256=5J9p7yexXmn4K3Pe0xIkPa9fR10DpZ2DSzvjkrDbCZs,452
48
48
  warn_transformer/transformers/wa.py,sha256=0addhlk4jBAfScVngCq8VUJvd-Bc8e1winPn8Lu2DZo,1111
49
49
  warn_transformer/transformers/wi.py,sha256=sM5KFkACDQ6dqiQ666wvZ8gJe47ywFVmM1hFbw8Io64,3019
50
- warn_transformer-1.3.276.dist-info/licenses/LICENSE,sha256=ZV-QHyqPwyMuwuj0lI05JeSjV1NyzVEk8Yeu7FPtYS0,585
51
- warn_transformer-1.3.276.dist-info/METADATA,sha256=TZoSYp8NNpYwGCZF6zli-gyl2C4DFQ6Jl24B8otoUJ4,1740
52
- warn_transformer-1.3.276.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
53
- warn_transformer-1.3.276.dist-info/entry_points.txt,sha256=MvWNvQnZTu5Fbpd7JMN-KGPeklT6f5v6Hx39uqnBl28,62
54
- warn_transformer-1.3.276.dist-info/top_level.txt,sha256=8nZpmzmOcqSnismvY34muSX8MvaZM6aEfLldl-wp0fQ,17
55
- warn_transformer-1.3.276.dist-info/RECORD,,
50
+ warn_transformer-1.3.278.dist-info/licenses/LICENSE,sha256=ZV-QHyqPwyMuwuj0lI05JeSjV1NyzVEk8Yeu7FPtYS0,585
51
+ warn_transformer-1.3.278.dist-info/METADATA,sha256=5Tc3teB1soXCwcOP1XcEFkX5XPNUq6XJryyvQs1lDuU,1740
52
+ warn_transformer-1.3.278.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
53
+ warn_transformer-1.3.278.dist-info/entry_points.txt,sha256=MvWNvQnZTu5Fbpd7JMN-KGPeklT6f5v6Hx39uqnBl28,62
54
+ warn_transformer-1.3.278.dist-info/top_level.txt,sha256=8nZpmzmOcqSnismvY34muSX8MvaZM6aEfLldl-wp0fQ,17
55
+ warn_transformer-1.3.278.dist-info/RECORD,,
warn_transformer/pa.py DELETED
@@ -1,198 +0,0 @@
1
- import re
2
- import typing
3
- from datetime import datetime
4
-
5
- from ..schema import BaseTransformer
6
-
7
-
8
- class Transformer(BaseTransformer):
9
- """Transform Pennsylvania raw data for consolidation."""
10
-
11
- postal_code = "PA"
12
- fields = dict(
13
- company="company",
14
- location="county",
15
- # notice_date="Date Received",
16
- effective_date="date_effective",
17
- jobs="jobs",
18
- )
19
- date_format = ["%m/%d/%Y", "%m/%d/%y"]
20
- date_corrections = {
21
- "Unknown": None,
22
- "": None,
23
- "beginning 10/9/25; ending 10/31/25": datetime(2025, 10, 9),
24
- "beginning 8/26/2025; ending 9/9/2025": datetime(2025, 8, 26),
25
- "beginning 9/1/2025; ending 9/15/2025": datetime(2025, 9, 1),
26
- "8/30/2025 - 12/31/2025": datetime(2025, 8, 30),
27
- "beginning 8/18/2025; ending 12/31/2026": datetime(2025, 8, 18),
28
- "beginning 8/12/25; ending 10/18/25": datetime(2025, 8, 12),
29
- "beginning 6/13/25; ending 6/30/25": datetime(2025, 6, 13),
30
- "beginning 1/17/25; ending 6/30/25": datetime(2025, 1, 17),
31
- "beginning 7/31/25; ending 8/3/25": datetime(2025, 7, 31),
32
- "8/25/2025 - 9/8/2025": datetime(2025, 8, 25),
33
- "5/5/2025 @ Etters location; 6/4/2025 @ Philadelphia location": datetime(2025, 5, 5),
34
- "7/1/2025 - 7/15/2025": datetime(2025, 7, 1),
35
- "8/1/2025 - 12/31/2025": datetime(2025, 8, 1),
36
- "beginning 4/25/25; ending 5/2/25": datetime(2025, 4, 25),
37
- "first wave - 6/9/2025 impacting 192 workers ... second wave - 9/30/2025 impacting 106 workers ... final wave ending - 11/17/2025 impacting 25 workers": datetime(2025, 6, 9),
38
- "4/22/2025 for Frankford Avenue location ... 4/24/2025 for Castor Avenue location": datetime(2025, 4, 22),
39
- "first wave - 5/9/2025 impacting 124 workers ... second wave - 7/1/2025 impacting 112 workers ... final wave ending - 12/31/2025 impacting 62 workers": datetime(2025, 5, 9),
40
- "6/27/2025 - 12/31/2025": datetime(2025, 6, 27),
41
- "beginning: 3/24/2025; ending: 4/12/2025": datetime(2025, 3, 24),
42
- "beginning: 3/24/2025; ending: 4/12/2025": datetime(2025, 3, 24),
43
- "May 19, 23, 30 ... June 6, 20, 27 ... July 11, 18 ... August 8, 22, 29 ... September 12": datetime(2025, 5, 19),
44
- "first round -- 5/16 through 5/30; second round -- 6/23 through 7/7; final round -- sometime in 2026": datetime(2025, 5, 16),
45
- "4/23/25; ending: 5/7/25": datetime(2025, 4, 23),
46
- "4/9/25-10/15/25": datetime(2025, 4, 9),
47
- "5/26/25-5/30/25": datetime(2025, 1, 31),
48
- "1/31/25-3/31/25": datetime(2025, 1, 31),
49
- "beginning: 3/18/25; ending: 3/31/25": datetime(2025, 3, 18),
50
- "beginning: 1/6/2025; completed: 3/31/2025": datetime(2025, 1, 6),
51
- "Layoff date: 2/18/2025; Closure date: 2/21/2025": datetime(2025, 2, 18),
52
- "2/17/2025 through 3/3/2025": datetime(2025, 2, 17),
53
- "Layoffs: 1/25/2025; Closure: 1/31/2025": datetime(2025, 1, 25),
54
- "beginning: 1/1/2025; ending: 1/3/2025": datetime(2025, 1, 1),
55
- "1/3/2025 - 1/31/2026": datetime(2025, 1, 3),
56
- "1. 1/15/2025 ... 2. 1/22/2025 ... 3. 2/12/2025": datetime(2025, 1, 15),
57
- "beginning: 12/14/2024; ending: 12/28/2024": datetime(2024, 12, 14),
58
- "12/9/2024 -- 173 workers ... 12/20/2024 -- 60 workers ... 1/13/2025 -- 2 workers ... 1/27/2025 -- 9 workers ... 2/17/2025 -- 26 workers": datetime(2024, 12, 9),
59
- "beginning: 11/30/24; ending: 12/3/24": datetime(2024, 11, 30),
60
- "11/27/2024 - 12/31/2024": datetime(2024, 11, 27),
61
- "11/10/2024 ": datetime(2024, 11, 10),
62
- "11/22/2024 ": datetime(2024, 11, 22),
63
- "9/23/2024 ": datetime(2024, 9, 23),
64
- "11/22 /2024 ": datetime(2024, 11, 22),
65
- "beginning: 10/26/2024; ending: 11/9/2024 ": datetime(2024, 10, 26),
66
- "beginning: 10/27/2024; ending: 11/10/2024": datetime(2024, 10, 27),
67
- "8/30/2024 - 10/4/2024": datetime(2024, 8, 30),
68
- "beginning: 10/7/2024; ending: 12/31/2024": datetime(2024, 10, 7),
69
- "6/7 /2024": datetime(2024, 6, 7),
70
- "8/9 /2024": datetime(2024, 8, 9),
71
- "6/7 /2024": datetime(2024, 6, 7),
72
- "8/16 /2024": datetime(2024, 8, 16),
73
- "8/9/2024 or within a 14-day window ": datetime(2024, 8, 9),
74
- "beginning: 8/26/2024; E nding: 12/31/2024 ": datetime(2024, 8, 26),
75
- "beginning: 8/26/2024; E nding: 12/31/2024": datetime(2024, 8, 26),
76
- "beginning: 8/26/2024; Ending: 12/31/2024": datetime(2024, 8, 26),
77
- "8/2/2024-8/16/2024": datetime(2024, 8, 2),
78
- "Beginning 4/20/24; Ending 5/4/2024": datetime(2024, 4, 20),
79
- "Beginning 4/13/2024; Ending 5/31/2024": datetime(2024, 4, 13),
80
- "Beginning 2/15/2024; Ending 4/30/2024": datetime(2024, 2, 15),
81
- "14 day period commencing 4/15/2024": datetime(2024, 4, 15),
82
- "Beginning 3/8/2024; Ending end of year 2024": datetime(2024, 3, 8),
83
- "Beginning 1/31/2024; Ending end of year 2024": datetime(2024, 1, 31),
84
- "3/15/24 - 9/30/24": datetime(2024, 3, 15),
85
- "Beginning 2/11/2024; Ending 2/25/2024": datetime(2024, 2, 11),
86
- "Beginning February/March 2024; Ending July 1, 2024": datetime(2024, 2, 1),
87
- "1/2/2024 and continuing periodically": datetime(2024, 1, 2),
88
- "1/6/2024 - 3/26/2024": datetime(2024, 1, 6),
89
- "1/16/2024 - 3/1/2024": datetime(2024, 1, 16),
90
- "1/18/2024. Additional layoff dates: 2/19/24 & 4/18/24": datetime(2024, 1, 18),
91
- "beginning: 1/3/2024 (52 employees); ending: 3/31/2024 (128 employees)": datetime(2024, 1, 3),
92
- "Beginning 12/15/2023 - Ending 9/30/2024": datetime(2023, 12, 15),
93
- "Beginning 11/20/2023 - Ending 12/15/2023": datetime(2023, 11, 20),
94
- "9/8/23 - 10/1/23": datetime(2023, 9, 8),
95
- "Beginning 9/29/23; Ending 11/16/23": datetime(2023, 9, 23),
96
- "Beginning: October 31, 2023 - ... Ending: April 15, 2024": datetime(2023, 10, 31),
97
- "Beginning: October 21, 2023 - ... Ending: December 30, 2023": datetime(2023, 10, 21),
98
- "9/8/23 (96 employees) ... 9/15/23 (66 employees) ... 9/22/23 (36 employees) ... 9/29/23 (26 employees) ... 9/30/23 (1 employee) ... 10/6/23 (13 employees) ... 10/13/23 (37 employees) ... 10/20/23 (34 employees) ... 11/10/23 (10 employees) ... 12/1/23 (61 employees) ... 2/2/24 (13 employees) ... ": datetime(2023, 9, 8),
99
- "9/8/23 (96 employees)": datetime(2023, 9, 8),
100
- "Beginning 8/21/23 - Ending 9/19/23": datetime(2023, 8, 21),
101
- "beginning 5/10/23 and ending 60-74 days thereafter": datetime(2023, 5, 10),
102
- "7/14/23 (37 workers); 9/15/23 (125 workers)": datetime(2023, 7, 14),
103
- "04/14 -- 11 Employees ... 05/05 -- 20 Employees ... 06/17 -- 40 Employees ... 07/07 -- 20 Employees ... 08/04 -- 20 Employees ... 09/08 -- 20 Employees ... 10/06 -- 20 Employees ... 11/03 -- 69 Employees ... 12/29 -- 40 Employees": datetime(2023, 4, 14),
104
- "04/14": datetime(2023, 4, 14),
105
- "Phase 1: 4/14 ... Phase 2: 5/13 -- 5/27 ... Phase 3: 6/12 -- 8/11": datetime(2023, 4, 14),
106
- "Phase 1: 4/14": datetime(2023, 4, 14),
107
- "7/3/20223 - 10/16/2023": datetime(2023, 7, 3),
108
- "6/25/2023 - 7/9/2023": datetime(2023, 6, 25),
109
- "6/2/23 -- 105 Employees ... 7/7/23 -- 10 Employees ... 10/6/23 -- 70 Employees ... 12/1/23 -- 18 Employees": datetime(2023, 6, 2),
110
- "6/2/23 -- 105 Employees": datetime(2023, 6, 2),
111
- "6/30/23 -- 50 Employees ... 8/11/23 -- 74 Employees": datetime(2023, 6, 30),
112
- "6/30/23 -- 50 Employees": datetime(2023, 6, 30),
113
- "Phase 1: 4/28/23 (67 employees) ... Phase 2: 7/14/23 (9 employees) ... Phase 3: 10/6/23 (4 employees)": datetime(2023, 4, 28),
114
- "Phase 1: 4/28/23 (67 employees)": datetime(2023, 4, 28),
115
- "February 1, 2023 -- 82 Employees ... March 1, 2023 -- 1 Employee ... April 1, 2023 -- 21 Employees": datetime(2023, 2, 1),
116
- "February 1, 2023 -- 82 Employees": datetime(2023, 2, 1),
117
- "1st Phase: 1/9/2023 (49 Employees) ... 2nd Phase: 7/31/2023 (15 Employees)": datetime(2023, 1, 9),
118
- "1st Phase: 1/9/2023 (49 Employees)": datetime(2023, 1, 9),
119
- "Phase 1: 1/11/23 (38 workers) ... Phase 2: 2/10/23 (59 workers) ... Phase 3: 3/31/23 (11 workers) ... Phase 4: TBD (6 workers)": datetime(2023, 1, 11),
120
- "Phase 1: 1/11/23 (38 workers)": datetime(2023, 1, 11),
121
- "Beginning: 7/15/25; Ending: 7/29/25": datetime(2025, 7, 15),
122
- "Beginning: 12/9/2024; Ending: 12/21/2024": datetime(2024, 12, 9),
123
- "beginning: 10/26/2024; ending: 11/9/2024": datetime(2024, 10, 26),
124
- "beginning: 10/27/2024; ending: 11/10/2024": datetime(2024, 10, 27),
125
- "Commencing: 5/30/2024; Ending: 7/29/2024": datetime(2024, 5, 30),
126
- "8/9/2024 or within a 14-day window": datetime(2024, 8, 9),
127
- "Commencing: 7/6/2024; Ending: 9/1/2024": datetime(2024, 7, 6),
128
- "Beginning: 6/3/24; Ending: 6/16/24": datetime(2024, 6, 3),
129
- "Beginning: 2/24/24; Ending: 4/23/24": datetime(2024, 2, 24),
130
- "Beginning: 5/17/24; Ending: 8/30/24": datetime(2024, 5, 17),
131
- "Beginning: 1/16/24; Ending: 3/29/24": datetime(2024, 1, 16),
132
- "Beginning: 1/2/2024 - Ending: 3/31/2024": datetime(2024, 1, 2),
133
- "November 3, 2023": datetime(2023, 11, 3),
134
- "9/8/23 (96 employees) ... 9/15/23 (66 employees) ... 9/22/23 (36 employees) ... 9/29/23 (26 employees) ... 9/30/23 (1 employee) ... 10/6/23 (13 employees) ... 10/13/23 (37 employees) ... 10/20/23 (34 employees) ... 11/10/23 (10 employees) ... 12/1/23 (61 employees) ... 2/2/24 (13 employees) ...": datetime(2023, 9, 8),
135
- "Beginning: 2/28/23 - Ending: 12/31/23": datetime(2023, 2, 28),
136
- "March 3, 2023": datetime(2023, 3, 3),
137
- "March 31, 2023": datetime(2023, 3, 31),
138
- "March 5, 2023": datetime(2023, 3, 5),
139
- "February 28, 2023": datetime(2023, 2, 28),
140
- "Beginning: March 15, 2023; Ending: October 2, 2023": datetime(2023, 3, 15),
141
- "Beginning: January 23, 2023; Ending: March 24, 2023": datetime(2023, 1, 23),
142
- }
143
-
144
- jobs_corrections = {
145
- "Unknown": None,
146
- "TBD": None,
147
- "unknown": None,
148
- "To be determined": None,
149
- "60 total": 60,
150
- "72 (54 PA residents impacted)": 54,
151
- "9 Pennsylvania workers (209 total) ... EFFECTIVE DATE: Beginning: 7/15/25; Ending: 7/29/25": 9,
152
- "501 @ Etters location; 595 @ Philadelphia location": 1096,
153
- "14 Pennsylvania residents": 14,
154
- "430 nationwide; unknown number of PA residents impacted": None,
155
- "Cooked Plant -- 110 ... Raw Plant - 119": 229,
156
- "420 ... EFFECTIVE DATE: Beginning: 12/9/2024; Ending: 12/21/2024": 420,
157
- "124 ... EFFECTIVE DATE: Commencing: 5/30/2024; Ending: 7/29/2024": 124,
158
- "645 (**ONLY FIVE PA RESIDENTS AFFECTED**)": 5,
159
- "253 (173 @ Allentown and 80 @ Greensburg)": 253,
160
- "9 Pennsylvania workers (209 total)": 9,
161
- "105 (91 Temporary Layoffs and 14 Permanent Layoffs)": 105,
162
- "60 (all employees work remotely)": None,
163
- "206 (198 P/T and 8 F/T Employees)": 206,
164
- "54 (All employees can be relocated to other Amazon Delivery Service Partners)": 54,
165
- "179 (80 Marsden Employees and 99 Temporary Employees from both Express Labor & Integrated Staffing Agencies)": 179,
166
- "9236 Nationwide; PA total pending verification": None,
167
- "81 Total -- 13 of which reside in PA": 81,
168
- }
169
-
170
- def transform_date(self, value: str) -> typing.Optional[str]:
171
- """Transform a raw date string into a date object.
172
-
173
- Args:
174
- value (str): The raw date string provided by the source
175
-
176
- Returns: A date object ready for consolidation. Or, if the date string is invalid, a None.
177
- """
178
- # Cut out cruft
179
- # value = value.replace("Updated", "")
180
- # value = value.replace("Revised", "")
181
- # value = value.replace("-", "").strip()
182
-
183
- # Split double dates
184
- # if len(value) == 20:
185
- # value = value[:10]
186
- # elif len(value) == 19:
187
- # value = value[:9]
188
- # value = re.split(r"\s{2,}", value)[0].strip()
189
- # value = value.split("Originated")[0].strip()
190
- # print(value)
191
-
192
- try:
193
- return super().transform_date(value)
194
- except Exception:
195
- # value = value.split(" to ")[0].strip()
196
- # value = value.split()[0].strip()
197
- # value = value.replace("‐", "")
198
- return super().transform_date(value)