chellow 1689753379.0.0__py3-none-any.whl → 1689935721.0.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.

Potentially problematic release.


This version of chellow might be problematic. Click here for more details.

chellow/e/views.py CHANGED
@@ -3528,9 +3528,9 @@ def site_snag_edit_post(snag_id):
3528
3528
  @e.route("/sites/<int:site_id>/site_snags")
3529
3529
  def site_site_snags_get(site_id):
3530
3530
  site = Site.get_by_id(g.sess, site_id)
3531
- snags = (
3532
- g.sess.query(Snag)
3533
- .filter(Snag.is_ignored == false(), Snag.site == site)
3531
+ snags = g.sess.scalars(
3532
+ select(Snag)
3533
+ .where(Snag.is_ignored == false(), Snag.site == site)
3534
3534
  .order_by(Snag.start_date.desc(), Snag.id)
3535
3535
  )
3536
3536
  return render_template("site_site_snags.html", site=site, snags=snags)
@@ -4192,8 +4192,7 @@ def supplier_bill_add_post(batch_id):
4192
4192
  gross = req_decimal("gross")
4193
4193
  bill_type_id = req_int("bill_type_id")
4194
4194
  bill_type = BillType.get_by_id(g.sess, bill_type_id)
4195
- breakdown_str = req_str("breakdown")
4196
- breakdown = loads(breakdown_str)
4195
+ breakdown = req_zish("breakdown")
4197
4196
  bill_type = BillType.get_by_id(g.sess, bill_type_id)
4198
4197
  bill = batch.insert_bill(
4199
4198
  g.sess,
chellow/models.py CHANGED
@@ -67,6 +67,8 @@ from chellow.utils import (
67
67
  hh_after,
68
68
  hh_before,
69
69
  hh_format,
70
+ hh_max,
71
+ hh_min,
70
72
  hh_range,
71
73
  next_hh,
72
74
  parse_mpan_core,
@@ -4759,6 +4761,7 @@ class Report(Base, PersistentClass):
4759
4761
  class SiteGroup:
4760
4762
  EXPORT_NET_GT_IMPORT_GEN = "Export to net > import from generators."
4761
4763
  EXPORT_GEN_GT_IMPORT = "Export to generators > import."
4764
+ EXPORT_3P_GT_IMPORT = "Export to 3rd party > import."
4762
4765
 
4763
4766
  def __init__(self, start_date, finish_date, sites, supplies):
4764
4767
  self.start_date = start_date
@@ -4775,9 +4778,22 @@ class SiteGroup:
4775
4778
  "3rd-party": {True: ["imp_3p"], False: ["exp_3p"]},
4776
4779
  "3rd-party-reverse": {True: ["exp_3p"], False: ["imp_3p"]},
4777
4780
  }
4778
- data = []
4779
4781
 
4780
- channels = sess.scalars(
4782
+ data = {
4783
+ hh_start: {
4784
+ "start_date": hh_start,
4785
+ "status": "A",
4786
+ "imp_net": 0,
4787
+ "exp_net": 0,
4788
+ "imp_gen": 0,
4789
+ "exp_gen": 0,
4790
+ "imp_3p": 0,
4791
+ "exp_3p": 0,
4792
+ }
4793
+ for hh_start in hh_range(caches, self.start_date, self.finish_date)
4794
+ }
4795
+
4796
+ for channel in sess.scalars(
4781
4797
  select(Channel)
4782
4798
  .join(Era)
4783
4799
  .join(Supply)
@@ -4789,49 +4805,48 @@ class SiteGroup:
4789
4805
  Source.code != "sub",
4790
4806
  Channel.channel_type == "ACTIVE",
4791
4807
  )
4792
- ).all()
4793
- channel_keys = dict(
4794
- (c.id, keys[c.era.supply.source.code][c.imp_related]) for c in channels
4795
- )
4808
+ ):
4809
+ channel_keys = keys[channel.era.supply.source.code][channel.imp_related]
4796
4810
 
4797
- db_data = iter(
4798
- sess.execute(
4799
- text(
4800
- "select start_date, value, channel_id from hh_datum "
4801
- "where channel_id = any(:channel_ids) "
4802
- "and start_date >= :start_date "
4803
- "and start_date <= :finish_date order by start_date"
4804
- ),
4805
- {
4806
- "channel_ids": [c.id for c in channels],
4807
- "start_date": self.start_date,
4808
- "finish_date": self.finish_date,
4809
- },
4811
+ chunk_start = hh_max(self.start_date, channel.era.start_date)
4812
+ chunk_finish = hh_min(self.finish_date, channel.era.finish_date)
4813
+
4814
+ db_data = iter(
4815
+ sess.execute(
4816
+ text(
4817
+ "select start_date, value, channel_id, status from hh_datum "
4818
+ "where channel_id = :channel_id "
4819
+ "and start_date >= :start_date "
4820
+ "and start_date <= :finish_date order by start_date"
4821
+ ),
4822
+ {
4823
+ "channel_id": channel.id,
4824
+ "start_date": chunk_start,
4825
+ "finish_date": chunk_finish,
4826
+ },
4827
+ )
4810
4828
  )
4811
- )
4812
4829
 
4813
- hh = next(db_data, None)
4830
+ hh = next(db_data, None)
4814
4831
 
4815
- for hh_start in hh_range(caches, self.start_date, self.finish_date):
4816
- dd = {
4817
- "start_date": hh_start,
4818
- "imp_net": 0,
4819
- "exp_net": 0,
4820
- "imp_gen": 0,
4821
- "exp_gen": 0,
4822
- "imp_3p": 0,
4823
- "exp_3p": 0,
4824
- }
4825
- data.append(dd)
4826
- while hh is not None and hh.start_date == hh_start:
4827
- for key in channel_keys[hh.channel_id]:
4828
- dd[key] += hh.value
4829
- hh = next(db_data, None)
4832
+ for hh_start in hh_range(caches, chunk_start, chunk_finish):
4833
+ dd = data[hh_start]
4834
+ if hh is not None and hh.start_date == hh_start:
4835
+ if dd["status"] == "A" and hh.status != "A":
4836
+ dd["status"] = "E"
4837
+ for key in channel_keys:
4838
+ dd[key] += hh.value
4839
+ hh = next(db_data, None)
4840
+ else:
4841
+ if dd["status"] == "A":
4842
+ dd["status"] = "E"
4830
4843
 
4831
- dd["displaced"] = dd["imp_gen"] - dd["exp_gen"] - dd["exp_net"]
4832
- dd["used"] = dd["displaced"] + dd["imp_net"] + dd["imp_3p"] - dd["exp_3p"]
4844
+ dd["displaced"] = dd["imp_gen"] - dd["exp_gen"] - dd["exp_net"]
4845
+ dd["used"] = (
4846
+ dd["displaced"] + dd["imp_net"] + dd["imp_3p"] - dd["exp_3p"]
4847
+ )
4833
4848
 
4834
- return data
4849
+ return data.values()
4835
4850
 
4836
4851
  def add_snag(self, sess, description, start_date, finish_date):
4837
4852
  return Snag.add_snag(
@@ -4848,11 +4863,13 @@ class SiteGroup:
4848
4863
  snag_1_start = snag_1_finish = None
4849
4864
  resolve_2_start = resolve_2_finish = None
4850
4865
  snag_2_start = snag_2_finish = None
4866
+ resolve_3_start = resolve_3_finish = None
4867
+ snag_3_start = snag_3_finish = None
4851
4868
 
4852
4869
  for hh in self.hh_data(sess):
4853
4870
  hh_start_date = hh["start_date"]
4854
4871
 
4855
- if hh["exp_net"] > hh["imp_gen"]:
4872
+ if hh["exp_net"] > hh["imp_gen"] and hh["status"] == "A":
4856
4873
  if snag_1_start is None:
4857
4874
  snag_1_start = hh_start_date
4858
4875
 
@@ -4881,7 +4898,7 @@ class SiteGroup:
4881
4898
  )
4882
4899
  snag_1_start = None
4883
4900
 
4884
- if hh["exp_gen"] > hh["imp_net"] + hh["imp_gen"]:
4901
+ if hh["exp_gen"] > hh["imp_net"] + hh["imp_gen"] and hh["status"] == "A":
4885
4902
  if snag_2_start is None:
4886
4903
  snag_2_start = hh_start_date
4887
4904
 
@@ -4910,6 +4927,38 @@ class SiteGroup:
4910
4927
  )
4911
4928
  snag_2_start = None
4912
4929
 
4930
+ if (
4931
+ hh["exp_3p"] > hh["imp_net"] + hh["imp_gen"] + hh["imp_3p"]
4932
+ and hh["status"] == "A"
4933
+ ):
4934
+ if snag_3_start is None:
4935
+ snag_3_start = hh_start_date
4936
+
4937
+ snag_3_finish = hh_start_date
4938
+
4939
+ if resolve_3_start is not None:
4940
+ self.delete_snag(
4941
+ sess,
4942
+ SiteGroup.EXPORT_3P_GT_IMPORT,
4943
+ resolve_3_start,
4944
+ resolve_3_finish,
4945
+ )
4946
+ resolve_3_start = None
4947
+ else:
4948
+ if resolve_3_start is None:
4949
+ resolve_3_start = hh_start_date
4950
+
4951
+ resolve_3_finish = hh_start_date
4952
+
4953
+ if snag_3_start is not None:
4954
+ self.add_snag(
4955
+ sess,
4956
+ SiteGroup.EXPORT_3P_GT_IMPORT,
4957
+ snag_3_start,
4958
+ snag_3_finish,
4959
+ )
4960
+ snag_3_start = None
4961
+
4913
4962
  if snag_1_start is not None:
4914
4963
  self.add_snag(
4915
4964
  sess, SiteGroup.EXPORT_NET_GT_IMPORT_GEN, snag_1_start, snag_1_finish
@@ -4933,6 +4982,16 @@ class SiteGroup:
4933
4982
  sess, SiteGroup.EXPORT_GEN_GT_IMPORT, resolve_2_start, resolve_2_finish
4934
4983
  )
4935
4984
 
4985
+ if snag_3_start is not None:
4986
+ self.add_snag(
4987
+ sess, SiteGroup.EXPORT_3P_GT_IMPORT, snag_3_start, snag_3_finish
4988
+ )
4989
+
4990
+ if resolve_3_start is not None:
4991
+ self.delete_snag(
4992
+ sess, SiteGroup.EXPORT_3P_GT_IMPORT, resolve_3_start, resolve_3_finish
4993
+ )
4994
+
4936
4995
 
4937
4996
  class Scenario(Base, PersistentClass):
4938
4997
  @staticmethod
@@ -42,8 +42,8 @@
42
42
 
43
43
  <form method="post" action="/e/channels/{{channel.id}}/edit">
44
44
  <fieldset>
45
- <label>Insert HH datum</label>
46
- <label>Start Date </label> {{input_date('start', None, 'minute')}}
45
+ <legend>Insert HH datum</legend>
46
+ <label>Start Date</label> {{input_date('start', None, 'minute')}}
47
47
  <label>Value</label> {{input_text('value', '')}}
48
48
  <label>Status </label>
49
49
  <select name="status">
@@ -20,32 +20,35 @@
20
20
  There are {{snags|length}} snag(s), over {{site_count}} site(s)
21
21
  </p>
22
22
 
23
- <table>
23
+ <table class="sticky">
24
24
  <caption>Site Snags</caption>
25
25
  <thead>
26
26
  <tr>
27
- <th></th>
27
+ <th>View</th>
28
+ <th>Edit</th>
28
29
  <th>Creation Date</th>
29
- <th>Site ID</th>
30
+ <th>Site Code</th>
30
31
  <th>Site Name</th>
31
32
  <th>Snag Description</th>
32
33
  <th>Start Date</th>
33
34
  <th>Finish Date</th>
35
+ <th>HH Data</th>
34
36
  </tr>
35
37
  </thead>
36
38
  <tbody>
37
39
  {% for snag in snags %}
38
40
  <tr>
39
- <td>
40
- <a href="/e/site_snags/{{snag.id}}">view</a>
41
- [<a href="/e/site_snags/{{snag.id}}/edit">edit</a>]
42
- </td>
41
+ <td><a href="/e/site_snags/{{snag.id}}">View</a></td>
42
+ <td><a href="/e/site_snags/{{snag.id}}/edit">Edit</a></td>
43
43
  <td>{{snag.date_created|hh_format}}</td>
44
- <td><a href="/e/sites/{{snag.site.id}}">{{snag.site.code}}</a></td>
44
+ <td><a href="/sites/{{snag.site.id}}">{{snag.site.code}}</a></td>
45
45
  <td>{{snag.site.name}}</td>
46
46
  <td>{{snag.description}}</td>
47
47
  <td>{{snag.start_date|hh_format}}</td>
48
48
  <td>{{snag.finish_date|hh_format}}</td>
49
+ <td>
50
+ <a href="/sites/{{snag.site.id}}/hh_data?year={{snag.start_date.year}}&amp;month={{snag.start_date.month}}#:~:text={{snag.start_date|hh_format|urlencode}}">HH Data</a>
51
+ </td>
49
52
  </tr>
50
53
  {% endfor %}
51
54
  </tbody>
@@ -222,6 +222,7 @@
222
222
  <li><a href="/e/scenarios">Scenarios</a></li>
223
223
  <li><a href="/reports/batches">Batches</a></li>
224
224
  <li><a href="/tester">Tester</a></li>
225
+ <li><a href="/e/site_snags">Site Snags</a></li>
225
226
  </ul>
226
227
  </div>
227
228
  </section>
@@ -161,7 +161,7 @@ Table of site level monthly kWh, MD kWh etc.</a>
161
161
  <a href="/sites/{{site.id}}/hh_data?year={{month_finish.year}}&amp;month={{month_finish.month}}">Table of hh data</a>
162
162
  </li>
163
163
  <li>
164
- <a href="/sites/{{site.id}}/site_snags">Site Snags</a>
164
+ <a href="/e/sites/{{site.id}}/site_snags">Site Snags</a>
165
165
  </li>
166
166
  <li>
167
167
  <a href="/e/sites/{{site.id}}/energy_management">Energy Managment Summary</a>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chellow
3
- Version: 1689753379.0.0
3
+ Version: 1689935721.0.0
4
4
  Summary: Web Application for checking UK energy bills.
5
5
  Project-URL: Homepage, https://github.com/WessexWater/chellow
6
6
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
@@ -5,7 +5,7 @@ chellow/commands.py,sha256=ESBe9ZWj1c3vdZgqMZ9gFvYAB3hRag2R1PzOwuw9yFo,1302
5
5
  chellow/dloads.py,sha256=n6VI_zxScCn_Hn2daOnHauhEpqH68ZKeCwvDQ2ObFUI,3941
6
6
  chellow/edi_lib.py,sha256=het3R0DBGtXEo-Sy1zvXQuX9EWQ1X6Y33G4l1hYYuds,51859
7
7
  chellow/general_import.py,sha256=Xuiwl-yeM0MCmPstzQR2E6ASs8sYE8b1GNeDLStnizY,58470
8
- chellow/models.py,sha256=Pph2VAOjjMwqZlwSk7uXZtEFFjz0nzJoCad-6kna6GM,232440
8
+ chellow/models.py,sha256=3iCwWh2NAHdATUrC_keQ8SBzQUocLTJXwgeFVItBkc4,234629
9
9
  chellow/national_grid.py,sha256=Y0ckPONIpMnip2qB9ptXBLxs6jJCk14c98eCkyd2fNM,4427
10
10
  chellow/proxy.py,sha256=Mzssi9nTf6s_G4RSn8k5oAHqzVYIxMsfbudj1amYucI,1387
11
11
  chellow/rate_server.py,sha256=xVk15pdSovcD8K8BWcOmjwo_L3a8LYry7L2Gvw56OEQ,5696
@@ -34,7 +34,7 @@ chellow/e/scenario.py,sha256=IuyE494XaBLq3FW7NdJePD6J4cTzPogfACO6dThiY00,23239
34
34
  chellow/e/system_price.py,sha256=IPBLSRPzGA3yca4tpR8PJemwPbgqVjn1WnljOMUyWnA,8145
35
35
  chellow/e/tlms.py,sha256=gXBZTHXqGVcaTGHaYGVA5Ir5pzoBDqFC1Kl1mQ0IDqU,9549
36
36
  chellow/e/tnuos.py,sha256=kxp9EXPCXv_yAbMRbpqa5b6fsw3KJ290zNaGU3piWgo,20647
37
- chellow/e/views.py,sha256=3f3oG9VHuhNApSfGFeZPH9_L7SQUx0itzQllh2TgI9k,179056
37
+ chellow/e/views.py,sha256=JC6phMmKpu-NmLEkDvFpMCiruQj-nmt9KSQRu0Q0I30,179019
38
38
  chellow/e/bill_parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  chellow/e/bill_parsers/activity_mop_stark_xlsx.py,sha256=v1s4O8phVJVn9sOs9HKrKYcECAP0ApnUgqCaa2ARYiQ,4234
40
40
  chellow/e/bill_parsers/annual_mop_stark_xlsx.py,sha256=4dAWjaxsDnnGBnRAjgFe7IZLxIcLMGiTuXh1uqNnnlQ,4382
@@ -113,7 +113,7 @@ chellow/templates/downloads.html,sha256=m_Mm6yqq42HjahYiL2NyGfrkm8JLqOEWuC7Qy9T0
113
113
  chellow/templates/edi_viewer.html,sha256=szUthgHOdph6Of-7f_1LeC_zYlNJaMeS5ctn6xTAeiM,1437
114
114
  chellow/templates/general_import.html,sha256=SMemHGu466Be3_cAWSS6Hn-Kv-1psbEMDD6NQG6bfbI,1013
115
115
  chellow/templates/general_imports.html,sha256=Jqv9koKywQR4dqhePT8-khV_B5s-Cu41V90GE4yMgcQ,12208
116
- chellow/templates/home.html,sha256=NU6MI5VA9KmkQOhGfRKNbWtO7UUyp_aJ0RGt64k1XAg,5463
116
+ chellow/templates/home.html,sha256=5GXzbgFeceQAnr8nQEg911v0xT4hJN1H0-5Npo9GbAE,5516
117
117
  chellow/templates/local_report.html,sha256=pV7_0QwyQ-D3OS9LXrly5pq3qprZnwTCoq6vCnMTkS4,1332
118
118
  chellow/templates/local_reports.html,sha256=4wbfVkY4wUfSSfWjxqIsvCpIsa9k7H_dGAjznrG5jNM,701
119
119
  chellow/templates/national_grid.html,sha256=8W92tsjlqPSB0J--nyFIi-wzFae9CyDr6fODXLZp8ic,991
@@ -134,7 +134,7 @@ chellow/templates/report_run_row.html,sha256=bmtcdqJaS1CXpL0i8PuqvmeF98jKNYX5-mn
134
134
  chellow/templates/report_run_row_bill_check.html,sha256=aC2LMu_6NvmTN3ZdxHJPPPczyxPN6hg0F-PPcqIWUws,4683
135
135
  chellow/templates/report_run_supply_contacts.html,sha256=JNzwz9M6qbLRDMkCzFCxxANapUer5klxo7t5a48nAzg,2117
136
136
  chellow/templates/report_runs.html,sha256=Xef2nilmHHSnyRNKUQJrU2qWsQfslFL_wWD5rR92SOo,667
137
- chellow/templates/site.html,sha256=uzDElAOtlS5H3J3nFdEP0BDx1enPJtEixXYqqAPnvl8,10016
137
+ chellow/templates/site.html,sha256=Pf3t3HC8Apzg283ZQz_Tnh3VWxvKorKiGQ1BA72dgMc,10018
138
138
  chellow/templates/site_add.html,sha256=NxYmOIZQH6X8EBOuJUbhUJ8IYB3t0BukjR1yVRhnJhM,422
139
139
  chellow/templates/site_edit.html,sha256=R1HTFzSuBzujAuYOcE5lXcBmktY_5RQAPz85Cg1wnt0,7803
140
140
  chellow/templates/site_gen_graph.html,sha256=LXkD4n_aC_sFm9JJTCmBRrczpyTn2UUEgBToFiM5RPo,3468
@@ -151,7 +151,7 @@ chellow/templates/users.html,sha256=dBB0yOvsoYbY_I9le1XGqZ0SlesUbWMqfRGlZOtOgNs,
151
151
  chellow/templates/e/asset_comparison.html,sha256=QyN3WMw8YoFaSWUvD2NOnRLdLdB3Kv6m3t8Id8Mb6_A,678
152
152
  chellow/templates/e/channel.html,sha256=R5fhdsHvhB7k57Rw_gviUQ7_EXBGwP05E691V1BUNSQ,2056
153
153
  chellow/templates/e/channel_add.html,sha256=X1hi0b-ZjchlQ2m7uZYCyqkqU-Qd1s3_5u4zsB_yySA,1479
154
- chellow/templates/e/channel_edit.html,sha256=4JE3O41838Jp42guKiAbT_R7WJ6cjbxjq9YEP4bAIh0,2198
154
+ chellow/templates/e/channel_edit.html,sha256=OUkdiS2NBQ_w4gmxRxXAcRToM5BT8DWWJrtQMFs-GUU,2198
155
155
  chellow/templates/e/channel_snag.html,sha256=wBJ5KBfeJdAeRmaB0qu0AD9Z4nM5fn6tJ_8bNqTWtoo,1477
156
156
  chellow/templates/e/channel_snag_edit.html,sha256=sUFI4Ml3F1B35x8_t_Pz3hWuQN9Xtxr3kt4u8hdxNwY,1911
157
157
  chellow/templates/e/channel_snags.html,sha256=1dzC5FoCJ8bg6PBsQrVqGLn-DbPE2EHQklfm_pg3w0c,2899
@@ -270,7 +270,7 @@ chellow/templates/e/site_hh_data.html,sha256=1Ld5IIM3G84tVCAwtlJNGJTnrASS7d84Aga
270
270
  chellow/templates/e/site_site_snags.html,sha256=vWpsFyxZj7GOrMXQz2rKq9zOQdVsqeUVtdBzehp9J5w,847
271
271
  chellow/templates/e/site_snag.html,sha256=eZt1H-t-hsoKZBteU9ILpKqKLD0Pf0Uybp8pPQYuTAc,924
272
272
  chellow/templates/e/site_snag_edit.html,sha256=O-m95S-ig9sXmFFkQmjfNnF9zJkgSIuPizuF7ieNi7s,1436
273
- chellow/templates/e/site_snags.html,sha256=V1B585p4tF9K2gXgHIH8vszGUMlh_uTCZI8oMJQ4bB8,1175
273
+ chellow/templates/e/site_snags.html,sha256=6MKZQVJQJ61dhwYhcdro-ZyWQotu2iapHC9_qS92zSg,1421
274
274
  chellow/templates/e/site_snags_edit.html,sha256=MEkRBEKtLUusS0_H9h-M1XXWi5-U8QAbfYN4q7giDm4,427
275
275
  chellow/templates/e/source.html,sha256=6cLjZWKS2w9Zy1C4hzi1lTKXAdKKFQ8wSxbwAjhP3jU,373
276
276
  chellow/templates/e/sources.html,sha256=AW_ysj5ZzArTLz0-FWappMsUEU1AO9gw7D4XSHbINu4,453
@@ -351,6 +351,6 @@ chellow/templates/g/supply_note_edit.html,sha256=6UQf_qbhFDys3cVsTp-c7ABWZpggW9R
351
351
  chellow/templates/g/supply_notes.html,sha256=WR3YwGh_qqTklSJ7JqWX6BKBc9rk_jMff4RiWZiF2CM,936
352
352
  chellow/templates/g/unit.html,sha256=KouNVU0-i84afANkLQ_heJ0uDfJ9H5A05PuLqb8iCN8,438
353
353
  chellow/templates/g/units.html,sha256=p5Nd-lAIboKPEOO6N451hx1bcKxMg4BDODnZ-43MmJc,441
354
- chellow-1689753379.0.0.dist-info/METADATA,sha256=Ya6h0C6NMPRpGw5QpxzDCo11NePRCgW2WchmYeJX9ZM,12161
355
- chellow-1689753379.0.0.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
356
- chellow-1689753379.0.0.dist-info/RECORD,,
354
+ chellow-1689935721.0.0.dist-info/METADATA,sha256=Oyqja1WTIYohyoew87-PlpKLKOvD-iQc8kwbTJeEYCw,12161
355
+ chellow-1689935721.0.0.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
356
+ chellow-1689935721.0.0.dist-info/RECORD,,