reflex 0.7.3a1__py3-none-any.whl → 0.7.3a2__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 reflex might be problematic. Click here for more details.
- reflex/.templates/web/utils/state.js +1 -1
- reflex/app_mixins/middleware.py +2 -3
- {reflex-0.7.3a1.dist-info → reflex-0.7.3a2.dist-info}/METADATA +29 -22
- {reflex-0.7.3a1.dist-info → reflex-0.7.3a2.dist-info}/RECORD +35 -44
- {reflex-0.7.3a1.dist-info → reflex-0.7.3a2.dist-info}/WHEEL +1 -1
- {reflex-0.7.3a1.dist-info → reflex-0.7.3a2.dist-info}/entry_points.txt +0 -3
- benchmarks/__init__.py +0 -3
- benchmarks/benchmark_compile_times.py +0 -147
- benchmarks/benchmark_imports.py +0 -128
- benchmarks/benchmark_lighthouse.py +0 -75
- benchmarks/benchmark_package_size.py +0 -135
- benchmarks/benchmark_web_size.py +0 -106
- benchmarks/conftest.py +0 -20
- benchmarks/lighthouse.sh +0 -77
- benchmarks/utils.py +0 -74
- {reflex-0.7.3a1.dist-info → reflex-0.7.3a2.dist-info}/licenses/LICENSE +0 -0
reflex/app_mixins/middleware.py
CHANGED
|
@@ -74,6 +74,7 @@ class MiddlewareMixin(AppMixin):
|
|
|
74
74
|
Returns:
|
|
75
75
|
The state update to return.
|
|
76
76
|
"""
|
|
77
|
+
out = update
|
|
77
78
|
for middleware in self._middlewares:
|
|
78
79
|
if asyncio.iscoroutinefunction(middleware.postprocess):
|
|
79
80
|
out = await middleware.postprocess(
|
|
@@ -89,6 +90,4 @@ class MiddlewareMixin(AppMixin):
|
|
|
89
90
|
event=event,
|
|
90
91
|
update=update,
|
|
91
92
|
)
|
|
92
|
-
|
|
93
|
-
return out # pyright: ignore [reportReturnType]
|
|
94
|
-
return update
|
|
93
|
+
return out # pyright: ignore[reportReturnType]
|
|
@@ -1,45 +1,52 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3a2
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
|
-
Keywords: web,framework
|
|
6
|
-
Author: Elijah Ahianyo
|
|
7
|
-
Author-Email: Nikhil Rao <nikhil@reflex.dev>, Alek Petuskey <alek@reflex.dev>, Masen Furer <masen@reflex.dev>, =?utf-8?q?Thomas_Brand=C3=A9ho?= <thomas@reflex.dev>, Khaleel Al-Adhami <khaleel@reflex.dev>
|
|
8
|
-
Maintainer-Email: Masen Furer <masen@reflex.dev>, =?utf-8?q?Thomas_Brand=C3=A9ho?= <thomas@reflex.dev>, Khaleel Al-Adhami <khaleel@reflex.dev>
|
|
9
|
-
License-Expression: Apache-2.0
|
|
10
5
|
Project-URL: homepage, https://reflex.dev
|
|
11
6
|
Project-URL: repository, https://github.com/reflex-dev/reflex
|
|
12
7
|
Project-URL: documentation, https://reflex.dev/docs/getting-started/introduction
|
|
8
|
+
Author-email: Nikhil Rao <nikhil@reflex.dev>, Alek Petuskey <alek@reflex.dev>, Masen Furer <masen@reflex.dev>, Elijah Ahianyo <elijahahianyo@gmail.com>, Thomas Brandeho <thomas@reflex.dev>, Khaleel Al-Adhami <khaleel@reflex.dev>
|
|
9
|
+
Maintainer-email: Masen Furer <masen@reflex.dev>, Thomas Brandeho <thomas@reflex.dev>, Khaleel Al-Adhami <khaleel@reflex.dev>
|
|
10
|
+
License: Apache-2.0
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: framework,web
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
20
|
Requires-Python: <4.0,>=3.10
|
|
21
|
+
Requires-Dist: alembic<2.0,>=1.11.1
|
|
22
|
+
Requires-Dist: build<2.0,>=1.0.3
|
|
23
|
+
Requires-Dist: charset-normalizer<4.0,>=3.3.2
|
|
24
|
+
Requires-Dist: distro<2.0,>=1.8.0; platform_system == 'Linux'
|
|
14
25
|
Requires-Dist: fastapi!=0.111.0,!=0.111.1,>=0.96.0
|
|
15
26
|
Requires-Dist: gunicorn<24.0,>=20.1.0
|
|
27
|
+
Requires-Dist: httpx<1.0,>=0.25.1
|
|
16
28
|
Requires-Dist: jinja2<4.0,>=3.1.2
|
|
29
|
+
Requires-Dist: lazy-loader>=0.4
|
|
30
|
+
Requires-Dist: packaging<25.0,>=23.1
|
|
31
|
+
Requires-Dist: platformdirs<5.0,>=3.10.0
|
|
17
32
|
Requires-Dist: psutil<8.0,>=5.9.4
|
|
18
33
|
Requires-Dist: pydantic<3.0,>=1.10.21
|
|
34
|
+
Requires-Dist: python-engineio!=4.6.0
|
|
19
35
|
Requires-Dist: python-multipart<0.1,>=0.0.5
|
|
20
36
|
Requires-Dist: python-socketio<6.0,>=5.7.0
|
|
21
37
|
Requires-Dist: redis<6.0,>=4.3.5
|
|
38
|
+
Requires-Dist: reflex-hosting-cli>=0.1.29
|
|
22
39
|
Requires-Dist: rich<14.0,>=13.0.0
|
|
40
|
+
Requires-Dist: setuptools>=75.0
|
|
23
41
|
Requires-Dist: sqlmodel<0.1,>=0.0.14
|
|
42
|
+
Requires-Dist: starlette-admin<1.0,>=0.11.0
|
|
43
|
+
Requires-Dist: tomlkit<1.0,>=0.12.4
|
|
44
|
+
Requires-Dist: twine<7.0,>=4.0.0
|
|
24
45
|
Requires-Dist: typer<1.0,>=0.15.1
|
|
46
|
+
Requires-Dist: typing-extensions>=4.6.0
|
|
25
47
|
Requires-Dist: uvicorn>=0.20.0
|
|
26
|
-
Requires-Dist: starlette-admin<1.0,>=0.11.0
|
|
27
|
-
Requires-Dist: alembic<2.0,>=1.11.1
|
|
28
|
-
Requires-Dist: platformdirs<5.0,>=3.10.0
|
|
29
|
-
Requires-Dist: distro<2.0,>=1.8.0; platform_system == "Linux"
|
|
30
|
-
Requires-Dist: python-engineio!=4.6.0
|
|
31
|
-
Requires-Dist: wrapt<2.0,>=1.17.0
|
|
32
|
-
Requires-Dist: packaging<25.0,>=23.1
|
|
33
|
-
Requires-Dist: reflex-hosting-cli>=0.1.29
|
|
34
|
-
Requires-Dist: charset-normalizer<4.0,>=3.3.2
|
|
35
48
|
Requires-Dist: wheel<1.0,>=0.42.0
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist: setuptools>=75.0
|
|
38
|
-
Requires-Dist: httpx<1.0,>=0.25.1
|
|
39
|
-
Requires-Dist: twine<7.0,>=4.0.0
|
|
40
|
-
Requires-Dist: tomlkit<1.0,>=0.12.4
|
|
41
|
-
Requires-Dist: lazy_loader>=0.4
|
|
42
|
-
Requires-Dist: typing_extensions>=4.6.0
|
|
49
|
+
Requires-Dist: wrapt<2.0,>=1.17.0
|
|
43
50
|
Description-Content-Type: text/markdown
|
|
44
51
|
|
|
45
52
|
<div align="center">
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
reflex
|
|
11
|
-
reflex
|
|
12
|
-
reflex
|
|
13
|
-
reflex
|
|
1
|
+
reflex/__init__.py,sha256=64HB9b6MKesl3Yv6aZMsozdMKKpgnxirKk-aeN45UYY,10341
|
|
2
|
+
reflex/__init__.pyi,sha256=j4ZkO-mKKw5dFBhJVbaOg7AlncO-JCckV2cHENPiLG0,11303
|
|
3
|
+
reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
|
|
4
|
+
reflex/admin.py,sha256=wu_vYqB0rU2njYBJSI0XZgVEkAFVZNQNUkUUXrlFbZc,343
|
|
5
|
+
reflex/app.py,sha256=YQBe77CIgT_xTpTM-H3TIbwHUUYlHQ4UGA-K4lnzG5k,68739
|
|
6
|
+
reflex/app_module_for_backend.py,sha256=iuEYcJNRai59vReNUIZgixtYlFHYcYp_LNFB9DPQnKs,1134
|
|
7
|
+
reflex/assets.py,sha256=PLTKAMYPKMZq8eWXKX8uco6NZ9IiPGWal0bOPLUmU7k,3364
|
|
8
|
+
reflex/base.py,sha256=T1sY7SJJOpTsOveEiFxp-K39EoIQtRLgqdFZhsdM0DE,3976
|
|
9
|
+
reflex/config.py,sha256=abb4ake03wkXWRWvOfqu5IhSgFIFNcYxuaF3Kt2Q5Q0,35151
|
|
10
|
+
reflex/event.py,sha256=EX-9X-c8gIudZjRDG8qSrVAbegcaGkYXxLLRWg-7IOA,60758
|
|
11
|
+
reflex/model.py,sha256=k6qCweATPW1YRB_qcHwa5X35btJmtIlB4zEQ63FaW3w,17527
|
|
12
|
+
reflex/page.py,sha256=qEt8n5EtawSywCzdsiaNQJWhC8ie-vg8ig0JGuVavPI,2386
|
|
13
|
+
reflex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
reflex/reflex.py,sha256=gmYVXXASlx_4kpyYuqEASS2qNdG2lWbmVpNQ_LYeOJQ,20399
|
|
15
|
+
reflex/route.py,sha256=nn_hJwtQdjiqH_dHXfqMGWKllnyPQZTSR-KWdHDhoOs,4210
|
|
16
|
+
reflex/state.py,sha256=VmXm7SNuecE2y3sZo4yu-JW7frlb3Wi6V2o4A3it4eQ,141566
|
|
17
|
+
reflex/style.py,sha256=dilXPn8de80NzsXT53GPJrmjELC5nPYIlCgongyq1zM,13145
|
|
18
|
+
reflex/testing.py,sha256=c3boyBotUiDImK1lsO-Odeb4tgqRAvRdaT1lZ9QzPHg,35458
|
|
14
19
|
reflex/.templates/apps/blank/assets/favicon.ico,sha256=baxxgDAQ2V4-G5Q4S2yK5uUJTUGkv-AOWBQ0xd6myUo,4286
|
|
15
20
|
reflex/.templates/apps/blank/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
21
|
reflex/.templates/apps/blank/code/blank.py,sha256=oKnsBBZM1-_RFAuwGKgfiCzgsrHlN_m_XP0-Fpnld7k,926
|
|
@@ -21,6 +26,7 @@ reflex/.templates/jinja/custom_components/demo_app.py.jinja2,sha256=ipbKtObNqQLc
|
|
|
21
26
|
reflex/.templates/jinja/custom_components/pyproject.toml.jinja2,sha256=HG-k3pruUlMy7xYz339hgFkNMTLqB-C_FTLKkOgfBPM,630
|
|
22
27
|
reflex/.templates/jinja/custom_components/src.py.jinja2,sha256=e80PwMI6NoeQtGJ0NXWhYrkqUe7jvvJTFuztYQe-R5w,2403
|
|
23
28
|
reflex/.templates/jinja/web/package.json.jinja2,sha256=Dyg7DbKaEgxUoaV_DUsv_bHcT0h1mXKgO4R_pVzlHQw,707
|
|
29
|
+
reflex/.templates/jinja/web/tailwind.config.js.jinja2,sha256=uZMIvtL94OZh6h8zsduv3ox6EXnnYgfVXB_5moOe86E,761
|
|
24
30
|
reflex/.templates/jinja/web/pages/_app.js.jinja2,sha256=s0pSHZAZB9SUI3PabTB8uB4I3kehMc-L2DXBxSW6iQY,1375
|
|
25
31
|
reflex/.templates/jinja/web/pages/_document.js.jinja2,sha256=E2r3MWp-gimAa6DdRs9ErQpPEyjS_yV5fdid_wdOOlA,182
|
|
26
32
|
reflex/.templates/jinja/web/pages/base_page.js.jinja2,sha256=-Jykv29ZqzsQyyRe_iR2gUD5ac-X5RhDrGs0-diOMOA,400
|
|
@@ -32,41 +38,36 @@ reflex/.templates/jinja/web/pages/stateful_component.js.jinja2,sha256=E_CwG5o4pK
|
|
|
32
38
|
reflex/.templates/jinja/web/pages/stateful_components.js.jinja2,sha256=BfHi7ckH9u5xOliKWxjgmnia6AJbNnII97SC-dt_KSU,101
|
|
33
39
|
reflex/.templates/jinja/web/pages/utils.js.jinja2,sha256=RRsAXc5VM5SJ5jgxc0M6XSDxRUGefUdK85TTEEZ1d3I,3653
|
|
34
40
|
reflex/.templates/jinja/web/styles/styles.css.jinja2,sha256=4-CvqGR8-nRzkuCOSp_PdqmhPEmOs_kOhskOlhLMEUg,141
|
|
35
|
-
reflex/.templates/jinja/web/tailwind.config.js.jinja2,sha256=uZMIvtL94OZh6h8zsduv3ox6EXnnYgfVXB_5moOe86E,761
|
|
36
41
|
reflex/.templates/jinja/web/utils/context.js.jinja2,sha256=-fAc0G1h_GJ-geT59KzdtgE1wfpt3ouXBA8ySWjcRIw,3911
|
|
37
42
|
reflex/.templates/jinja/web/utils/theme.js.jinja2,sha256=OSpBMh0Z9tTeqb10js4ZtnE9s1RV4gJfE8629csST8M,26
|
|
38
43
|
reflex/.templates/web/.gitignore,sha256=3tT0CtVkCL09D_Y3Hd4myUgGcBuESeavCa0WHU5ifJ4,417
|
|
39
|
-
reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js,sha256=Xx_SdWsxABz3JzWDKxuOkuq87GEXK7DD5sqahPFbEzw,1621
|
|
40
|
-
reflex/.templates/web/components/shiki/code.js,sha256=UO0hQnm2w1j2VMgj46cnplO6ZLK3p3qhcxp6irjZBxQ,1116
|
|
41
44
|
reflex/.templates/web/jsconfig.json,sha256=rhQZZRBYxBWclFYTeU6UakzbGveM4qyRQZUpEAVhyqY,118
|
|
42
45
|
reflex/.templates/web/next.config.js,sha256=ZpGOqo9wHEbt0S08G70VfUNUjFe79UXo7Cde8X8V10E,118
|
|
43
46
|
reflex/.templates/web/postcss.config.js,sha256=pWczoUW-Y0gYUuHAW4ZK0hQNWTcMC2UGu2i-sQ-YqUs,109
|
|
47
|
+
reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js,sha256=Xx_SdWsxABz3JzWDKxuOkuq87GEXK7DD5sqahPFbEzw,1621
|
|
48
|
+
reflex/.templates/web/components/shiki/code.js,sha256=UO0hQnm2w1j2VMgj46cnplO6ZLK3p3qhcxp6irjZBxQ,1116
|
|
44
49
|
reflex/.templates/web/styles/tailwind.css,sha256=wGOoICTy1G0e5bWZ4LYOVgRa3ZT7M44tC4g6CKh6ZPo,112
|
|
45
50
|
reflex/.templates/web/utils/client_side_routing.js,sha256=cOu4wUHDQtGl1yo5goxljZ94SLZLyr9R3S9Rehcvjio,1475
|
|
51
|
+
reflex/.templates/web/utils/state.js,sha256=s_k36cWTWYI_8_GVa2X6oVigjQ7-3Zo5cf3gbD77iJA,30530
|
|
46
52
|
reflex/.templates/web/utils/helpers/dataeditor.js,sha256=pG6MgsHuStDR7-qPipzfiK32j9bKDBa-4hZ0JSUo4JM,1623
|
|
47
53
|
reflex/.templates/web/utils/helpers/debounce.js,sha256=xGhtTRtS_xIcaeqnYVvYJNseLgQVk-DW-eFiHJYO9As,528
|
|
48
54
|
reflex/.templates/web/utils/helpers/paste.js,sha256=ef30HsR83jRzzvZnl8yV79yqFP8TC_u8SlN99cCS_OM,1799
|
|
49
55
|
reflex/.templates/web/utils/helpers/range.js,sha256=Bjr7Ex1Mghpsopjfrcp__IVFw8F8AsMiP-0nE20ZZwk,1091
|
|
50
56
|
reflex/.templates/web/utils/helpers/throttle.js,sha256=qxeyaEojaTeX36FPGftzVWrzDsRQU4iqg3U9RJz9Vj4,566
|
|
51
|
-
reflex/.templates/web/utils/state.js,sha256=4qK7Xshvif92_LjfiBBCKymPNhfa5O7syFpvZ4oDe1U,30529
|
|
52
|
-
reflex/__init__.py,sha256=64HB9b6MKesl3Yv6aZMsozdMKKpgnxirKk-aeN45UYY,10341
|
|
53
|
-
reflex/__init__.pyi,sha256=j4ZkO-mKKw5dFBhJVbaOg7AlncO-JCckV2cHENPiLG0,11303
|
|
54
|
-
reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
|
|
55
|
-
reflex/admin.py,sha256=wu_vYqB0rU2njYBJSI0XZgVEkAFVZNQNUkUUXrlFbZc,343
|
|
56
|
-
reflex/app.py,sha256=YQBe77CIgT_xTpTM-H3TIbwHUUYlHQ4UGA-K4lnzG5k,68739
|
|
57
57
|
reflex/app_mixins/__init__.py,sha256=Oegz3-gZLP9p2OAN5ALNbsgxuNQfS6lGZgQA8cc-9mQ,137
|
|
58
58
|
reflex/app_mixins/lifespan.py,sha256=fwtaa9NnyENdDa8_RUHUsT8L9qnZKxcpL-mEGLTGldo,3280
|
|
59
|
-
reflex/app_mixins/middleware.py,sha256=
|
|
59
|
+
reflex/app_mixins/middleware.py,sha256=_B33NZdbuI16IUPTENyfCmEfJ6OxFHm6rObl3JdIs-Y,3286
|
|
60
60
|
reflex/app_mixins/mixin.py,sha256=si0Pa0U1EtJc-a6iZntqU9B7_NrPILwrGFxk9mKHBCE,317
|
|
61
|
-
reflex/app_module_for_backend.py,sha256=iuEYcJNRai59vReNUIZgixtYlFHYcYp_LNFB9DPQnKs,1134
|
|
62
|
-
reflex/assets.py,sha256=PLTKAMYPKMZq8eWXKX8uco6NZ9IiPGWal0bOPLUmU7k,3364
|
|
63
|
-
reflex/base.py,sha256=T1sY7SJJOpTsOveEiFxp-K39EoIQtRLgqdFZhsdM0DE,3976
|
|
64
61
|
reflex/compiler/__init__.py,sha256=r8jqmDSFf09iV2lHlNhfc9XrTLjNxfDNwPYlxS4cmHE,27
|
|
65
62
|
reflex/compiler/compiler.py,sha256=S7v2t5um_TrkAEP48LUjcZ9oQPd1AGQtPcANc7LP4r4,23789
|
|
66
63
|
reflex/compiler/templates.py,sha256=NX3YUMVGGyDsy2JuDv-AmklMM0pKJHLPsIpdqamgqRQ,5854
|
|
67
64
|
reflex/compiler/utils.py,sha256=w8KcAXneXQxPOSei7BvAfA9MzR4jQWjDlxm8ahN1UM0,16083
|
|
68
65
|
reflex/components/__init__.py,sha256=zbIXThv1WPI0FdIGf9G9RAmGoCRoGy7nHcSZ8K5D5bA,624
|
|
69
66
|
reflex/components/__init__.pyi,sha256=qoj1zIWaitcZOGcJ6k7wuGJk_GAJCE9Xtx8CeRVrvoE,861
|
|
67
|
+
reflex/components/component.py,sha256=ksc0Vc3hgZkTEyDZksarETCrjA-pvDMnd7T11F01ecg,88766
|
|
68
|
+
reflex/components/dynamic.py,sha256=W-jNbNzll1w6YoMcoF-LMjHqP4UtoQHPV-NamXs-eAY,7220
|
|
69
|
+
reflex/components/literals.py,sha256=hogLnwTJxFJODIvqihg-GD9kFZVsEBDoYzaRit56Nuk,501
|
|
70
|
+
reflex/components/props.py,sha256=8F2ZNeF16BDiTh-E4F-U_vks41BMJgmkTM7xbjGvfOA,2593
|
|
70
71
|
reflex/components/base/__init__.py,sha256=QIOxOPT87WrSE4TSHAsZ-358VzvUXAe1w8vWogQ3Uuo,730
|
|
71
72
|
reflex/components/base/__init__.pyi,sha256=c-8lUF9MAgAo9OHMjKIrV2ScM5S0fg8gTXp3iYFwVKU,1055
|
|
72
73
|
reflex/components/base/app_wrap.py,sha256=5K_myvYvHPeAJbm3BdEX17tKvdNEj6SV9RYahbIQBAQ,514
|
|
@@ -90,7 +91,6 @@ reflex/components/base/script.py,sha256=OZ2ZOWiEmzHRC0-OgH4qj_Dv6X-JSsX5OgaqLXld
|
|
|
90
91
|
reflex/components/base/script.pyi,sha256=EvSAPlUHpYYtnSV7YVwaJao9-bhWIs3EpBzDE4T88W8,3505
|
|
91
92
|
reflex/components/base/strict_mode.py,sha256=_Rl2uGzL8gXTANOpoSU7uxsUQRH5JeTk2EIceWJJa5E,251
|
|
92
93
|
reflex/components/base/strict_mode.pyi,sha256=VpwCCPcubG0pdvzPKYLv8rBi730fUsySQfNCGAUuADM,2178
|
|
93
|
-
reflex/components/component.py,sha256=ksc0Vc3hgZkTEyDZksarETCrjA-pvDMnd7T11F01ecg,88766
|
|
94
94
|
reflex/components/core/__init__.py,sha256=1Z5MUA5wRPi4w7TXzRFyCfxbG8lUMqs29buWHIGG-CU,1321
|
|
95
95
|
reflex/components/core/__init__.pyi,sha256=HDZSx-RIBpryukJo8ECdxSnZwpThP0IR2LV66h1XyJ4,2046
|
|
96
96
|
reflex/components/core/auto_scroll.py,sha256=3jtFUqMUM1R_YyxWjbNVLiLktw6HHp50EzIFTkFtgto,3616
|
|
@@ -109,13 +109,13 @@ reflex/components/core/debounce.pyi,sha256=QjyPCR1eVGxTdDFnFPD9Ir9QbJLk-2xU8f-hS
|
|
|
109
109
|
reflex/components/core/foreach.py,sha256=s2wgxcgEBc_8PfTKolDjbRz1pgdKZCdq8tqk87t3QVQ,5827
|
|
110
110
|
reflex/components/core/html.py,sha256=RnFLDLSNqNz3ypSEH5CRV3YcjGzuZ33ok2qSYd9LzQQ,1299
|
|
111
111
|
reflex/components/core/html.pyi,sha256=-v5BiB_x-pqNUF5b-Ewil_UmK0Gz5BgiX1OPYE6o9qE,8742
|
|
112
|
-
reflex/components/core/layout/__init__.py,sha256=znldZaj_NGt8qCZDG70GMwjMTskcvCf_2N_EjCAHwdc,30
|
|
113
112
|
reflex/components/core/match.py,sha256=M39oK1DxnfU1GW07_78mo8vYttR7PP-jH7WZY111iRQ,9112
|
|
114
113
|
reflex/components/core/responsive.py,sha256=ACZdtJ4a4F8B3dm1k8h6J2_UJx0Z5LDB7XHQ2ty4wAc,1911
|
|
115
114
|
reflex/components/core/sticky.py,sha256=2B3TxrwG2Rtp_lv1VkMOIF2bqSiT7qYGbqbiZiMKxKY,3856
|
|
116
115
|
reflex/components/core/sticky.pyi,sha256=fHmH_EwTvrVUHbq-13fT-TK0R_yUMBSc2Hp-1IowpTM,32071
|
|
117
116
|
reflex/components/core/upload.py,sha256=PVlw_sP_-AV3q0ri5NPIVoz3QdZZtqVIcEQuRgeb8Rs,11913
|
|
118
117
|
reflex/components/core/upload.pyi,sha256=ZK22Hnc4eXhOsRbrAbakrzM5oGk05DdRHWurBNI5HRM,14602
|
|
118
|
+
reflex/components/core/layout/__init__.py,sha256=znldZaj_NGt8qCZDG70GMwjMTskcvCf_2N_EjCAHwdc,30
|
|
119
119
|
reflex/components/datadisplay/__init__.py,sha256=L8pWWKNHWdUD2fbZRoEKjd_8c_hpDdGYO463hwkoIi4,438
|
|
120
120
|
reflex/components/datadisplay/__init__.pyi,sha256=rYMwO_X4NvUex6IL2MMTnhdFRp8Lz5zweMwXaW_l7nc,588
|
|
121
121
|
reflex/components/datadisplay/code.py,sha256=5tO--QgPJj3-hBNjQ3SGNgLYpjBwTwtOUnWM5oLU4Kg,14674
|
|
@@ -125,15 +125,14 @@ reflex/components/datadisplay/dataeditor.pyi,sha256=Q85OI-lq1iIbcQv5AEQD2SZc5Qh0
|
|
|
125
125
|
reflex/components/datadisplay/logo.py,sha256=5YeXXIg19jJdY-KMP1_WJNmrh0oVSy4axy8Pbp275es,1981
|
|
126
126
|
reflex/components/datadisplay/shiki_code_block.py,sha256=H1sJ26aqUSO6_RQRo5DeFPGCSaKdN0dgpCFowy3bcUY,23740
|
|
127
127
|
reflex/components/datadisplay/shiki_code_block.pyi,sha256=fW2igOLVSfB4qaaOXQJMo9dyJbH1pfUESd7yBec9Tak,56361
|
|
128
|
-
reflex/components/dynamic.py,sha256=W-jNbNzll1w6YoMcoF-LMjHqP4UtoQHPV-NamXs-eAY,7220
|
|
129
128
|
reflex/components/el/__init__.py,sha256=nfIjf_cyieEmxptKjA6wRjoongswXv4X3n6vDmsdarI,416
|
|
130
129
|
reflex/components/el/__init__.pyi,sha256=hp8dLScFQR0avzEAKrB_GKk8iFty184mLcVij6IQ3Vc,10894
|
|
130
|
+
reflex/components/el/element.py,sha256=CFUa_6Dz4WsIdP11MzqlW9GBDhJcSU6lJSmWA9zap0c,501
|
|
131
|
+
reflex/components/el/element.pyi,sha256=pP5jMTGjYm06d8ZaQGeQazx5PuFLLlBDXcZB7cC7kp8,2166
|
|
131
132
|
reflex/components/el/constants/__init__.py,sha256=9h2hdnOSltQLDEM6w1nGmv1B8Bf0tMquTCi5RhvBT6c,113
|
|
132
133
|
reflex/components/el/constants/html.py,sha256=hIebFwWritMmd3VCMYBNg0k_2UM1QDIhT_Q-EQsCWEA,7175
|
|
133
134
|
reflex/components/el/constants/react.py,sha256=f1-Vo8iWn2jSrR7vy-UwGbGRvw88UUZnbb3Rb56MSS4,15554
|
|
134
135
|
reflex/components/el/constants/reflex.py,sha256=7ChVeOvzjovZLHa-4vjWEGDqHsefV3tNsa8TKHWFaXM,1697
|
|
135
|
-
reflex/components/el/element.py,sha256=CFUa_6Dz4WsIdP11MzqlW9GBDhJcSU6lJSmWA9zap0c,501
|
|
136
|
-
reflex/components/el/element.pyi,sha256=pP5jMTGjYm06d8ZaQGeQazx5PuFLLlBDXcZB7cC7kp8,2166
|
|
137
136
|
reflex/components/el/elements/__init__.py,sha256=tHmTJKW02etckBiNqKwu7y_OwqFFSOscKEtzfhOygCM,2697
|
|
138
137
|
reflex/components/el/elements/__init__.pyi,sha256=1rtYb-IgDJ6sbVuC83V_9gS5d6oSsFmVTerlsPCdfiw,11075
|
|
139
138
|
reflex/components/el/elements/base.py,sha256=4jnwyCQUHvWcIfwiIWVCiIC_jbwZlkAiOgx73t7tdw8,3075
|
|
@@ -159,7 +158,6 @@ reflex/components/el/elements/typography.pyi,sha256=TTXR78HfvJ0sjYYqhny-RqZTe7tV
|
|
|
159
158
|
reflex/components/gridjs/__init__.py,sha256=xJwDm1AZ70L5-t9LLqZwGUtDpijbf1KuMYDT-j8g3pM,88
|
|
160
159
|
reflex/components/gridjs/datatable.py,sha256=Q2P2lFbPEujVa6bfetV0w4Oc81APX9YgVKGnKCvhSxY,4197
|
|
161
160
|
reflex/components/gridjs/datatable.pyi,sha256=zVZTSTTQJY5jjrCTnyah3XM6aySyhq_mbhBWnbFg6Io,4859
|
|
162
|
-
reflex/components/literals.py,sha256=hogLnwTJxFJODIvqihg-GD9kFZVsEBDoYzaRit56Nuk,501
|
|
163
161
|
reflex/components/lucide/__init__.py,sha256=EggTK2MuQKQeOBLKW-mF0VaDK9zdWBImu1HO2dvHZbE,73
|
|
164
162
|
reflex/components/lucide/icon.py,sha256=jwwQGyoUXItWh991O2l4Jh2j9Caocmt5J0KXJwdaZ3o,33849
|
|
165
163
|
reflex/components/lucide/icon.pyi,sha256=DZkrFkUSq-BT23taozAIDfPuHAF3V9AsVYwaEeOCgm0,35884
|
|
@@ -181,7 +179,6 @@ reflex/components/next/video.pyi,sha256=z7nX_P2rSBgFIAMhqOVEbExCJM8srSdEczR2QXcP
|
|
|
181
179
|
reflex/components/plotly/__init__.py,sha256=6B_woBJhkrVA9O_AbOTbsA_SxWsqjicYHmLA9FLjGfU,650
|
|
182
180
|
reflex/components/plotly/plotly.py,sha256=YBYXZ-JMKHV6kt5Aki3iUjBDuu25Dz6JsNAxGyWaOlI,14854
|
|
183
181
|
reflex/components/plotly/plotly.pyi,sha256=Qsxuz3ltLozNpk40e8iY92X8sos4hI7NhXAVqAndzkg,46843
|
|
184
|
-
reflex/components/props.py,sha256=8F2ZNeF16BDiTh-E4F-U_vks41BMJgmkTM7xbjGvfOA,2593
|
|
185
182
|
reflex/components/radix/__init__.py,sha256=fRsLvIO3MrTtPOXtmnxYDB9phvzlcbyB_utgpafYMho,474
|
|
186
183
|
reflex/components/radix/__init__.pyi,sha256=YpWw_k35yv_Yq_0RZNCb52fJZ3dANWAnQllhVoVCWEE,3988
|
|
187
184
|
reflex/components/radix/primitives/__init__.py,sha256=R2sdZJqQCYaLScGkXnXDKAjVgV5MidceemooEUtvBt4,443
|
|
@@ -342,7 +339,6 @@ reflex/components/tags/iter_tag.py,sha256=AgKtcRvuxUe8QJPU8iQp6HvOQwdENjlYFO8dYs
|
|
|
342
339
|
reflex/components/tags/match_tag.py,sha256=3lba1H5pCcKkqxEHzM6DZb5s9s0yJLN4Se3vdhzar24,580
|
|
343
340
|
reflex/components/tags/tag.py,sha256=1fopahujLVjH871UOdmau_n1kEddbQotN5MpKW_s8PU,3644
|
|
344
341
|
reflex/components/tags/tagless.py,sha256=qO7Gm4V0ITDyymHkyltfz53155ZBt-W_WIPDYy93ca0,587
|
|
345
|
-
reflex/config.py,sha256=abb4ake03wkXWRWvOfqu5IhSgFIFNcYxuaF3Kt2Q5Q0,35151
|
|
346
342
|
reflex/constants/__init__.py,sha256=BG41QmjUHMQmtaROrD7YsV8AO24t2NnvKIvDx_0Qwss,2196
|
|
347
343
|
reflex/constants/base.py,sha256=RfzOQdfJcQhVoIQRBNRAcIMyhllIHFd2hRZ37P1N28E,7837
|
|
348
344
|
reflex/constants/colors.py,sha256=cgLn8iEWtlpjQgbhhlCOGjbhfOULKnzqqzPph63SJoI,1613
|
|
@@ -357,7 +353,6 @@ reflex/constants/style.py,sha256=EPgRYHhAlcrPUBc2HkDTdTj-Q0uDAXHlq8Sp6D35Zf4,475
|
|
|
357
353
|
reflex/constants/utils.py,sha256=GJhFj1uba54CDPEm70tWs8B5iS2siHgeNi--oGCjeRc,759
|
|
358
354
|
reflex/custom_components/__init__.py,sha256=R4zsvOi4dfPmHc18KEphohXnQFBPnUCb50cMR5hSLDE,36
|
|
359
355
|
reflex/custom_components/custom_components.py,sha256=62mG6tCj6nt6t_UYFu8Vcjsv7PiqABiJRQ-xsYGYsX0,33376
|
|
360
|
-
reflex/event.py,sha256=EX-9X-c8gIudZjRDG8qSrVAbegcaGkYXxLLRWg-7IOA,60758
|
|
361
356
|
reflex/experimental/__init__.py,sha256=bvJ6qFeO3xT3L-8IBtk4ecoi5rda3EDvblgNP60yhEo,2206
|
|
362
357
|
reflex/experimental/client_state.py,sha256=p_Toz94fNQGMbHY1WlwfQ-i_M01f1ExA9t1iokSvdLc,9880
|
|
363
358
|
reflex/experimental/hooks.py,sha256=CHYGrAE5t8riltrJmDFgJ4D2Vhmhw-y3B3MSGNlOQow,2366
|
|
@@ -373,14 +368,6 @@ reflex/istate/wrappers.py,sha256=p8uuioXRbR5hperwbOJHUcWdu7hukLikQdoR7qrnKsI,909
|
|
|
373
368
|
reflex/middleware/__init__.py,sha256=x7xTeDuc73Hjj43k1J63naC9x8vzFxl4sq7cCFBX7sk,111
|
|
374
369
|
reflex/middleware/hydrate_middleware.py,sha256=1ch7bx2ZhojOR15b-LHD2JztrWCnpPJjTe8MWHJe-5Y,1510
|
|
375
370
|
reflex/middleware/middleware.py,sha256=p5VVoIgQ_NwOg_GOY6g0S4fmrV76_VE1zt-HiwbMw-s,1158
|
|
376
|
-
reflex/model.py,sha256=k6qCweATPW1YRB_qcHwa5X35btJmtIlB4zEQ63FaW3w,17527
|
|
377
|
-
reflex/page.py,sha256=qEt8n5EtawSywCzdsiaNQJWhC8ie-vg8ig0JGuVavPI,2386
|
|
378
|
-
reflex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
379
|
-
reflex/reflex.py,sha256=gmYVXXASlx_4kpyYuqEASS2qNdG2lWbmVpNQ_LYeOJQ,20399
|
|
380
|
-
reflex/route.py,sha256=nn_hJwtQdjiqH_dHXfqMGWKllnyPQZTSR-KWdHDhoOs,4210
|
|
381
|
-
reflex/state.py,sha256=VmXm7SNuecE2y3sZo4yu-JW7frlb3Wi6V2o4A3it4eQ,141566
|
|
382
|
-
reflex/style.py,sha256=dilXPn8de80NzsXT53GPJrmjELC5nPYIlCgongyq1zM,13145
|
|
383
|
-
reflex/testing.py,sha256=c3boyBotUiDImK1lsO-Odeb4tgqRAvRdaT1lZ9QzPHg,35458
|
|
384
371
|
reflex/utils/__init__.py,sha256=y-AHKiRQAhk2oAkvn7W8cRVTZVK625ff8tTwvZtO7S4,24
|
|
385
372
|
reflex/utils/build.py,sha256=gm_lRsOqKeRD5mBiRToJcT4Vt_ZQPzDuazGfvJlSeeQ,9024
|
|
386
373
|
reflex/utils/codespaces.py,sha256=TzDK--pHwP4r8Nzl0iB_8r-cOFmmL6nHfZ9xRQHA-KY,2754
|
|
@@ -411,4 +398,8 @@ reflex/vars/function.py,sha256=2sVnhgetPSwtor8VFtAiYJdzZ9IRNzAKdsUJG6dXQcE,14461
|
|
|
411
398
|
reflex/vars/number.py,sha256=hacFEtv-63tMQN-oeVDWkrLFQL4utYG-b3ahYTb8b4M,29573
|
|
412
399
|
reflex/vars/object.py,sha256=-fGqHThozjxAAuQL-wTwEItPiFI-ps53P2bKoSlW_As,17081
|
|
413
400
|
reflex/vars/sequence.py,sha256=wxyiTV-_-N6FJNufIatubsnhEpXHFShcw3GEEEpYy3M,55893
|
|
414
|
-
reflex-0.7.
|
|
401
|
+
reflex-0.7.3a2.dist-info/METADATA,sha256=Jnwppkn5ZoQCXpqehgIsJXD8PyHro4LU_nxWDWeC3a4,12090
|
|
402
|
+
reflex-0.7.3a2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
403
|
+
reflex-0.7.3a2.dist-info/entry_points.txt,sha256=Rxt4dXc7MLBNt5CSHTehVPuSe9Xqow4HLX55nD9tQQ0,45
|
|
404
|
+
reflex-0.7.3a2.dist-info/licenses/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
|
|
405
|
+
reflex-0.7.3a2.dist-info/RECORD,,
|
benchmarks/__init__.py
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"""Extracts the compile times from the JSON files in the specified directory and inserts them into the database."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import argparse
|
|
6
|
-
import json
|
|
7
|
-
import os
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
from utils import send_data_to_posthog
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def extract_stats_from_json(json_file: str) -> list[dict]:
|
|
14
|
-
"""Extracts the stats from the JSON data and returns them as a list of dictionaries.
|
|
15
|
-
|
|
16
|
-
Args:
|
|
17
|
-
json_file: The JSON file to extract the stats data from.
|
|
18
|
-
|
|
19
|
-
Returns:
|
|
20
|
-
list[dict]: The stats for each test.
|
|
21
|
-
"""
|
|
22
|
-
with Path(json_file).open() as file:
|
|
23
|
-
json_data = json.load(file)
|
|
24
|
-
|
|
25
|
-
# Load the JSON data if it is a string, otherwise assume it's already a dictionary
|
|
26
|
-
data = json.loads(json_data) if isinstance(json_data, str) else json_data
|
|
27
|
-
|
|
28
|
-
# Initialize an empty list to store the stats for each test
|
|
29
|
-
test_stats = []
|
|
30
|
-
|
|
31
|
-
# Iterate over each test in the 'benchmarks' list
|
|
32
|
-
for test in data.get("benchmarks", []):
|
|
33
|
-
group = test.get("group", None)
|
|
34
|
-
stats = test.get("stats", {})
|
|
35
|
-
full_name = test.get("fullname")
|
|
36
|
-
file_name = (
|
|
37
|
-
full_name.split("/")[-1].split("::")[0].strip(".py") if full_name else None
|
|
38
|
-
)
|
|
39
|
-
test_name = test.get("name", "Unknown Test")
|
|
40
|
-
|
|
41
|
-
test_stats.append(
|
|
42
|
-
{
|
|
43
|
-
"test_name": test_name,
|
|
44
|
-
"group": group,
|
|
45
|
-
"stats": stats,
|
|
46
|
-
"full_name": full_name,
|
|
47
|
-
"file_name": file_name,
|
|
48
|
-
}
|
|
49
|
-
)
|
|
50
|
-
return test_stats
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def insert_benchmarking_data(
|
|
54
|
-
os_type_version: str,
|
|
55
|
-
python_version: str,
|
|
56
|
-
performance_data: list[dict],
|
|
57
|
-
commit_sha: str,
|
|
58
|
-
pr_title: str,
|
|
59
|
-
branch_name: str,
|
|
60
|
-
event_type: str,
|
|
61
|
-
pr_id: str,
|
|
62
|
-
):
|
|
63
|
-
"""Insert the benchmarking data into the database.
|
|
64
|
-
|
|
65
|
-
Args:
|
|
66
|
-
os_type_version: The OS type and version to insert.
|
|
67
|
-
python_version: The Python version to insert.
|
|
68
|
-
performance_data: The performance data of reflex web to insert.
|
|
69
|
-
commit_sha: The commit SHA to insert.
|
|
70
|
-
pr_title: The PR title to insert.
|
|
71
|
-
branch_name: The name of the branch.
|
|
72
|
-
event_type: Type of github event(push, pull request, etc).
|
|
73
|
-
pr_id: Id of the PR.
|
|
74
|
-
"""
|
|
75
|
-
# Prepare the event data
|
|
76
|
-
properties = {
|
|
77
|
-
"os": os_type_version,
|
|
78
|
-
"python_version": python_version,
|
|
79
|
-
"distinct_id": commit_sha,
|
|
80
|
-
"pr_title": pr_title,
|
|
81
|
-
"branch_name": branch_name,
|
|
82
|
-
"event_type": event_type,
|
|
83
|
-
"performance": performance_data,
|
|
84
|
-
"pr_id": pr_id,
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
send_data_to_posthog("simple_app_benchmark", properties)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def main():
|
|
91
|
-
"""Runs the benchmarks and inserts the results."""
|
|
92
|
-
# Get the commit SHA and JSON directory from the command line arguments
|
|
93
|
-
parser = argparse.ArgumentParser(description="Run benchmarks and process results.")
|
|
94
|
-
parser.add_argument(
|
|
95
|
-
"--os", help="The OS type and version to insert into the database."
|
|
96
|
-
)
|
|
97
|
-
parser.add_argument(
|
|
98
|
-
"--python-version", help="The Python version to insert into the database."
|
|
99
|
-
)
|
|
100
|
-
parser.add_argument(
|
|
101
|
-
"--commit-sha", help="The commit SHA to insert into the database."
|
|
102
|
-
)
|
|
103
|
-
parser.add_argument(
|
|
104
|
-
"--benchmark-json",
|
|
105
|
-
help="The JSON file containing the benchmark results.",
|
|
106
|
-
)
|
|
107
|
-
parser.add_argument(
|
|
108
|
-
"--pr-title",
|
|
109
|
-
help="The PR title to insert into the database.",
|
|
110
|
-
)
|
|
111
|
-
parser.add_argument(
|
|
112
|
-
"--branch-name",
|
|
113
|
-
help="The current branch",
|
|
114
|
-
required=True,
|
|
115
|
-
)
|
|
116
|
-
parser.add_argument(
|
|
117
|
-
"--event-type",
|
|
118
|
-
help="The github event type",
|
|
119
|
-
required=True,
|
|
120
|
-
)
|
|
121
|
-
parser.add_argument(
|
|
122
|
-
"--pr-id",
|
|
123
|
-
help="ID of the PR.",
|
|
124
|
-
required=True,
|
|
125
|
-
)
|
|
126
|
-
args = parser.parse_args()
|
|
127
|
-
|
|
128
|
-
# Get the PR title from env or the args. For the PR merge or push event, there is no PR title, leaving it empty.
|
|
129
|
-
pr_title = args.pr_title or os.getenv("PR_TITLE", "")
|
|
130
|
-
|
|
131
|
-
# Get the results of pytest benchmarks
|
|
132
|
-
cleaned_benchmark_results = extract_stats_from_json(args.benchmark_json)
|
|
133
|
-
# Insert the data into the database
|
|
134
|
-
insert_benchmarking_data(
|
|
135
|
-
os_type_version=args.os,
|
|
136
|
-
python_version=args.python_version,
|
|
137
|
-
performance_data=cleaned_benchmark_results,
|
|
138
|
-
commit_sha=args.commit_sha,
|
|
139
|
-
pr_title=pr_title,
|
|
140
|
-
branch_name=args.branch_name,
|
|
141
|
-
event_type=args.event_type,
|
|
142
|
-
pr_id=args.pr_id,
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if __name__ == "__main__":
|
|
147
|
-
main()
|
benchmarks/benchmark_imports.py
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
"""Extract and upload benchmarking data to PostHog."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import argparse
|
|
6
|
-
import json
|
|
7
|
-
import os
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
from utils import send_data_to_posthog
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def extract_stats_from_json(json_file: str) -> dict:
|
|
14
|
-
"""Extracts the stats from the JSON data and returns them as dictionaries.
|
|
15
|
-
|
|
16
|
-
Args:
|
|
17
|
-
json_file: The JSON file to extract the stats data from.
|
|
18
|
-
|
|
19
|
-
Returns:
|
|
20
|
-
dict: The stats for each test.
|
|
21
|
-
"""
|
|
22
|
-
with Path(json_file).open() as file:
|
|
23
|
-
json_data = json.load(file)
|
|
24
|
-
|
|
25
|
-
# Load the JSON data if it is a string, otherwise assume it's already a dictionary
|
|
26
|
-
data = json.loads(json_data) if isinstance(json_data, str) else json_data
|
|
27
|
-
|
|
28
|
-
result = data.get("results", [{}])[0]
|
|
29
|
-
return {
|
|
30
|
-
k: v
|
|
31
|
-
for k, v in result.items()
|
|
32
|
-
if k in ("mean", "stddev", "median", "min", "max")
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def insert_benchmarking_data(
|
|
37
|
-
os_type_version: str,
|
|
38
|
-
python_version: str,
|
|
39
|
-
performance_data: dict,
|
|
40
|
-
commit_sha: str,
|
|
41
|
-
pr_title: str,
|
|
42
|
-
branch_name: str,
|
|
43
|
-
pr_id: str,
|
|
44
|
-
app_name: str,
|
|
45
|
-
):
|
|
46
|
-
"""Insert the benchmarking data into the database.
|
|
47
|
-
|
|
48
|
-
Args:
|
|
49
|
-
os_type_version: The OS type and version to insert.
|
|
50
|
-
python_version: The Python version to insert.
|
|
51
|
-
performance_data: The imports performance data to insert.
|
|
52
|
-
commit_sha: The commit SHA to insert.
|
|
53
|
-
pr_title: The PR title to insert.
|
|
54
|
-
branch_name: The name of the branch.
|
|
55
|
-
pr_id: Id of the PR.
|
|
56
|
-
app_name: The name of the app being measured.
|
|
57
|
-
"""
|
|
58
|
-
properties = {
|
|
59
|
-
"os": os_type_version,
|
|
60
|
-
"python_version": python_version,
|
|
61
|
-
"distinct_id": commit_sha,
|
|
62
|
-
"pr_title": pr_title,
|
|
63
|
-
"branch_name": branch_name,
|
|
64
|
-
"pr_id": pr_id,
|
|
65
|
-
"performance": performance_data,
|
|
66
|
-
"app_name": app_name,
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
send_data_to_posthog("import_benchmark", properties)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def main():
|
|
73
|
-
"""Runs the benchmarks and inserts the results."""
|
|
74
|
-
# Get the commit SHA and JSON directory from the command line arguments
|
|
75
|
-
parser = argparse.ArgumentParser(description="Run benchmarks and process results.")
|
|
76
|
-
parser.add_argument(
|
|
77
|
-
"--os", help="The OS type and version to insert into the database."
|
|
78
|
-
)
|
|
79
|
-
parser.add_argument(
|
|
80
|
-
"--python-version", help="The Python version to insert into the database."
|
|
81
|
-
)
|
|
82
|
-
parser.add_argument(
|
|
83
|
-
"--commit-sha", help="The commit SHA to insert into the database."
|
|
84
|
-
)
|
|
85
|
-
parser.add_argument(
|
|
86
|
-
"--benchmark-json",
|
|
87
|
-
help="The JSON file containing the benchmark results.",
|
|
88
|
-
)
|
|
89
|
-
parser.add_argument(
|
|
90
|
-
"--pr-title",
|
|
91
|
-
help="The PR title to insert into the database.",
|
|
92
|
-
)
|
|
93
|
-
parser.add_argument(
|
|
94
|
-
"--branch-name",
|
|
95
|
-
help="The current branch",
|
|
96
|
-
required=True,
|
|
97
|
-
)
|
|
98
|
-
parser.add_argument(
|
|
99
|
-
"--app-name",
|
|
100
|
-
help="The name of the app measured.",
|
|
101
|
-
required=True,
|
|
102
|
-
)
|
|
103
|
-
parser.add_argument(
|
|
104
|
-
"--pr-id",
|
|
105
|
-
help="ID of the PR.",
|
|
106
|
-
required=True,
|
|
107
|
-
)
|
|
108
|
-
args = parser.parse_args()
|
|
109
|
-
|
|
110
|
-
# Get the PR title from env or the args. For the PR merge or push event, there is no PR title, leaving it empty.
|
|
111
|
-
pr_title = args.pr_title or os.getenv("PR_TITLE", "")
|
|
112
|
-
|
|
113
|
-
cleaned_benchmark_results = extract_stats_from_json(args.benchmark_json)
|
|
114
|
-
# Insert the data into the database
|
|
115
|
-
insert_benchmarking_data(
|
|
116
|
-
os_type_version=args.os,
|
|
117
|
-
python_version=args.python_version,
|
|
118
|
-
performance_data=cleaned_benchmark_results,
|
|
119
|
-
commit_sha=args.commit_sha,
|
|
120
|
-
pr_title=pr_title,
|
|
121
|
-
branch_name=args.branch_name,
|
|
122
|
-
app_name=args.app_name,
|
|
123
|
-
pr_id=args.pr_id,
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if __name__ == "__main__":
|
|
128
|
-
main()
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"""Extracts the Lighthouse scores from the JSON files in the specified directory and inserts them into the database."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import json
|
|
6
|
-
import sys
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
|
|
9
|
-
from utils import send_data_to_posthog
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def insert_benchmarking_data(
|
|
13
|
-
lighthouse_data: dict,
|
|
14
|
-
commit_sha: str,
|
|
15
|
-
):
|
|
16
|
-
"""Insert the benchmarking data into the database.
|
|
17
|
-
|
|
18
|
-
Args:
|
|
19
|
-
lighthouse_data: The Lighthouse data to insert.
|
|
20
|
-
commit_sha: The commit SHA to insert.
|
|
21
|
-
"""
|
|
22
|
-
properties = {
|
|
23
|
-
"distinct_id": commit_sha,
|
|
24
|
-
"lighthouse_data": lighthouse_data,
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
# Send the data to PostHog
|
|
28
|
-
send_data_to_posthog("lighthouse_benchmark", properties)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def get_lighthouse_scores(directory_path: str | Path) -> dict:
|
|
32
|
-
"""Extracts the Lighthouse scores from the JSON files in the specified directory.
|
|
33
|
-
|
|
34
|
-
Args:
|
|
35
|
-
directory_path (str): The path to the directory containing the JSON files.
|
|
36
|
-
|
|
37
|
-
Returns:
|
|
38
|
-
dict: The Lighthouse scores.
|
|
39
|
-
"""
|
|
40
|
-
scores = {}
|
|
41
|
-
directory_path = Path(directory_path)
|
|
42
|
-
try:
|
|
43
|
-
for filename in directory_path.iterdir():
|
|
44
|
-
if filename.suffix == ".json" and filename.stem != "manifest":
|
|
45
|
-
data = json.loads(filename.read_text())
|
|
46
|
-
# Extract scores and add them to the dictionary with the filename as key
|
|
47
|
-
scores[data["finalUrl"].replace("http://localhost:3000/", "/")] = {
|
|
48
|
-
"performance_score": data["categories"]["performance"]["score"],
|
|
49
|
-
"accessibility_score": data["categories"]["accessibility"]["score"],
|
|
50
|
-
"best_practices_score": data["categories"]["best-practices"][
|
|
51
|
-
"score"
|
|
52
|
-
],
|
|
53
|
-
"seo_score": data["categories"]["seo"]["score"],
|
|
54
|
-
}
|
|
55
|
-
except Exception as e:
|
|
56
|
-
return {"error": e}
|
|
57
|
-
|
|
58
|
-
return scores
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def main():
|
|
62
|
-
"""Runs the benchmarks and inserts the results into the database."""
|
|
63
|
-
# Get the commit SHA and JSON directory from the command line arguments
|
|
64
|
-
commit_sha = sys.argv[1]
|
|
65
|
-
json_dir = sys.argv[2]
|
|
66
|
-
|
|
67
|
-
# Get the Lighthouse scores
|
|
68
|
-
lighthouse_scores = get_lighthouse_scores(json_dir)
|
|
69
|
-
|
|
70
|
-
# Insert the data into the database
|
|
71
|
-
insert_benchmarking_data(lighthouse_scores, commit_sha)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if __name__ == "__main__":
|
|
75
|
-
main()
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"""Checks the size of a specific directory and uploads result to Posthog."""
|
|
2
|
-
|
|
3
|
-
import argparse
|
|
4
|
-
import os
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
|
|
7
|
-
from utils import get_directory_size, get_python_version, send_data_to_posthog
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def get_package_size(venv_path: Path, os_name):
|
|
11
|
-
"""Get the size of a specified package.
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
venv_path: The path to the venv.
|
|
15
|
-
os_name: Name of os.
|
|
16
|
-
|
|
17
|
-
Returns:
|
|
18
|
-
The total size of the package in bytes.
|
|
19
|
-
|
|
20
|
-
Raises:
|
|
21
|
-
ValueError: when venv does not exist or python version is None.
|
|
22
|
-
"""
|
|
23
|
-
python_version = get_python_version(venv_path, os_name)
|
|
24
|
-
print("Python version:", python_version)
|
|
25
|
-
if python_version is None:
|
|
26
|
-
raise ValueError("Error: Failed to determine Python version.")
|
|
27
|
-
|
|
28
|
-
is_windows = "windows" in os_name
|
|
29
|
-
|
|
30
|
-
package_dir: Path = (
|
|
31
|
-
venv_path / "lib" / f"python{python_version}" / "site-packages"
|
|
32
|
-
if not is_windows
|
|
33
|
-
else venv_path / "Lib" / "site-packages"
|
|
34
|
-
)
|
|
35
|
-
if not package_dir.exists():
|
|
36
|
-
raise ValueError(
|
|
37
|
-
"Error: Virtual environment does not exist or is not activated."
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
total_size = get_directory_size(package_dir)
|
|
41
|
-
return total_size
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def insert_benchmarking_data(
|
|
45
|
-
os_type_version: str,
|
|
46
|
-
python_version: str,
|
|
47
|
-
commit_sha: str,
|
|
48
|
-
pr_title: str,
|
|
49
|
-
branch_name: str,
|
|
50
|
-
pr_id: str,
|
|
51
|
-
path: str,
|
|
52
|
-
):
|
|
53
|
-
"""Insert the benchmarking data into PostHog.
|
|
54
|
-
|
|
55
|
-
Args:
|
|
56
|
-
os_type_version: The OS type and version to insert.
|
|
57
|
-
python_version: The Python version to insert.
|
|
58
|
-
commit_sha: The commit SHA to insert.
|
|
59
|
-
pr_title: The PR title to insert.
|
|
60
|
-
branch_name: The name of the branch.
|
|
61
|
-
pr_id: The id of the PR.
|
|
62
|
-
path: The path to the dir or file to check size.
|
|
63
|
-
"""
|
|
64
|
-
if "./dist" in path:
|
|
65
|
-
size = get_directory_size(Path(path))
|
|
66
|
-
else:
|
|
67
|
-
size = get_package_size(Path(path), os_type_version)
|
|
68
|
-
|
|
69
|
-
# Prepare the event data
|
|
70
|
-
properties = {
|
|
71
|
-
"path": path,
|
|
72
|
-
"os": os_type_version,
|
|
73
|
-
"python_version": python_version,
|
|
74
|
-
"distinct_id": commit_sha,
|
|
75
|
-
"pr_title": pr_title,
|
|
76
|
-
"branch_name": branch_name,
|
|
77
|
-
"pr_id": pr_id,
|
|
78
|
-
"size_mb": round(
|
|
79
|
-
size / (1024 * 1024), 3
|
|
80
|
-
), # save size in MB and round to 3 places
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
send_data_to_posthog("package_size", properties)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
def main():
|
|
87
|
-
"""Runs the benchmarks and inserts the results."""
|
|
88
|
-
parser = argparse.ArgumentParser(description="Run benchmarks and process results.")
|
|
89
|
-
parser.add_argument(
|
|
90
|
-
"--os", help="The OS type and version to insert into the database."
|
|
91
|
-
)
|
|
92
|
-
parser.add_argument(
|
|
93
|
-
"--python-version", help="The Python version to insert into the database."
|
|
94
|
-
)
|
|
95
|
-
parser.add_argument(
|
|
96
|
-
"--commit-sha", help="The commit SHA to insert into the database."
|
|
97
|
-
)
|
|
98
|
-
parser.add_argument(
|
|
99
|
-
"--pr-title",
|
|
100
|
-
help="The PR title to insert into the database.",
|
|
101
|
-
)
|
|
102
|
-
parser.add_argument(
|
|
103
|
-
"--branch-name",
|
|
104
|
-
help="The current branch",
|
|
105
|
-
required=True,
|
|
106
|
-
)
|
|
107
|
-
parser.add_argument(
|
|
108
|
-
"--pr-id",
|
|
109
|
-
help="The pr id",
|
|
110
|
-
required=True,
|
|
111
|
-
)
|
|
112
|
-
parser.add_argument(
|
|
113
|
-
"--path",
|
|
114
|
-
help="The path to the vnenv.",
|
|
115
|
-
required=True,
|
|
116
|
-
)
|
|
117
|
-
args = parser.parse_args()
|
|
118
|
-
|
|
119
|
-
# Get the PR title from env or the args. For the PR merge or push event, there is no PR title, leaving it empty.
|
|
120
|
-
pr_title = args.pr_title or os.getenv("PR_TITLE", "")
|
|
121
|
-
|
|
122
|
-
# Insert the data into the database
|
|
123
|
-
insert_benchmarking_data(
|
|
124
|
-
os_type_version=args.os,
|
|
125
|
-
python_version=args.python_version,
|
|
126
|
-
commit_sha=args.commit_sha,
|
|
127
|
-
pr_title=pr_title,
|
|
128
|
-
branch_name=args.branch_name,
|
|
129
|
-
pr_id=args.pr_id,
|
|
130
|
-
path=args.path,
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if __name__ == "__main__":
|
|
135
|
-
main()
|
benchmarks/benchmark_web_size.py
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"""Checks the size of a specific directory and uploads result to Posthog."""
|
|
2
|
-
|
|
3
|
-
import argparse
|
|
4
|
-
import os
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
|
|
7
|
-
from utils import get_directory_size, send_data_to_posthog
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def insert_benchmarking_data(
|
|
11
|
-
os_type_version: str,
|
|
12
|
-
python_version: str,
|
|
13
|
-
app_name: str,
|
|
14
|
-
commit_sha: str,
|
|
15
|
-
pr_title: str,
|
|
16
|
-
branch_name: str,
|
|
17
|
-
pr_id: str,
|
|
18
|
-
path: str,
|
|
19
|
-
):
|
|
20
|
-
"""Insert the benchmarking data into PostHog.
|
|
21
|
-
|
|
22
|
-
Args:
|
|
23
|
-
app_name: The name of the app being measured.
|
|
24
|
-
os_type_version: The OS type and version to insert.
|
|
25
|
-
python_version: The Python version to insert.
|
|
26
|
-
commit_sha: The commit SHA to insert.
|
|
27
|
-
pr_title: The PR title to insert.
|
|
28
|
-
branch_name: The name of the branch.
|
|
29
|
-
pr_id: The id of the PR.
|
|
30
|
-
path: The path to the dir or file to check size.
|
|
31
|
-
"""
|
|
32
|
-
size = get_directory_size(Path(path))
|
|
33
|
-
|
|
34
|
-
# Prepare the event data
|
|
35
|
-
properties = {
|
|
36
|
-
"app_name": app_name,
|
|
37
|
-
"os": os_type_version,
|
|
38
|
-
"python_version": python_version,
|
|
39
|
-
"distinct_id": commit_sha,
|
|
40
|
-
"pr_title": pr_title,
|
|
41
|
-
"branch_name": branch_name,
|
|
42
|
-
"pr_id": pr_id,
|
|
43
|
-
"size_mb": round(
|
|
44
|
-
size / (1024 * 1024), 3
|
|
45
|
-
), # save size in MB and round to 3 places
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
send_data_to_posthog("web-size", properties)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def main():
|
|
52
|
-
"""Runs the benchmarks and inserts the results."""
|
|
53
|
-
parser = argparse.ArgumentParser(description="Run benchmarks and process results.")
|
|
54
|
-
parser.add_argument(
|
|
55
|
-
"--os", help="The OS type and version to insert into the database."
|
|
56
|
-
)
|
|
57
|
-
parser.add_argument(
|
|
58
|
-
"--python-version", help="The Python version to insert into the database."
|
|
59
|
-
)
|
|
60
|
-
parser.add_argument(
|
|
61
|
-
"--commit-sha", help="The commit SHA to insert into the database."
|
|
62
|
-
)
|
|
63
|
-
parser.add_argument(
|
|
64
|
-
"--pr-title",
|
|
65
|
-
help="The PR title to insert into the database.",
|
|
66
|
-
)
|
|
67
|
-
parser.add_argument(
|
|
68
|
-
"--branch-name",
|
|
69
|
-
help="The current branch",
|
|
70
|
-
required=True,
|
|
71
|
-
)
|
|
72
|
-
parser.add_argument(
|
|
73
|
-
"--app-name",
|
|
74
|
-
help="The name of the app measured.",
|
|
75
|
-
required=True,
|
|
76
|
-
)
|
|
77
|
-
parser.add_argument(
|
|
78
|
-
"--pr-id",
|
|
79
|
-
help="The pr id",
|
|
80
|
-
required=True,
|
|
81
|
-
)
|
|
82
|
-
parser.add_argument(
|
|
83
|
-
"--path",
|
|
84
|
-
help="The current path to app to check.",
|
|
85
|
-
required=True,
|
|
86
|
-
)
|
|
87
|
-
args = parser.parse_args()
|
|
88
|
-
|
|
89
|
-
# Get the PR title from env or the args. For the PR merge or push event, there is no PR title, leaving it empty.
|
|
90
|
-
pr_title = args.pr_title or os.getenv("PR_TITLE", "")
|
|
91
|
-
|
|
92
|
-
# Insert the data into the database
|
|
93
|
-
insert_benchmarking_data(
|
|
94
|
-
app_name=args.app_name,
|
|
95
|
-
os_type_version=args.os,
|
|
96
|
-
python_version=args.python_version,
|
|
97
|
-
commit_sha=args.commit_sha,
|
|
98
|
-
pr_title=pr_title,
|
|
99
|
-
branch_name=args.branch_name,
|
|
100
|
-
pr_id=args.pr_id,
|
|
101
|
-
path=args.path,
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if __name__ == "__main__":
|
|
106
|
-
main()
|
benchmarks/conftest.py
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"""Shared conftest for all benchmark tests."""
|
|
2
|
-
|
|
3
|
-
import pytest
|
|
4
|
-
|
|
5
|
-
from reflex.testing import AppHarness, AppHarnessProd
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
@pytest.fixture(
|
|
9
|
-
scope="session", params=[AppHarness, AppHarnessProd], ids=["dev", "prod"]
|
|
10
|
-
)
|
|
11
|
-
def app_harness_env(request):
|
|
12
|
-
"""Parametrize the AppHarness class to use for the test, either dev or prod.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
request: The pytest fixture request object.
|
|
16
|
-
|
|
17
|
-
Returns:
|
|
18
|
-
The AppHarness class to use for the test.
|
|
19
|
-
"""
|
|
20
|
-
return request.param
|
benchmarks/lighthouse.sh
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Change directory to the first argument passed to the script
|
|
4
|
-
project_dir=$1
|
|
5
|
-
shift
|
|
6
|
-
pushd "$project_dir" || exit 1
|
|
7
|
-
echo "Changed directory to $project_dir"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# So we get stdout / stderr from Python ASAP. Without this, delays can be very long (e.g. on Windows, Github Actions)
|
|
11
|
-
export PYTHONUNBUFFERED=1
|
|
12
|
-
|
|
13
|
-
env_mode=$1
|
|
14
|
-
shift
|
|
15
|
-
check_ports=${1:-3000 8000}
|
|
16
|
-
shift
|
|
17
|
-
|
|
18
|
-
# Start the server in the background
|
|
19
|
-
export TELEMETRY_ENABLED=false
|
|
20
|
-
reflex run --env "$env_mode" "$@" & pid=$!
|
|
21
|
-
|
|
22
|
-
# Within the context of this bash, $pid_in_bash is what we need to pass to "kill" on exit
|
|
23
|
-
# This is true on all platforms.
|
|
24
|
-
pid_in_bash=$pid
|
|
25
|
-
trap "kill -INT $pid_in_bash ||:" EXIT
|
|
26
|
-
|
|
27
|
-
echo "Started server with PID $pid"
|
|
28
|
-
|
|
29
|
-
# Assume we run from the root of the repo
|
|
30
|
-
popd
|
|
31
|
-
|
|
32
|
-
# In Windows, our Python script below needs to work with the WINPID
|
|
33
|
-
if [ -f /proc/$pid/winpid ]; then
|
|
34
|
-
pid=$(cat /proc/$pid/winpid)
|
|
35
|
-
echo "Windows detected, passing winpid $pid to port waiter"
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
python scripts/wait_for_listening_port.py $check_ports --timeout=600 --server-pid "$pid"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
# Check if something is running on port 3000
|
|
42
|
-
if curl --output /dev/null --silent --head --fail "http://localhost:3000"; then
|
|
43
|
-
echo "URL exists: http://localhost:3000"
|
|
44
|
-
else
|
|
45
|
-
echo "URL does not exist: https://localhost:3000"
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
mkdir -p ./tests/benchmarks/.lighthouseci
|
|
49
|
-
|
|
50
|
-
# Create a lighthouserc.js file
|
|
51
|
-
cat << EOF > lighthouserc.js
|
|
52
|
-
module.exports = {
|
|
53
|
-
ci: {
|
|
54
|
-
collect: {
|
|
55
|
-
isSinglePageApplication: true,
|
|
56
|
-
numberOfRuns: 1,
|
|
57
|
-
url: ['http://localhost:3000', "http://localhost:3000/docs/getting-started/introduction/", "http://localhost:3000/blog/2023-08-02-seed-annoucement/"]
|
|
58
|
-
},
|
|
59
|
-
upload: {
|
|
60
|
-
target: 'filesystem',
|
|
61
|
-
"outputDir": "./integration/benchmarks/.lighthouseci"
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
EOF
|
|
66
|
-
|
|
67
|
-
# Install and Run LHCI
|
|
68
|
-
npm install -g @lhci/cli
|
|
69
|
-
lhci autorun
|
|
70
|
-
|
|
71
|
-
# Check to see if the LHCI report is generated
|
|
72
|
-
if [ -d "./integration/benchmarks/.lighthouseci" ] && [ "$(ls -A ./integration/benchmarks/.lighthouseci)" ]; then
|
|
73
|
-
echo "LHCI report generated"
|
|
74
|
-
else
|
|
75
|
-
echo "LHCI report not generated"
|
|
76
|
-
exit 1 # Exits the script with a status of 1, which will cause the GitHub Action to stop
|
|
77
|
-
fi
|
benchmarks/utils.py
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"""Utility functions for the benchmarks."""
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
import subprocess
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
|
|
7
|
-
import httpx
|
|
8
|
-
from httpx import HTTPError
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def get_python_version(venv_path: Path, os_name):
|
|
12
|
-
"""Get the python version of python in a virtual env.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
venv_path: Path to virtual environment.
|
|
16
|
-
os_name: Name of os.
|
|
17
|
-
|
|
18
|
-
Returns:
|
|
19
|
-
The python version.
|
|
20
|
-
"""
|
|
21
|
-
python_executable = (
|
|
22
|
-
venv_path / "bin" / "python"
|
|
23
|
-
if "windows" not in os_name
|
|
24
|
-
else venv_path / "Scripts" / "python.exe"
|
|
25
|
-
)
|
|
26
|
-
try:
|
|
27
|
-
output = subprocess.check_output(
|
|
28
|
-
[str(python_executable), "--version"], stderr=subprocess.STDOUT
|
|
29
|
-
)
|
|
30
|
-
python_version = output.decode("utf-8").strip().split()[1]
|
|
31
|
-
return ".".join(python_version.split(".")[:-1])
|
|
32
|
-
except subprocess.CalledProcessError:
|
|
33
|
-
return None
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def get_directory_size(directory: Path):
|
|
37
|
-
"""Get the size of a directory in bytes.
|
|
38
|
-
|
|
39
|
-
Args:
|
|
40
|
-
directory: The directory to check.
|
|
41
|
-
|
|
42
|
-
Returns:
|
|
43
|
-
The size of the dir in bytes.
|
|
44
|
-
"""
|
|
45
|
-
total_size = 0
|
|
46
|
-
for dirpath, _, filenames in os.walk(directory):
|
|
47
|
-
for f in filenames:
|
|
48
|
-
fp = Path(dirpath) / f
|
|
49
|
-
total_size += fp.stat().st_size
|
|
50
|
-
return total_size
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def send_data_to_posthog(event, properties):
|
|
54
|
-
"""Send data to PostHog.
|
|
55
|
-
|
|
56
|
-
Args:
|
|
57
|
-
event: The event to send.
|
|
58
|
-
properties: The properties to send.
|
|
59
|
-
|
|
60
|
-
Raises:
|
|
61
|
-
HTTPError: When there is an error sending data to PostHog.
|
|
62
|
-
"""
|
|
63
|
-
event_data = {
|
|
64
|
-
"api_key": "phc_JoMo0fOyi0GQAooY3UyO9k0hebGkMyFJrrCw1Gt5SGb",
|
|
65
|
-
"event": event,
|
|
66
|
-
"properties": properties,
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
with httpx.Client() as client:
|
|
70
|
-
response = client.post("https://app.posthog.com/capture/", json=event_data)
|
|
71
|
-
if response.status_code != 200:
|
|
72
|
-
raise HTTPError(
|
|
73
|
-
f"Error sending data to PostHog: {response.status_code} - {response.text}"
|
|
74
|
-
)
|
|
File without changes
|