We sometimes to need to call another method in asyncio context when we already are in this
context. With the `@aio` decorator which makes the method return a `Deferred`, it was
necessary to use a ping pong between `Deferred` and `Future`.
This patch adds a `aio_func` attribute which directly returns the wrapped asyncio method,
so it can now be awaited directly.
- Fix data types, and use quotes data type to avoid immediate evaluation on Python < 3.14
- Better error catching folling change in `get_infos` in `memory.disco`.
- Some code modernisation (async coroutine).
- Error raised by `disco_info` where not properly handler, resulting in an exception
instead of appropriate logging and return value.
- `async` coroutines, type hints
- the XEP-0115 implementation has been completed with validation, caps node handling in
disco requests, hash generation fixes, and real support for xml:lang.
- the `generate_hash` method has been moved from disco where it's not used anymore to
XEP-0115.
- Disco doesn't hash systematically, it nos use a per-jid cache for non XEP-0115
supporting client.
- code modernisation, with use of `get_plugin_data` for Client data in XEP-0115, type
hints, etc.
- More comments have been added to link algorithms steps to the relevant part in
specification.
Tx-XMPP 0.12 has beaking change in `discoFeature.identities` because it now supports
`xml:lang` attribute, so this update implies updating the code everywhere were this is
used.
- Implement `presence` access model for PEP nodes.
- Add PEP auto-subscription (`+notify` handling)
- New `get_pep_last_items` storage method to retrieve in a single query items to send to
auto-subscribers.
- Online resource tracking.
This completes the PEP support.
rel 476
A new `max_items` field has been added to `PubsubNode`. `0` means `max`. If any >0 value
is used, items will be automatically deleted by `cache_pubsub_items`. Items are currently
discarded (i.e. no notification is sent), this is the same behaviour as in legacy Libervia
Pubsub (formerly "SàT Pubsub").
rel 476
- Added `on_extended_disco()` handler.
- Added `with_parent=True` to all `get_pubsub_node()` calls to prevent lazy load errors in
access checks.
rel 476
Registered XEP-0499 handler in `profile_connecting()` and added it to
plugin dependencies.
Added `with_parent` and `with_link` parameters for eager loading of parent and linked_node
relationships.
Fixed CTE to include all children (not just base nodes) and use `selectinload` for parent
to avoid cartesian products.
rel 476
Add methods to handles the relationships which were already present in storage.
This plugins add methods to handle validation and rules from the specs.
`get_pubsub_node_children` helper method has been added to storage.
- update queries to handle correctly the `before=""` case and RSM order (older to newer)
while having correct order when `max_items` without RSM is used (then order it newer to
older).
- put RSM code path in a separated method for better readability.
- check values of `max_items` and `from_index` and raise exception is they are not
positive
- when using `before` or `after`, check that the item ID used as reference exists, and
raise an exception otherwise.
- updated docstring to reflect the new behaviour.
- update pubsub cache use of `get_items` with RSM, to adapt to new behaviour.
rel 476
New `jid`, `secret` and `autoconnect` field are used for component settings. When used,
backend will automatically create the profile and set its relevant parameters, or check
that existing profile is in sync (and update it if necessary).
This make component installation easier to Libervia, as it is not
necessary anymore to use the CLI frontend to install a component.
rel 476
This is a huge configuration refactoring.
The configuration system now uses Pydantic settings, with better validation, better
support for environment variables and other goodies.
The main config files now use TOML instead of INI, this allow for better handling of
complex types, notably dict.
Plugins, components and frontends can declare their config settings in a class which will
be imported dynamically.
- Arguments are now grouped in a new `PageData` NamedTuple, making it simpler to use, and
easier to extend.
- Page index is automatically calculated, and can be checked in callback to know which
page to show.
- Form send by calling entity is automatically parsed, using original form to instantiate
the right field types.
- A new `DataForm.get_field` method use Generic type as second argument to retrieve the
right field when getting a `submit` form.
- Updated all classes registering Ad-Hoc commands to use the new system and simplify the
code.
ORM was used, resulting in deserialisation/reserialisation of value checked for race
condition during update. In addition to the overhead, this could lead to modification even
if the value didn't change (e.g., because of JSON key order changed).
The raw value is not used to check if the row has not change between `select` and
`update`, making the method more robust.
- `parent_node` and `linked_node` can now be specified in `set_pubsub_node`.
- `get_pubsub_nodes` has been rewritten to recursively traverse a tree and retrieve nodes
matching criteria and their linking nodes/children/items.
rel 463
Add columns to handle `access_model` and `publish_model` and a table for `affiliations`.
With those new data, components handling pubsub can now manage permissions correctly.
rel 462
There are 2 concurrent models, this one is an historical legacy. The type to use the one
from `libervia.backend.models.core`, and it will progressively be used everywhere and
fully based on Pydantic.
- Lower priority is used for triggers so other plugins can add headers before the XML is
generated.
- Added `headers` to `MessageDataExtra` type.
rel 456
`get_handler` can now return several handlers, which is notably useful for component with
several included services.
Various improvements such move to `async` method, docstring/type hints update, and slight
improvment of SatXMPPComponent.
rel 453
- Former bookmarks implementation is now labeled as "legacy".
- XEP-0402 is now used for bookmarks when relevant namespaces are found, and it fallbacks
to legacy XEP-0048/XEP-0049 bookmarks otherwise.
- CLI legacy bookmark commands have been moved to `bookmarks legacy`
- CLI bookmarks commands now use the new XEP-0402 (with fallback to legacy one
automatically used if necessary).