Commit graph

25 commits

Author SHA1 Message Date
J. Nick Koston
d04e2d56da
Add support for JSON fragments () 2024-01-07 17:36:31 -10:00
Dave T
99a76ef4e6
Fix most sphinx documentation warnings () 2023-10-02 09:01:41 +02:00
Ville Skyttä
6399d74c15
Remove unnnecessary pylint configs from core () 2023-08-22 23:12:12 +02:00
J. Nick Koston
094f2cbad7
Fix saving subclassed datetime objects in storage () 2023-07-31 18:49:02 +02:00
J. Nick Koston
5feceee588
Improve performance when serializing small bits of JSON ()
* Improve performance when serializing small bits of JSON

Making json_bytes a partial reduced the run time to
build the small JSON messages by ~18.75%

We serialize a lot of small messages over the websocket

* typing
2023-05-27 19:53:52 -04:00
J. Nick Koston
99265a983a
Speed up reconnects by caching state serialize () 2023-05-16 02:33:12 -05:00
J. Nick Koston
0223058d25
Reduce overhead to save json data to postgresql ()
* Reduce overhead to strip nulls from json

* Reduce overhead to strip nulls from json

* small cleanup
2023-02-24 21:37:36 -05:00
epenet
ba23816a0c
Inverse json import logic ()
* Fix helpers and util

* Adjust components

* Move back errors

* Add report

* mypy

* mypy

* Assert deprecation messages

* Move test_json_loads_object

* Adjust tests

* Fix rebase

* Adjust pylint plugin

* Fix plugin

* Adjust references

* Adjust backup tests
2023-02-16 11:37:57 +01:00
epenet
a202588fd2
Add return type to json_loads ()
* Add JSON type definitions

* Sample use

* Keep mutable for a follo-up PR (avoid dead code)

* Use list/dict

* Remove JsonObjectType

* Remove reference to Union

* Cleanup

* Improve rest

* Rename json_dict => json_data

* Add docstring

* Add type hint to json_loads

* Add cast

* Move type alias to json helpers

* Cleanup

* Create and use json_loads_object

* Make error more explicit and add tests

* Use JsonObjectType in conversation

* Remove quotes
2023-02-07 17:21:55 +01:00
Erik Montnemery
fea30c1ce9
Terminate strings at NUL when recording states and events () 2023-01-26 11:11:03 +01:00
J. Nick Koston
e2fe1a1c5d
Allow tuple subclasses to be json serialized () 2022-06-29 19:14:56 -05:00
J. Nick Koston
2225d0e899
Enable serialization of float subclasses with orjson () 2022-06-28 17:07:40 +02:00
J. Nick Koston
edb386c736
Switch frontend to use json helper () 2022-06-23 20:19:13 +02:00
J. Nick Koston
164eba7e5d
Switch loader to use json helper () 2022-06-22 21:57:38 -05:00
J. Nick Koston
ab30d38469
Switch rest to use the json helper () 2022-06-22 20:12:48 -05:00
J. Nick Koston
8b067e83f7
Initial orjson support take 3 ()
* Initial orjson support take 2

Still need to work out problem building wheels

--

Redux of  /  Now possible since the following is solved:
 (comment)

This implements orjson where we use our default encoder.  This does not implement orjson where `ExtendedJSONEncoder` is used as these areas tend to be called far less frequently.  If its desired, this could be done in a followup, but it seemed like a case of diminishing returns (except maybe for large diagnostics files, or traces, but those are not expected to be downloaded frequently).

Areas where this makes a perceptible difference:
- Anything that subscribes to entities (Initial subscribe_entities payload)
- Initial download of registries on first connection / restore
- History queries
- Saving states to the database
- Large logbook queries
- Anything that subscribes to events (appdaemon)

Cavets:
orjson supports serializing dataclasses natively (and much faster) which
eliminates the need to implement `as_dict` in many places
when the data is already in a dataclass. This works
well as long as all the data in the dataclass can also
be serialized. I audited all places where we have an `as_dict`
for a dataclass and found only backups needs to be adjusted (support for `Path` needed to be added for backups).  I was a little bit worried about `SensorExtraStoredData` with `Decimal` but it all seems to work out from since it converts it before it gets to the json encoding cc @dgomes

If it turns out to be a problem we can disable this
with option |= [orjson.OPT_PASSTHROUGH_DATACLASS](https://github.com/ijl/orjson#opt_passthrough_dataclass) and it
will fallback to `as_dict`

Its quite impressive for history queries
<img width="1271" alt="Screen_Shot_2022-05-30_at_23_46_30" src="https://user-images.githubusercontent.com/663432/171145699-661ad9db-d91d-4b2d-9c1a-9d7866c03a73.png">

* use for views as well

* handle UnicodeEncodeError

* tweak

* DRY

* DRY

* not needed

* fix tests

* Update tests/components/http/test_view.py

* Update tests/components/http/test_view.py

* black

* templates
2022-06-22 21:59:51 +02:00
J. Nick Koston
c365454afb
Revert "Initial orjson support ()" ()
This was causing the wheels to fail to build. We need
to workout why when we don't have release pressure

This reverts commit d9d22a9556.
2022-05-31 13:51:55 -07:00
J. Nick Koston
d9d22a9556
Initial orjson support () 2022-05-31 12:18:11 -07:00
Erik Montnemery
abb84d9756
Serialize dates and times to isoformat () 2021-10-27 10:51:38 -07:00
Jason
7cc857a298
Add custom JSONEncoder for subscribe_trigger WS endpoint () 2021-04-09 20:47:10 -07:00
Philip Allgaier
dde6305549
Cleanup unused loggers (components N-Z + tests) () 2020-10-16 21:24:08 -05:00
Ville Skyttä
1bf2c4d976
Upgrade pylint to 2.6.0 () 2020-08-29 07:59:24 +02:00
Paulus Schoutsen
4de97abc3a Black 2019-07-31 12:25:30 -07:00
Ville Skyttä
ee696643cd Isort preparations ()
* Don't treat typing as an "in-between" module for import order

That was a < 3.5 era thing.

* Tighten scope of some pylint unused-import disables

To avoid isort moving a top level one around, undesirably broadening its
scope.
2018-09-11 11:21:48 +02:00
Paulus Schoutsen
7bb5344942
Remove homeassistant.remote ()
* Remove homeassistant.remote

* Use direct import for API

* Fix docstring
2018-08-21 15:49:58 +02:00