fastlifeweb 0.7.2__py3-none-any.whl → 0.8.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.
fastlife/__init__.py CHANGED
@@ -1,9 +1,12 @@
1
1
  from .configurator import Configurator, configure
2
2
  from .configurator.registry import Registry
3
3
 
4
+ from .monkeypatch import monkeypatch
4
5
  # from .request.form_data import model
5
6
  from .templating import Template, template
6
7
 
8
+ monkeypatch()
9
+
7
10
  __all__ = [
8
11
  # Config
9
12
  "configure",
@@ -0,0 +1,8 @@
1
+ import re
2
+ from jinjax import component
3
+
4
+
5
+ def monkeypatch() -> None:
6
+ # the current regex is currently breaking the A component
7
+ # and we don't use comments inside {# def #}
8
+ component.RX_INTER_COMMENTS = re.compile("^$")
@@ -1 +1 @@
1
- <Hidden name={csrf_token.name} value={csrf_token.value} />
1
+ <Hidden :name="csrf_token.name" :value="csrf_token.value" />
@@ -26,5 +26,5 @@ div_class="flex items-center mb-4"
26
26
  <input type="radio" name="{{name}}" id="{{id}}" value="{{value}}" {% if checked %}checked{% endif %}
27
27
  class="{{attrs.class or class_}}" {% if onclick %}onclick="{{onclick}}" {% endif %} {%if
28
28
  disabled%}disabled{%endif%}>
29
- <Label for={id} class={label_class}>{{label}}</Label>
29
+ <Label :for="id" :class="label_class">{{label}}</Label>
30
30
  </div>
@@ -0,0 +1,7 @@
1
+ {# def
2
+ class_="table-auto w-full text-left border-colapse"
3
+ #}
4
+
5
+ <table class="{{attrs.class or class_}}">
6
+ {{- content -}}
7
+ </table>
@@ -0,0 +1,3 @@
1
+ <tbody>
2
+ {{- content -}}
3
+ </tbody>
@@ -0,0 +1,7 @@
1
+ {# def
2
+ class_="px-4 py-2 border-b dark:border-neutral-500"
3
+ #}
4
+
5
+ <td class="{{attrs.class or class_}}">
6
+ {{- content -}}
7
+ </td>
@@ -0,0 +1,3 @@
1
+ <tfoot>
2
+ {{- content -}}
3
+ </tfoot>
@@ -0,0 +1,7 @@
1
+ {# def
2
+ class_="px-4 py-2 border-b dark:border-neutral-500"
3
+ #}
4
+
5
+ <th class="{{attrs.class or class_}}">
6
+ {{- content -}}
7
+ </th>
@@ -0,0 +1,3 @@
1
+ <thead>
2
+ {{- content -}}
3
+ </thead>
@@ -0,0 +1,7 @@
1
+ {# def
2
+ class_=""
3
+ #}
4
+
5
+ <tr class="{{attrs.class or class_}}">
6
+ {{- content -}}
7
+ </tr>
@@ -1,12 +1,12 @@
1
1
  {# def widget #}
2
- <pydantic_form.Widget widget={widget} removable={widget.removable}>
2
+ <pydantic_form.Widget :widget="widget" :removable="widget.removable">
3
3
  <div class="pt-4">
4
4
  <div class="flex items-center">
5
- <Checkbox name={widget.name} type="checkbox" id={widget.id} checked={widget.value} value="1" />
6
- <Label for={widget.id} class="ms-2 text-base text-neutral-900 dark:text-white">
5
+ <Checkbox :name="widget.name" type="checkbox" :id="widget.id" :checked="widget.value" value="1" />
6
+ <Label :for="widget.id" class="ms-2 text-base text-neutral-900 dark:text-white">
7
7
  {{widget.title|safe}}
8
8
  </Label>
9
9
  </div>
10
- <pydantic_form.Error text={widget.error} />
10
+ <pydantic_form.Error :text="widget.error" />
11
11
  </div>
12
12
  </pydantic_form.Widget>
@@ -2,19 +2,19 @@
2
2
  widget,
3
3
  #}
4
4
 
5
- <pydantic_form.Widget widget={widget} removable={widget.removable}>
5
+ <pydantic_form.Widget :widget="widget" :removable="widget.removable">
6
6
  <div class="pt-4">
7
7
  <details open>
8
8
  <summary class="justify-between items-center font-medium cursor-pointer">
9
9
  <H3>{{widget.title}}</H3>
10
- <pydantic_form.Error text={widget.error} />
10
+ <pydantic_form.Error :text="widget.error" />
11
11
  </summary>
12
12
  <div>
13
13
  {% for value in widget.value %}
14
14
  <div class="flex items-center mb-4">
15
- <Checkbox name={value.field_name} type="checkbox" id={value.id} value={value.value} checked={value.checked} />
16
- <Label for={value.id} class="ms-2 text-base text-neutral-900 dark:text-white">{{value.label}}</Label>
17
- <pydantic_form.Error text={value.error} />
15
+ <Checkbox :name="value.field_name" type="checkbox" :id="value.id" :value="value.value" :checked="value.checked" />
16
+ <Label :for="value.id" class="ms-2 text-base text-neutral-900 dark:text-white">{{value.label}}</Label>
17
+ <pydantic_form.Error :text="value.error" />
18
18
  </div>
19
19
  {% endfor %}
20
20
  </div>
@@ -1,16 +1,16 @@
1
1
  {# def widget #}
2
2
 
3
- <pydantic_form.Widget widget={widget} removable={widget.removable}>
3
+ <pydantic_form.Widget :widget="widget" :removable="widget.removable">
4
4
  <div class="pt-4">
5
- <Label for={widget.id}>{{widget.title}}</Label>
6
- <Select name={widget.name} id={widget.id}>
5
+ <Label :for="widget.id">{{widget.title}}</Label>
6
+ <Select :name="widget.name" :id="widget.id">
7
7
  {%- for opt in widget.options -%}
8
- <Option value={opt.value} id={widget.id + "-" + opt.value} selected={widget.value==opt.value}>
8
+ <Option :value="opt.value" id={{widget.id + "-" + opt.value}} :selected="widget.value==opt.value">
9
9
  {{ opt.text }}
10
10
  </Option>
11
11
  {%- endfor -%}
12
12
  </Select>
13
- <pydantic_form.Error text={widget.error} />
14
- <pydantic_form.Hint text={widget.hint} />
13
+ <pydantic_form.Error :text="widget.error" />
14
+ <pydantic_form.Hint :text="widget.hint" />
15
15
  </div>
16
16
  </pydantic_form.Widget>
@@ -1,2 +1,2 @@
1
1
  {# def widget #}
2
- <Hidden name={widget.name} value={widget.value} id={widget.id} />
2
+ <Hidden :name="widget.name" :value="widget.value" :id="widget.id" />
@@ -1,11 +1,11 @@
1
1
  {# def widget, children_widget #}
2
2
 
3
- <pydantic_form.Widget widget={widget} removable={widget.removable}>
3
+ <pydantic_form.Widget :widget="widget" :removable="widget.removable">
4
4
  <div id="{{widget.id}}" class="m-4">
5
5
  <details open>
6
6
  <summary class="justify-between items-center font-medium cursor-pointer">
7
7
  <H3>{{widget.title}}</H3>
8
- <pydantic_form.Error text={widget.error} />
8
+ <pydantic_form.Error :text="widget.error" />
9
9
  </summary>
10
10
  <div>
11
11
  {% for child in children_widget %}
@@ -1,10 +1,10 @@
1
1
  {# def widget, children_widgets, type #}
2
2
 
3
- <pydantic_form.Widget widget={widget} removable={widget.removable}>
3
+ <pydantic_form.Widget :widget="widget" :removable="widget.removable">
4
4
  <details id="{{widget.id}}" open>
5
5
  <summary class="justify-between items-center font-medium cursor-pointer">
6
6
  <H3>{{widget.title}}</H3>
7
- <pydantic_form.Error text={widget.error} />
7
+ <pydantic_form.Error :text="widget.error" />
8
8
  </summary>
9
9
  <div>
10
10
  {% set fnGetName = "get" + widget.id.replace("-", "_") %}
@@ -29,7 +29,7 @@
29
29
  {% set container_id = "#" + widget.id + "-container" %}
30
30
  {% set add_id = widget.id + "-add" %}
31
31
  {% set vals = 'js:{"name": '+ fnGetName + '(), "token": "' + type.token + '", "removable": true}' %}
32
- <Button type="button" hx-target={container_id} hx-swap="beforeend" id={add_id} hx-vals={vals} hx-get={type.url}>
32
+ <Button type="button" :hx-target="container_id" hx-swap="beforeend" :id="add_id" :hx-vals="vals" :hx-get="type.url">
33
33
  Add
34
34
  </Button>
35
35
  </div>
@@ -1,11 +1,11 @@
1
1
  {# def widget #}
2
2
 
3
- <pydantic_form.Widget widget={widget} removable={widget.removable}>
3
+ <pydantic_form.Widget :widget="widget" :removable="widget.removable">
4
4
  <div class="pt-4">
5
- <Label for={widget.id}>{{widget.title}}</Label>
6
- <pydantic_form.Error text={widget.error} />
7
- <Input name={widget.name} value={widget.value} type={widget.input_type} id={widget.id}
8
- aria-label={widget.aria_label} placeholder={widget.placeholder} />
9
- <pydantic_form.Hint text={widget.hint} />
5
+ <Label :for="widget.id">{{widget.title}}</Label>
6
+ <pydantic_form.Error :text="widget.error" />
7
+ <Input :name="widget.name" :value="widget.value" :type="widget.input_type" :id="widget.id"
8
+ :aria-label="widget.aria_label" :placeholder="widget.placeholder" />
9
+ <pydantic_form.Hint :text="widget.hint" />
10
10
  </div>
11
11
  </pydantic_form.Widget>
@@ -1,24 +1,24 @@
1
1
  {# def widget, child, types, parent_type #}
2
2
 
3
- <pydantic_form.Widget widget={widget}>
3
+ <pydantic_form.Widget :widget="widget">
4
4
  <div id="{{widget.id}}">
5
5
  <details open>
6
6
  <summary class="justify-between items-center font-medium cursor-pointer">
7
7
  <H3>{{widget.title}}</H3>
8
- <pydantic_form.Error text={widget.error} />
8
+ <pydantic_form.Error :text="widget.error" />
9
9
  </summary>
10
10
  <div hx-sync="this" id="{{widget.id}}-child">
11
11
  {% if child %}
12
12
  {{ child }}
13
13
  {% else %}
14
14
  {% for typ in types %}
15
- <Button type="button" hx-target="closest div" hx-get={typ.url} hx-vals={typ.params|tojson} id={typ.id}
16
- onclick={"document.getElementById('" + widget.id +"-remove-btn').hidden=false"}>{{typ.title}}</Button>
15
+ <Button type="button" hx-target="closest div" :hx-get="typ.url" :hx-vals="typ.params|tojson" :id="typ.id"
16
+ onclick={{ "document.getElementById('" + widget.id + "-remove-btn').hidden=false" }}>{{typ.title}}</Button>
17
17
  {% endfor %}
18
18
  {% endif %}
19
19
  </div>
20
- <Button type="button" id={widget.id + "-remove-btn" } hx-target={"#" + widget.id}
21
- hx-vals={parent_type.params|tojson} hx-get={parent_type.url} hidden={not child}>
20
+ <Button type="button" :id="widget.id + '-remove-btn'" :hx-target="'#' + widget.id"
21
+ hx-vals="parent_type.params|tojson" :hx-get="parent_type.url" :hidden="not child">
22
22
  Remove
23
23
  </Button>
24
24
  </details>
@@ -3,7 +3,7 @@
3
3
  <div id="{{container_id}}">
4
4
  {{ content }}
5
5
  {% if removable %}
6
- <Button type="button" onclick={"document.getElementById('" + container_id + "').remove()"}>
6
+ <Button type="button" :onclick="'document.getElementById(' + container_id + ').remove()'">
7
7
  Remove
8
8
  </Button>
9
9
  {% endif %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastlifeweb
3
- Version: 0.7.2
3
+ Version: 0.8.0
4
4
  Summary: High-level web framework
5
5
  Home-page: https://github.com/mardiros/fastlife
6
6
  License: BSD-derived
@@ -21,7 +21,7 @@ Requires-Dist: beautifulsoup4[testing] (>=4.12.2,<5.0.0)
21
21
  Requires-Dist: behave (>=1.2.6,<2.0.0)
22
22
  Requires-Dist: fastapi (>=0.112.0,<0.113.0)
23
23
  Requires-Dist: itsdangerous (>=2.1.2,<3.0.0)
24
- Requires-Dist: jinjax (>=0.37,<0.38)
24
+ Requires-Dist: jinjax (>=0.43,<0.44)
25
25
  Requires-Dist: markupsafe (>=2.1.3,<3.0.0)
26
26
  Requires-Dist: multidict (>=6.0.5,<7.0.0)
27
27
  Requires-Dist: pydantic (>=2.5.3,<3.0.0)
@@ -1,4 +1,4 @@
1
- fastlife/__init__.py,sha256=nAeweHnTvWHgDZYuPIWawZvT4juuhvMp4hzF2B-yCJU,317
1
+ fastlife/__init__.py,sha256=3hOgEGG7bA-cmYSsPrzPpY7lroc5hvLx7bWLBTodSMU,369
2
2
  fastlife/configurator/__init__.py,sha256=vMV25HEfuXjCL7DhZukhlB2JSfxwzX2lGbErcZ5b7N0,146
3
3
  fastlife/configurator/base.py,sha256=2ahvTudLmD99YQjnIeGN5JDPCSl3k-mauu7bsSEB5RE,216
4
4
  fastlife/configurator/configurator.py,sha256=1RzDS-BEQ5MjNv29QKnmRO-j50xJ4Noax-I8tcClRyQ,7238
@@ -11,6 +11,7 @@ fastlife/middlewares/reverse_proxy/x_forwarded.py,sha256=K_WvXAP2Cdt-pFXYVPcAyh9
11
11
  fastlife/middlewares/session/__init__.py,sha256=OnzRCYRzc1lw9JB0UdKi-aRLPNT2n8mM8kwY1P4w7uU,838
12
12
  fastlife/middlewares/session/middleware.py,sha256=JgXdBlxlm9zIEgXcidbBrMAp5wJVPsZWtvCLVDk5h2s,3049
13
13
  fastlife/middlewares/session/serializer.py,sha256=qpVnHQjYTxw3aOnoEOKIjOFJg2z45KjiX5sipWk2gws,1458
14
+ fastlife/monkeypatch.py,sha256=bAr5rpwR_1JZqzWZG3TQa2hrk1fHP_Uk5Jil5-hdIWE,230
14
15
  fastlife/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
16
  fastlife/request/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  fastlife/request/form_data.py,sha256=mP8ilwRUY2WbktIkRgaJJ2EUjwUMPbSPg29GzwZgT18,3713
@@ -26,7 +27,7 @@ fastlife/shared_utils/resolver.py,sha256=wXQQTB4jf86m4qENhMOkHkWpLJj_T4-_eND_ItT
26
27
  fastlife/templates/A.jinja,sha256=q71nu4Rq874LG6SykCKv8W-EZeX13NMF0AsLc9FFAP0,677
27
28
  fastlife/templates/Button.jinja,sha256=sHJtgOTJmL2Ttpy-SNKdq3BcoTe6NI0MSKG2N44Z-iI,1283
28
29
  fastlife/templates/Checkbox.jinja,sha256=XdgtI7GTVjPkxTje9KMILzHqjMFRmTpubtKM8nL7K1o,447
29
- fastlife/templates/CsrfToken.jinja,sha256=X2-H0VmukyUV448blh9M8rhr_gN82ar51TnRAwfV3OY,59
30
+ fastlife/templates/CsrfToken.jinja,sha256=7qbPvgiAgR6fgaCnDTLozJgOPSWWUJ_W4VLPGra4ahA,61
30
31
  fastlife/templates/Form.jinja,sha256=h8Y2yrlrTRuLnwqCTDv8eeFgaej2eQiXDvFOx5eEcGg,367
31
32
  fastlife/templates/H1.jinja,sha256=fetjIhZvgw5gm6xJhl_-cnHvrPwuLYE4S1rVYgbqNl8,196
32
33
  fastlife/templates/H2.jinja,sha256=z022lvv3PO_g-ZxWuAiKmBOaFZ3u8Kbzd0jkuWNsOS0,196
@@ -39,20 +40,27 @@ fastlife/templates/Input.jinja,sha256=YlImqjxjCJjjHAekYmUDUyHloNWEVlddeF0Ea7A_C6
39
40
  fastlife/templates/Label.jinja,sha256=m71vGDUi2HzzA5d9L3TQhdEXYKHcp6LXP6PE0-bx44w,170
40
41
  fastlife/templates/Option.jinja,sha256=YlgBayJj94kSXK0mlGkMxTmHjTBr8T-UzvQmTcANK0Q,121
41
42
  fastlife/templates/P.jinja,sha256=xEcHIv9dJRpELu_SdqQcftvKrU8z1i_BHTEVO5Mu5dU,164
42
- fastlife/templates/Radio.jinja,sha256=51I5n1yjWQ_uLZfzuUUf3C8ngo-KT4dPw29-pjP9uSU,723
43
+ fastlife/templates/Radio.jinja,sha256=rH9E4eCqgAP4ap-Mo7MINRG9b-UBdKW9lYcCb8HwSkE,725
43
44
  fastlife/templates/Select.jinja,sha256=GoK2oh4Jl5dAfL2wN718RCwtHaQIslzDCN_nwy6a9oY,480
45
+ fastlife/templates/Table.jinja,sha256=Zhqmb-otlp05h3WDliFfK3HkxHrhDoKL0cbH7GgS2aY,132
46
+ fastlife/templates/Tbody.jinja,sha256=K8wwTYcYi8-NYdP4g7MBokvYqJp9QW7DmChADuCa-Gs,35
47
+ fastlife/templates/Td.jinja,sha256=uRE-6nDYXoZhMot1bL55D888Xd19hJrjNWqoyxkQnMQ,126
48
+ fastlife/templates/Tfoot.jinja,sha256=iSHDcwhi7VNql5Yl3jvkrx2WVquT5Zm8to9P3WBlKYQ,35
49
+ fastlife/templates/Th.jinja,sha256=GdxKPkbdTNTR83PyOYr_M4IonyH99O-wjdi-7QBjAvg,126
50
+ fastlife/templates/Thead.jinja,sha256=gp3T4XiEk5zgih0gmmLcVke-Z8AgTol7AQrRtVev480,35
51
+ fastlife/templates/Tr.jinja,sha256=m999VbUMeHDkw_-JsXqtMEZsA9Zklr8eA-NiIk5FFm8,84
44
52
  fastlife/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- fastlife/templates/pydantic_form/Boolean.jinja,sha256=gf8j1Wyy8C95tYsjDjxKL_ivSJPsUHBoRaK-4AiBiBA,467
46
- fastlife/templates/pydantic_form/Checklist.jinja,sha256=s55FqHJGNryTT3h6VWFx6mEgR8lIVBoqo7NGYUTM_rE,775
47
- fastlife/templates/pydantic_form/Dropdown.jinja,sha256=_dBSf7-Ba1Yr4BPXu08yJBSZjUW4Jo8t-s3R6TgN-oc,548
53
+ fastlife/templates/pydantic_form/Boolean.jinja,sha256=1Y54P3AGLE8wd-TcowDsZTY_-XID0AJSqXVjbc-C6WM,471
54
+ fastlife/templates/pydantic_form/Checklist.jinja,sha256=WCyGFQe7wIYbta1v8L8ZghDQmESIpdUDggoNxwHcHKE,781
55
+ fastlife/templates/pydantic_form/Dropdown.jinja,sha256=WbF6V37UCPMNsCvSyaIQ65nclUDUZY1TrNmDjQMq4Ck,554
48
56
  fastlife/templates/pydantic_form/Error.jinja,sha256=Wb5NnVRc4U7ZGKmYV7s4eGenWEug8WK9li48iTlX4cQ,121
49
- fastlife/templates/pydantic_form/Hidden.jinja,sha256=n6CbTSwZr2E_oY8TO2WPbnrLHBaWfe_CXVCYOYmCfts,83
57
+ fastlife/templates/pydantic_form/Hidden.jinja,sha256=NF8Od_mSSnRJAxWqsgeD1C5YzqJso-HCeDjGbpHjmlE,86
50
58
  fastlife/templates/pydantic_form/Hint.jinja,sha256=O0ZsAQnATcG0a_qLQfrwM6VZHmAw3k1W33WYlEBUas8,123
51
- fastlife/templates/pydantic_form/Model.jinja,sha256=1t3eOxYjT_Kl85En_w27gmRuZ3xrET1x87UQfDw0Os4,501
52
- fastlife/templates/pydantic_form/Sequence.jinja,sha256=RU19X6FwNhoFhQ0fBpTrfRsS_gMPkhpDhzyhFShwoHQ,1430
53
- fastlife/templates/pydantic_form/Text.jinja,sha256=DCZNAly_YjYQcGdz-EiCbX5DThHHTDq66KySpiJe3Ik,450
54
- fastlife/templates/pydantic_form/Union.jinja,sha256=aH9Cj9IycCkMkL8j_yb5Ux5ysVZLVET9_AKTndQQX-Q,992
55
- fastlife/templates/pydantic_form/Widget.jinja,sha256=8raoMjtO4ARBfbz8EG-HKT112KkrWG82BbUfbXpAmZs,287
59
+ fastlife/templates/pydantic_form/Model.jinja,sha256=3BdrzNYF-b5Ug-mDYwqSOJXjGnzHYjeIU5LT5ZRQduQ,504
60
+ fastlife/templates/pydantic_form/Sequence.jinja,sha256=hOa4cVMz-3ssH3e4AM_1PtXSVWyOtgTnPcAbY3DPUSI,1437
61
+ fastlife/templates/pydantic_form/Text.jinja,sha256=7OJt4rC11-XCKFKDP8lIsFy6M33pRW9ceD9K-irhiJg,461
62
+ fastlife/templates/pydantic_form/Union.jinja,sha256=h-l6XnowKKW9-iSxw9U1A4ZCT5XnuhDvrAamusGwq5s,987
63
+ fastlife/templates/pydantic_form/Widget.jinja,sha256=yDgdr4adlSiolornrUCsXUJYlhGtRYQRIucDIcV48-g,286
56
64
  fastlife/templating/__init__.py,sha256=UY_hSTlJKDZnkSIK-BzRD4_AXOWgHbRuvJsKAS9ljgE,307
57
65
  fastlife/templating/binding.py,sha256=noY9QrArJGqB1X80Ny-0zk1Dg6T9mMXahjEcIiHvioo,1648
58
66
  fastlife/templating/renderer/__init__.py,sha256=UJUX3T9VYjPQUhS5Enz3P6OtwftimKoGGpoQEpewVFA,181
@@ -73,7 +81,7 @@ fastlife/testing/__init__.py,sha256=vuqwoNUd3BuIp3fm7nkvmYkIGjIimf5zUGhDkeWrg2s,
73
81
  fastlife/testing/testclient.py,sha256=izNTkFgArIUrdSemNl3iiEDdsiUfnb2TtfKnZi3Jwv8,20546
74
82
  fastlife/views/__init__.py,sha256=nn4B_8YTbTmhGPvSd20yyKK_9Dh1Pfh_Iq7z6iK8-CE,154
75
83
  fastlife/views/pydantic_form.py,sha256=KJtH_DK8em0czGPsv0XpzGUFhtycyXdeRldwiU7d_j4,1257
76
- fastlifeweb-0.7.2.dist-info/LICENSE,sha256=F75xSseSKMwqzFj8rswYU6NWS3VoWOc_gY3fJYf9_LI,1504
77
- fastlifeweb-0.7.2.dist-info/METADATA,sha256=i3R2D136yCg5TAGjnCH3xMg3VHJSZKyjEnfnVfSpqyw,1833
78
- fastlifeweb-0.7.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
79
- fastlifeweb-0.7.2.dist-info/RECORD,,
84
+ fastlifeweb-0.8.0.dist-info/LICENSE,sha256=F75xSseSKMwqzFj8rswYU6NWS3VoWOc_gY3fJYf9_LI,1504
85
+ fastlifeweb-0.8.0.dist-info/METADATA,sha256=OuLzpWKIPXlhuZGS-zDqtNTcGuMIPlnyPaOhBID4mPU,1833
86
+ fastlifeweb-0.8.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
87
+ fastlifeweb-0.8.0.dist-info/RECORD,,