Refactor structure of tribler communities #6175
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains refactoring of tribler's communities structure.
An attempt has been made to bring the structure to the following:
The core idea is to make communities more unified (by bringing them to a uniform structure) and more autonomous (by combining implementation with its settings definition)
Implementation
For each Tribler community
settings
field has been added by inheriting them from:The settings set in
ipv8_module_catalog.py
for a normal Tribler's run:For tests it can be done by passing a settings object into community constructor:
Problems
I've encountered problems during refactoring the following entities:
TunnelCommunity
Tribler's
TunnelCommunity
highly intertwined with Ipv8'sTunnelCommunity
and looks like hi-level "hack" or "patch" (I guess this is the result of an epic Dispersy refactoring).Therefore it is hard to control and modify, for example, Community settings.
This PR leaves
TunnelSettings
as is, adding only the following logic inTriblerTunnelCommunityLauncher
:MetadataStore
MetadataStore
is a very special place in Tribler which is unlike anything else. It uses a special structure and special inner logic.This unit contains two communities, ORM bindings, and REST-API.
It contains also
RemoteQueryCommunity
which is the base class forPopularityCommunity
andGigaChannelCommunity
. These dependencies make it difficult to isolate atomic settings for each community.This PR leaves
MetadataStore
almost as-is, leaving refactoring to the author, except for:RemoteQueryCommunity
extracted fromMetadataStore
and placed tomodules
along with the rest communities.rqc_settings
field toRemoteQueryCommunity
class and all its successors.Launcher: