mirror of
https://git.deluge-torrent.org/deluge
synced 2025-04-20 11:35:49 +00:00
[Plugins] Fix relative imports to use dot notation
This commit is contained in:
parent
268c8d608c
commit
6e0e01225e
32 changed files with 74 additions and 58 deletions
|
@ -17,20 +17,20 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -20,11 +20,12 @@ import gtk.glade
|
|||
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from common import get_resource
|
||||
from deluge.plugins.pluginbase import GtkPluginBase
|
||||
from deluge.ui.client import client
|
||||
from deluge.ui.gtkui import dialogs
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
|
|
@ -14,9 +14,10 @@
|
|||
|
||||
import logging
|
||||
|
||||
from common import get_resource
|
||||
from deluge.plugins.pluginbase import WebPluginBase
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
|
|
@ -12,20 +12,20 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -22,13 +22,14 @@ from twisted.web import error
|
|||
|
||||
import deluge.component as component
|
||||
import deluge.configmanager
|
||||
from common import BadIP, IP
|
||||
from deluge.common import is_url
|
||||
from deluge.core.rpcserver import export
|
||||
from deluge.httpdownloader import download_file
|
||||
from deluge.plugins.pluginbase import CorePluginBase
|
||||
from detect import create_reader, detect_compression, detect_format, UnknownFormatError
|
||||
from readers import ReaderParseError
|
||||
|
||||
from .common import BadIP, IP
|
||||
from .detect import create_reader, detect_compression, detect_format, UnknownFormatError
|
||||
from .readers import ReaderParseError
|
||||
|
||||
# TODO: check return values for deferred callbacks
|
||||
# TODO: review class attributes for redundancy
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
# See LICENSE for more details.
|
||||
#
|
||||
|
||||
from decompressers import BZipped2, GZipped, Zipped
|
||||
from readers import EmuleReader, PeerGuardianReader, SafePeerReader
|
||||
from .decompressers import BZipped2, GZipped, Zipped
|
||||
from .readers import EmuleReader, PeerGuardianReader, SafePeerReader
|
||||
|
||||
COMPRESSION_TYPES = {
|
||||
"PK": "Zip",
|
||||
|
|
|
@ -13,12 +13,13 @@ from datetime import datetime
|
|||
import gtk
|
||||
import gtk.glade
|
||||
|
||||
import common
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from deluge.plugins.pluginbase import GtkPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from . import common
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
import logging
|
||||
import re
|
||||
|
||||
from common import BadIP, IP, raises_errors_as
|
||||
from .common import BadIP, IP, raises_errors_as
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -9,9 +9,10 @@
|
|||
|
||||
import logging
|
||||
|
||||
from common import get_resource
|
||||
from deluge.plugins.pluginbase import WebPluginBase
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
FORMAT_LIST = [
|
||||
|
|
|
@ -37,18 +37,18 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
|
@ -36,11 +36,12 @@
|
|||
|
||||
import logging
|
||||
|
||||
from common import get_resource
|
||||
from deluge import component
|
||||
from deluge.plugins.pluginbase import WebPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class WebUI(WebPluginBase):
|
||||
|
|
|
@ -16,20 +16,20 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -37,18 +37,18 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -348,4 +348,4 @@ class Core(CorePluginBase):
|
|||
return self.torrent_labels.get(torrent_id) or ""
|
||||
|
||||
if __name__ == "__main__":
|
||||
import test
|
||||
from . import test
|
||||
|
|
|
@ -42,9 +42,9 @@ from deluge.plugins.pluginbase import GtkPluginBase
|
|||
import gtk, gobject
|
||||
from deluge.ui.client import client
|
||||
|
||||
import sidebar_menu
|
||||
import label_config
|
||||
import submenu
|
||||
from . import sidebar_menu
|
||||
from . import label_config
|
||||
from . import submenu
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -41,18 +41,18 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -44,12 +44,13 @@ from email.utils import formatdate
|
|||
from twisted.internet import defer, threads
|
||||
|
||||
import deluge.configmanager
|
||||
from common import CustomNotifications
|
||||
from deluge import component
|
||||
from deluge.core.rpcserver import export
|
||||
from deluge.event import known_events
|
||||
from deluge.plugins.pluginbase import CorePluginBase
|
||||
|
||||
from .common import CustomNotifications
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_PREFS = {
|
||||
|
|
|
@ -47,10 +47,11 @@ from twisted.internet import defer
|
|||
import deluge.common
|
||||
import deluge.component as component
|
||||
import deluge.configmanager
|
||||
from common import CustomNotifications, get_resource
|
||||
from deluge.plugins.pluginbase import GtkPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import CustomNotifications, get_resource
|
||||
|
||||
# Relative imports
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
|
|
@ -39,11 +39,12 @@
|
|||
|
||||
import logging
|
||||
|
||||
from common import get_resource
|
||||
from deluge import component
|
||||
from deluge.plugins.pluginbase import WebPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class WebUI(WebPluginBase):
|
||||
|
|
|
@ -40,18 +40,18 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -42,10 +42,11 @@ import gtk
|
|||
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from common import get_resource
|
||||
from deluge.plugins.pluginbase import GtkPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
DAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
|
||||
|
|
|
@ -38,11 +38,12 @@
|
|||
|
||||
import logging
|
||||
|
||||
from common import get_resource
|
||||
from deluge import component
|
||||
from deluge.plugins.pluginbase import WebPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class WebUI(WebPluginBase):
|
||||
|
|
|
@ -40,18 +40,18 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -352,4 +352,4 @@ class Graph:
|
|||
self.ctx.set_dash(dash, offset)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import test
|
||||
from . import test
|
||||
|
|
|
@ -42,15 +42,15 @@ import gtk
|
|||
import gtk.glade
|
||||
from gtk.glade import XML
|
||||
|
||||
import common
|
||||
import deluge
|
||||
import graph
|
||||
from deluge import component
|
||||
from deluge.common import fspeed
|
||||
from deluge.plugins.pluginbase import GtkPluginBase
|
||||
from deluge.ui.client import client
|
||||
from deluge.ui.gtkui.torrentdetails import Tab
|
||||
|
||||
from . import common, graph
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_CONF = { 'version': 1,
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
from __future__ import print_function
|
||||
|
||||
import deluge
|
||||
import graph
|
||||
from deluge.ui.client import aclient, sclient
|
||||
|
||||
from . import graph
|
||||
|
||||
sclient.set_core_uri()
|
||||
|
||||
def test_sync():
|
||||
|
@ -16,7 +17,7 @@ def test_sync():
|
|||
upload = [66804, 66915, 66974, 67447, 67540, 67318, 67320, 67249, 66659, 66489, 67027, 66914, 66802, 67303, 67654, 67643, 67763, 67528, 67523, 67431, 67214, 66939, 67316, 67020, 66881, 67103, 67377, 67141, 67366, 67492, 67375, 67203, 67056, 67010, 67029, 66741, 66695, 66868, 66805, 66264, 66249, 66317, 66459, 66306, 66681, 66954, 66662, 66278, 65921, 65695, 65681, 65942, 66000, 66140, 66424, 66480, 66257, 66271, 66145, 65854, 65568, 65268, 65112, 65050, 65027, 64676, 64655, 64178, 64386, 63979, 63271, 62746, 62337, 62297, 62496, 62902, 63801, 64121, 62957, 62921, 63051, 62644, 63240, 64107, 63968, 63987, 63644, 63263, 63153, 62999, 62843, 62777, 63101, 63078, 63178, 63126, 63401, 62630, 62451, 62505, 62254, 61485, 61264, 60937, 60568, 61011, 61109, 60325, 60196, 59640, 59619, 59514, 60813, 60572, 61632, 61689, 63365, 64583, 66396, 67179, 68209, 68295, 67674, 67559, 67195, 66178, 65632, 66124, 66456, 66676, 67183, 67620, 66960, 66347, 65925, 65907, 65896, 66738, 66703, 67060, 67004, 67007, 66329, 65304, 52002, 38969, 25433, 12426, 0, 0]
|
||||
download = [42926, 43853, 43157, 45470, 44254, 46272, 45083, 47344, 46716, 51963, 50112, 52334, 55525, 57545, 53691, 51637, 49574, 49836, 48295, 49843, 52878, 56014, 56966, 56938, 60065, 60461, 56542, 59526, 58678, 54424, 51862, 55109, 52132, 53783, 51687, 56567, 52182, 50758, 46714, 50511, 48161, 50920, 48694, 50528, 55074, 55420, 55882, 59268, 59958, 57938, 57115, 51424, 51180, 53184, 52879, 51177, 54417, 51097, 47901, 49870, 55865, 61118, 61476, 63498, 58878, 49630, 45975, 45632, 45892, 44855, 49495, 48304, 45829, 42152, 39403, 37574, 32384, 34933, 34901, 33492, 31953, 36271, 33826, 34515, 36408, 41106, 43054, 44110, 40810, 41383, 37267, 35881, 38660, 37525, 34857, 36718, 36842, 34281, 39528, 41854, 42952, 40021, 41722, 41045, 42917, 39287, 38672, 32824, 28765, 22686, 18490, 15714, 15268, 14793, 15305, 16354, 16720, 17502, 17857, 16622, 18447, 19929, 31138, 36965, 36158, 32795, 30445, 21997, 18100, 22491, 27227, 29317, 32436, 35700, 39140, 36258, 33697, 24751, 20354, 8211, 3836, 1560, 834, 2034, 1744, 1637, 1637, 1637, 0, 0]
|
||||
|
||||
from graph import NetworkGraph
|
||||
from .graph import NetworkGraph
|
||||
n = NetworkGraph()
|
||||
n.savedUpSpeeds = upload
|
||||
n.savedDownSpeeds = download
|
||||
|
|
|
@ -39,11 +39,12 @@
|
|||
|
||||
import logging
|
||||
|
||||
from common import get_resource
|
||||
from deluge import component
|
||||
from deluge.plugins.pluginbase import WebPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class WebUI(WebPluginBase):
|
||||
|
|
|
@ -41,18 +41,18 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
class WebUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from webui import WebUI as _plugin_cls
|
||||
from .webui import WebUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(WebUIPlugin, self).__init__(plugin_name)
|
||||
|
|
|
@ -43,10 +43,11 @@ import gtk
|
|||
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from common import get_resource
|
||||
from deluge.plugins.pluginbase import GtkPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class GtkUI(GtkPluginBase):
|
||||
|
|
|
@ -39,11 +39,12 @@
|
|||
|
||||
import logging
|
||||
|
||||
from common import get_resource
|
||||
from deluge import component
|
||||
from deluge.plugins.pluginbase import WebPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class WebUI(WebPluginBase):
|
||||
|
|
|
@ -40,13 +40,13 @@ from deluge.plugins.init import PluginInitBase
|
|||
|
||||
class CorePlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from core import Core as _plugin_cls
|
||||
from .core import Core as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(CorePlugin, self).__init__(plugin_name)
|
||||
|
||||
class GtkUIPlugin(PluginInitBase):
|
||||
def __init__(self, plugin_name):
|
||||
from gtkui import GtkUI as _plugin_cls
|
||||
from .gtkui import GtkUI as _plugin_cls
|
||||
self._plugin_cls = _plugin_cls
|
||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
||||
|
||||
|
|
|
@ -43,10 +43,11 @@ import gtk.glade
|
|||
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from common import get_resource
|
||||
from deluge.plugins.pluginbase import GtkPluginBase
|
||||
from deluge.ui.client import client
|
||||
|
||||
from .common import get_resource
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class GtkUI(GtkPluginBase):
|
||||
|
|
Loading…
Add table
Reference in a new issue