[setuptools packaging] access modules via imports (#1969)
This commit is contained in:
parent
6d8f55cf75
commit
f6e3a74567
23 changed files with 96 additions and 80 deletions
|
@ -25,7 +25,8 @@ class ChartCollector(object):
|
||||||
|
|
||||||
def getCollectors(self):
|
def getCollectors(self):
|
||||||
collectors = {}
|
collectors = {}
|
||||||
file_server = sys.modules["main"].file_server
|
import main
|
||||||
|
file_server = main.file_server
|
||||||
sites = file_server.sites
|
sites = file_server.sites
|
||||||
if not sites:
|
if not sites:
|
||||||
return collectors
|
return collectors
|
||||||
|
@ -100,7 +101,8 @@ class ChartCollector(object):
|
||||||
return site_collectors
|
return site_collectors
|
||||||
|
|
||||||
def getUniquePeers(self):
|
def getUniquePeers(self):
|
||||||
sites = sys.modules["main"].file_server.sites
|
import main
|
||||||
|
sites = main.file_server.sites
|
||||||
return set(itertools.chain.from_iterable(
|
return set(itertools.chain.from_iterable(
|
||||||
[site.peers.keys() for site in sites.values()]
|
[site.peers.keys() for site in sites.values()]
|
||||||
))
|
))
|
||||||
|
@ -168,7 +170,8 @@ class ChartCollector(object):
|
||||||
def collector(self):
|
def collector(self):
|
||||||
collectors = self.getCollectors()
|
collectors = self.getCollectors()
|
||||||
site_collectors = self.getSiteCollectors()
|
site_collectors = self.getSiteCollectors()
|
||||||
sites = sys.modules["main"].file_server.sites
|
import main
|
||||||
|
sites = main.file_server.sites
|
||||||
i = 0
|
i = 0
|
||||||
while 1:
|
while 1:
|
||||||
self.collectGlobal(collectors, self.last_values)
|
self.collectGlobal(collectors, self.last_values)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from Config import config
|
from Config import config
|
||||||
from Db import Db
|
from Db.Db import Db
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import time
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from Plugin import PluginManager
|
from Plugin import PluginManager
|
||||||
from Db import DbQuery
|
from Db.DbQuery import DbQuery
|
||||||
from Debug import Debug
|
from Debug import Debug
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ from Plugin import PluginManager
|
||||||
from Config import config
|
from Config import config
|
||||||
from util import helper
|
from util import helper
|
||||||
from Debug import Debug
|
from Debug import Debug
|
||||||
|
from Db import Db
|
||||||
|
|
||||||
|
|
||||||
@PluginManager.registerTo("UiRequest")
|
@PluginManager.registerTo("UiRequest")
|
||||||
|
@ -40,8 +41,8 @@ class UiRequestPlugin(object):
|
||||||
import gc
|
import gc
|
||||||
import sys
|
import sys
|
||||||
from Ui import UiRequest
|
from Ui import UiRequest
|
||||||
from Db import Db
|
|
||||||
from Crypt import CryptConnection
|
from Crypt import CryptConnection
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
hpy = None
|
hpy = None
|
||||||
|
@ -58,7 +59,6 @@ class UiRequestPlugin(object):
|
||||||
return
|
return
|
||||||
|
|
||||||
s = time.time()
|
s = time.time()
|
||||||
main = sys.modules["main"]
|
|
||||||
|
|
||||||
# Style
|
# Style
|
||||||
yield """
|
yield """
|
||||||
|
@ -142,7 +142,8 @@ class UiRequestPlugin(object):
|
||||||
# Trackers
|
# Trackers
|
||||||
yield "<br><br><b>Trackers:</b><br>"
|
yield "<br><br><b>Trackers:</b><br>"
|
||||||
yield "<table class='trackers'><tr> <th>address</th> <th>request</th> <th>successive errors</th> <th>last_request</th></tr>"
|
yield "<table class='trackers'><tr> <th>address</th> <th>request</th> <th>successive errors</th> <th>last_request</th></tr>"
|
||||||
for tracker_address, tracker_stat in sorted(sys.modules["Site.SiteAnnouncer"].global_stats.items()):
|
from Site import SiteAnnouncer # importing at the top of the file breaks plugins
|
||||||
|
for tracker_address, tracker_stat in sorted(SiteAnnouncer.global_stats.items()):
|
||||||
yield self.formatTableRow([
|
yield self.formatTableRow([
|
||||||
("%s", tracker_address),
|
("%s", tracker_address),
|
||||||
("%s", tracker_stat["num_request"]),
|
("%s", tracker_stat["num_request"]),
|
||||||
|
@ -173,7 +174,7 @@ class UiRequestPlugin(object):
|
||||||
|
|
||||||
# Db
|
# Db
|
||||||
yield "<br><br><b>Db</b>:<br>"
|
yield "<br><br><b>Db</b>:<br>"
|
||||||
for db in sys.modules["Db.Db"].opened_dbs:
|
for db in Db.opened_dbs:
|
||||||
tables = [row["name"] for row in db.execute("SELECT name FROM sqlite_master WHERE type = 'table'").fetchall()]
|
tables = [row["name"] for row in db.execute("SELECT name FROM sqlite_master WHERE type = 'table'").fetchall()]
|
||||||
table_rows = {}
|
table_rows = {}
|
||||||
for table in tables:
|
for table in tables:
|
||||||
|
@ -341,7 +342,7 @@ class UiRequestPlugin(object):
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
yield " - %.1fkb: %s<br>" % (self.getObjSize(obj, hpy), html.escape(repr(obj)))
|
yield " - %.1fkb: %s<br>" % (self.getObjSize(obj, hpy), html.escape(repr(obj)))
|
||||||
|
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
objs = [obj for obj in gc.get_objects() if isinstance(obj, Site)]
|
objs = [obj for obj in gc.get_objects() if isinstance(obj, Site)]
|
||||||
yield "<br>Sites (%s):<br>" % len(objs)
|
yield "<br>Sites (%s):<br>" % len(objs)
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
|
@ -636,7 +637,6 @@ class UiRequestPlugin(object):
|
||||||
assert data == data_unpacked, "%s != %s" % (data_unpacked, data)
|
assert data == data_unpacked, "%s != %s" % (data_unpacked, data)
|
||||||
|
|
||||||
# Db
|
# Db
|
||||||
from Db import Db
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
yield "<br>Db: (version: %s, API: %s)<br>" % (sqlite3.sqlite_version, sqlite3.version)
|
yield "<br>Db: (version: %s, API: %s)<br>" % (sqlite3.sqlite_version, sqlite3.version)
|
||||||
|
|
||||||
|
@ -668,12 +668,12 @@ class UiRequestPlugin(object):
|
||||||
|
|
||||||
with benchmark("Open x 10", 0.13):
|
with benchmark("Open x 10", 0.13):
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
db = Db(schema, "%s/benchmark.db" % config.data_dir)
|
db = Db.Db(schema, "%s/benchmark.db" % config.data_dir)
|
||||||
db.checkTables()
|
db.checkTables()
|
||||||
db.close()
|
db.close()
|
||||||
yield "."
|
yield "."
|
||||||
|
|
||||||
db = Db(schema, "%s/benchmark.db" % config.data_dir)
|
db = Db.Db(schema, "%s/benchmark.db" % config.data_dir)
|
||||||
db.checkTables()
|
db.checkTables()
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,9 @@ class ActionsPlugin(object):
|
||||||
global notificationicon, winfolders
|
global notificationicon, winfolders
|
||||||
from .lib import notificationicon, winfolders
|
from .lib import notificationicon, winfolders
|
||||||
import gevent.threadpool
|
import gevent.threadpool
|
||||||
|
import main
|
||||||
|
|
||||||
self.main = sys.modules["main"]
|
self.main = main
|
||||||
|
|
||||||
fs_encoding = sys.getfilesystemencoding()
|
fs_encoding = sys.getfilesystemencoding()
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import json
|
||||||
from Config import config
|
from Config import config
|
||||||
from Plugin import PluginManager
|
from Plugin import PluginManager
|
||||||
from Crypt import CryptBitcoin
|
from Crypt import CryptBitcoin
|
||||||
|
from User import UserManager
|
||||||
from . import UserPlugin
|
from . import UserPlugin
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -16,7 +17,7 @@ except Exception as err:
|
||||||
@PluginManager.registerTo("UiRequest")
|
@PluginManager.registerTo("UiRequest")
|
||||||
class UiRequestPlugin(object):
|
class UiRequestPlugin(object):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.user_manager = sys.modules["User.UserManager"].user_manager
|
self.user_manager = UserManager.user_manager
|
||||||
super(UiRequestPlugin, self).__init__(*args, **kwargs)
|
super(UiRequestPlugin, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
# Create new user and inject user welcome message if necessary
|
# Create new user and inject user welcome message if necessary
|
||||||
|
@ -135,7 +136,7 @@ class UiWebsocketPlugin(object):
|
||||||
script += "$('#button_notification').on('click', function() { zeroframe.cmd(\"userLoginForm\", []); });"
|
script += "$('#button_notification').on('click', function() { zeroframe.cmd(\"userLoginForm\", []); });"
|
||||||
self.cmd("injectScript", script)
|
self.cmd("injectScript", script)
|
||||||
# Delete from user_manager
|
# Delete from user_manager
|
||||||
user_manager = sys.modules["User.UserManager"].user_manager
|
user_manager = UserManager.user_manager
|
||||||
if self.user.master_address in user_manager.users:
|
if self.user.master_address in user_manager.users:
|
||||||
if not config.multiuser_local:
|
if not config.multiuser_local:
|
||||||
del user_manager.users[self.user.master_address]
|
del user_manager.users[self.user.master_address]
|
||||||
|
@ -149,7 +150,7 @@ class UiWebsocketPlugin(object):
|
||||||
|
|
||||||
# Login form submit
|
# Login form submit
|
||||||
def responseUserLogin(self, master_seed):
|
def responseUserLogin(self, master_seed):
|
||||||
user_manager = sys.modules["User.UserManager"].user_manager
|
user_manager = UserManager.user_manager
|
||||||
user = user_manager.get(CryptBitcoin.privatekeyToAddress(master_seed))
|
user = user_manager.get(CryptBitcoin.privatekeyToAddress(master_seed))
|
||||||
if not user:
|
if not user:
|
||||||
user = user_manager.create(master_seed=master_seed)
|
user = user_manager.create(master_seed=master_seed)
|
||||||
|
|
|
@ -501,6 +501,7 @@ class Config(object):
|
||||||
|
|
||||||
def getServerInfo(self):
|
def getServerInfo(self):
|
||||||
from Plugin import PluginManager
|
from Plugin import PluginManager
|
||||||
|
import main
|
||||||
|
|
||||||
info = {
|
info = {
|
||||||
"platform": sys.platform,
|
"platform": sys.platform,
|
||||||
|
@ -520,9 +521,9 @@ class Config(object):
|
||||||
}
|
}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
info["ip_external"] = sys.modules["main"].file_server.port_opened
|
info["ip_external"] = main.file_server.port_opened
|
||||||
info["tor_enabled"] = sys.modules["main"].file_server.tor_manager.enabled
|
info["tor_enabled"] = main.file_server.tor_manager.enabled
|
||||||
info["tor_status"] = sys.modules["main"].file_server.tor_manager.status
|
info["tor_status"] = main.file_server.tor_manager.status
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from Db import Db
|
from Db.Db import Db
|
||||||
from Config import config
|
from Config import config
|
||||||
from Plugin import PluginManager
|
from Plugin import PluginManager
|
||||||
from Debug import Debug
|
from Debug import Debug
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
from .Db import Db
|
|
||||||
from .DbQuery import DbQuery
|
|
||||||
from .DbCursor import DbCursor
|
|
|
@ -13,12 +13,13 @@ last_error = None
|
||||||
|
|
||||||
def shutdown(reason="Unknown"):
|
def shutdown(reason="Unknown"):
|
||||||
logging.info("Shutting down (reason: %s)..." % reason)
|
logging.info("Shutting down (reason: %s)..." % reason)
|
||||||
if "file_server" in dir(sys.modules["main"]) and sys.modules["main"].file_server.running:
|
import main
|
||||||
|
if "file_server" in dir(main) and main.file_server.running:
|
||||||
try:
|
try:
|
||||||
if "file_server" in dir(sys.modules["main"]):
|
if "file_server" in dir(main):
|
||||||
gevent.spawn(sys.modules["main"].file_server.stop)
|
gevent.spawn(main.file_server.stop)
|
||||||
if "ui_server" in dir(sys.modules["main"]):
|
if "ui_server" in dir(main):
|
||||||
gevent.spawn(sys.modules["main"].ui_server.stop)
|
gevent.spawn(main.ui_server.stop)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print("Proper shutdown error: %s" % err)
|
print("Proper shutdown error: %s" % err)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
|
@ -91,7 +91,8 @@ class Peer(object):
|
||||||
elif self.site:
|
elif self.site:
|
||||||
connection_server = self.site.connection_server
|
connection_server = self.site.connection_server
|
||||||
else:
|
else:
|
||||||
connection_server = sys.modules["main"].file_server
|
import main
|
||||||
|
connection_server = main.file_server
|
||||||
self.connection = connection_server.getConnection(self.ip, self.port, site=self.site, is_tracker_connection=self.is_tracker_connection)
|
self.connection = connection_server.getConnection(self.ip, self.port, site=self.site, is_tracker_connection=self.is_tracker_connection)
|
||||||
self.reputation += 1
|
self.reputation += 1
|
||||||
self.connection.sites += 1
|
self.connection.sites += 1
|
||||||
|
|
|
@ -55,14 +55,15 @@ class Site(object):
|
||||||
self.storage = SiteStorage(self, allow_create=allow_create) # Save and load site files
|
self.storage = SiteStorage(self, allow_create=allow_create) # Save and load site files
|
||||||
self.content_manager = ContentManager(self)
|
self.content_manager = ContentManager(self)
|
||||||
self.content_manager.loadContents() # Load content.json files
|
self.content_manager.loadContents() # Load content.json files
|
||||||
if "main" in sys.modules and "file_server" in dir(sys.modules["main"]): # Use global file server by default if possible
|
if "main" in sys.modules: # import main has side-effects, breaks tests
|
||||||
self.connection_server = sys.modules["main"].file_server
|
import main
|
||||||
else:
|
if "file_server" in dir(main): # Use global file server by default if possible
|
||||||
if "main" in sys.modules:
|
self.connection_server = main.file_server
|
||||||
sys.modules["main"].file_server = FileServer()
|
|
||||||
self.connection_server = sys.modules["main"].file_server
|
|
||||||
else:
|
else:
|
||||||
self.connection_server = FileServer()
|
main.file_server = FileServer()
|
||||||
|
self.connection_server = main.file_server
|
||||||
|
else:
|
||||||
|
self.connection_server = FileServer()
|
||||||
|
|
||||||
self.announcer = SiteAnnouncer(self) # Announce and get peer list from other nodes
|
self.announcer = SiteAnnouncer(self) # Announce and get peer list from other nodes
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ import gevent.event
|
||||||
|
|
||||||
import util
|
import util
|
||||||
from util import SafeRe
|
from util import SafeRe
|
||||||
from Db import Db
|
from Db.Db import Db
|
||||||
from Debug import Debug
|
from Debug import Debug
|
||||||
from Config import config
|
from Config import config
|
||||||
from util import helper
|
from util import helper
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
from .Site import Site
|
|
||||||
from .SiteStorage import SiteStorage
|
|
||||||
from .SiteAnnouncer import SiteAnnouncer
|
|
|
@ -1,6 +1,6 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from Db import DbQuery
|
from Db.DbQuery import DbQuery
|
||||||
|
|
||||||
|
|
||||||
class TestDbQuery:
|
class TestDbQuery:
|
||||||
|
|
|
@ -8,7 +8,7 @@ from Connection import ConnectionServer
|
||||||
from Config import config
|
from Config import config
|
||||||
from File import FileRequest
|
from File import FileRequest
|
||||||
from File import FileServer
|
from File import FileServer
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from . import Spy
|
from . import Spy
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ config.trackers = []
|
||||||
config.data_dir = TEST_DATA_PATH # Use test data for unittests
|
config.data_dir = TEST_DATA_PATH # Use test data for unittests
|
||||||
config.initLogging()
|
config.initLogging()
|
||||||
|
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
from User import UserManager
|
from User import UserManager
|
||||||
from File import FileServer
|
from File import FileServer
|
||||||
|
@ -104,7 +104,7 @@ from Db import Db
|
||||||
|
|
||||||
|
|
||||||
def cleanup():
|
def cleanup():
|
||||||
sys.modules["Db.Db"].dbCloseAll()
|
Db.dbCloseAll()
|
||||||
for dir_path in [config.data_dir, config.data_dir + "-temp"]:
|
for dir_path in [config.data_dir, config.data_dir + "-temp"]:
|
||||||
for file_name in os.listdir(dir_path):
|
for file_name in os.listdir(dir_path):
|
||||||
ext = file_name.rsplit(".", 1)[-1]
|
ext = file_name.rsplit(".", 1)[-1]
|
||||||
|
@ -388,7 +388,7 @@ def db(request):
|
||||||
|
|
||||||
if os.path.isfile(db_path):
|
if os.path.isfile(db_path):
|
||||||
os.unlink(db_path)
|
os.unlink(db_path)
|
||||||
db = Db(schema, db_path)
|
db = Db.Db(schema, db_path)
|
||||||
db.checkTables()
|
db.checkTables()
|
||||||
|
|
||||||
def stop():
|
def stop():
|
||||||
|
|
|
@ -82,8 +82,10 @@ class TorManager(object):
|
||||||
|
|
||||||
def setStatus(self, status):
|
def setStatus(self, status):
|
||||||
self.status = status
|
self.status = status
|
||||||
if "ui_server" in dir(sys.modules.get("main", {})):
|
if "main" in sys.modules: # import main has side-effects, breaks tests
|
||||||
sys.modules["main"].ui_server.updateWebsocket()
|
import main
|
||||||
|
if "ui_server" in dir(main):
|
||||||
|
main.ui_server.updateWebsocket()
|
||||||
|
|
||||||
def startTor(self):
|
def startTor(self):
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
|
|
|
@ -745,8 +745,8 @@ class UiRequest(object):
|
||||||
# Debug last error
|
# Debug last error
|
||||||
def actionDebug(self):
|
def actionDebug(self):
|
||||||
# Raise last error from DebugHook
|
# Raise last error from DebugHook
|
||||||
import sys
|
import main
|
||||||
last_error = sys.modules["main"].DebugHook.last_error
|
last_error = main.DebugHook.last_error
|
||||||
if last_error:
|
if last_error:
|
||||||
raise last_error[0](last_error[1]).with_traceback(last_error[2])
|
raise last_error[0](last_error[1]).with_traceback(last_error[2])
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -34,16 +34,16 @@ class UiWSGIHandler(WSGIHandler):
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logging.error("UiWSGIHandler websocket error: %s" % Debug.formatException(err))
|
logging.error("UiWSGIHandler websocket error: %s" % Debug.formatException(err))
|
||||||
if config.debug: # Allow websocket errors to appear on /Debug
|
if config.debug: # Allow websocket errors to appear on /Debug
|
||||||
import sys
|
import main
|
||||||
sys.modules["main"].DebugHook.handleError()
|
main.DebugHook.handleError()
|
||||||
else: # Standard HTTP request
|
else: # Standard HTTP request
|
||||||
try:
|
try:
|
||||||
super(UiWSGIHandler, self).run_application()
|
super(UiWSGIHandler, self).run_application()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logging.error("UiWSGIHandler error: %s" % Debug.formatException(err))
|
logging.error("UiWSGIHandler error: %s" % Debug.formatException(err))
|
||||||
if config.debug: # Allow websocket errors to appear on /Debug
|
if config.debug: # Allow websocket errors to appear on /Debug
|
||||||
import sys
|
import main
|
||||||
sys.modules["main"].DebugHook.handleError()
|
main.DebugHook.handleError()
|
||||||
|
|
||||||
def handle(self):
|
def handle(self):
|
||||||
# Save socket to be able to close them properly on exit
|
# Save socket to be able to close them properly on exit
|
||||||
|
@ -160,7 +160,8 @@ class UiServer:
|
||||||
self.server.serve_forever()
|
self.server.serve_forever()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
self.log.error("Web interface bind error, must be running already, exiting.... %s" % err)
|
self.log.error("Web interface bind error, must be running already, exiting.... %s" % err)
|
||||||
sys.modules["main"].file_server.stop()
|
import main
|
||||||
|
main.file_server.stop()
|
||||||
self.log.debug("Stopped.")
|
self.log.debug("Stopped.")
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
|
|
@ -50,7 +50,8 @@ class UiWebsocket(object):
|
||||||
if self.site.address == config.homepage and not self.site.page_requested:
|
if self.site.address == config.homepage and not self.site.page_requested:
|
||||||
# Add open fileserver port message or closed port error to homepage at first request after start
|
# Add open fileserver port message or closed port error to homepage at first request after start
|
||||||
self.site.page_requested = True # Dont add connection notification anymore
|
self.site.page_requested = True # Dont add connection notification anymore
|
||||||
file_server = sys.modules["main"].file_server
|
import main
|
||||||
|
file_server = main.file_server
|
||||||
if not file_server.port_opened or file_server.tor_manager.start_onions is None:
|
if not file_server.port_opened or file_server.tor_manager.start_onions is None:
|
||||||
self.site.page_requested = False # Not ready yet, check next time
|
self.site.page_requested = False # Not ready yet, check next time
|
||||||
else:
|
else:
|
||||||
|
@ -84,7 +85,8 @@ class UiWebsocket(object):
|
||||||
self.handleRequest(req)
|
self.handleRequest(req)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
if config.debug: # Allow websocket errors to appear on /Debug
|
if config.debug: # Allow websocket errors to appear on /Debug
|
||||||
sys.modules["main"].DebugHook.handleError()
|
import main
|
||||||
|
main.DebugHook.handleError()
|
||||||
self.log.error("WebSocket handleRequest error: %s \n %s" % (Debug.formatException(err), message))
|
self.log.error("WebSocket handleRequest error: %s \n %s" % (Debug.formatException(err), message))
|
||||||
if not self.hasPlugin("Multiuser"):
|
if not self.hasPlugin("Multiuser"):
|
||||||
self.cmd("error", "Internal error: %s" % Debug.formatException(err, "html"))
|
self.cmd("error", "Internal error: %s" % Debug.formatException(err, "html"))
|
||||||
|
@ -105,7 +107,8 @@ class UiWebsocket(object):
|
||||||
"Please check your configuration.")
|
"Please check your configuration.")
|
||||||
])
|
])
|
||||||
|
|
||||||
file_server = sys.modules["main"].file_server
|
import main
|
||||||
|
file_server = main.file_server
|
||||||
if any(file_server.port_opened.values()):
|
if any(file_server.port_opened.values()):
|
||||||
self.site.notifications.append([
|
self.site.notifications.append([
|
||||||
"done",
|
"done",
|
||||||
|
@ -233,7 +236,8 @@ class UiWebsocket(object):
|
||||||
self.response(args[0], result)
|
self.response(args[0], result)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
if config.debug: # Allow websocket errors to appear on /Debug
|
if config.debug: # Allow websocket errors to appear on /Debug
|
||||||
sys.modules["main"].DebugHook.handleError()
|
import main
|
||||||
|
main.DebugHook.handleError()
|
||||||
self.log.error("WebSocket handleRequest error: %s" % Debug.formatException(err))
|
self.log.error("WebSocket handleRequest error: %s" % Debug.formatException(err))
|
||||||
self.cmd("error", "Internal error: %s" % Debug.formatException(err, "html"))
|
self.cmd("error", "Internal error: %s" % Debug.formatException(err, "html"))
|
||||||
|
|
||||||
|
@ -318,7 +322,8 @@ class UiWebsocket(object):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def formatServerInfo(self):
|
def formatServerInfo(self):
|
||||||
file_server = sys.modules["main"].file_server
|
import main
|
||||||
|
file_server = main.file_server
|
||||||
if file_server.port_opened == {}:
|
if file_server.port_opened == {}:
|
||||||
ip_external = None
|
ip_external = None
|
||||||
else:
|
else:
|
||||||
|
@ -548,7 +553,8 @@ class UiWebsocket(object):
|
||||||
self.response(to, "ok")
|
self.response(to, "ok")
|
||||||
else:
|
else:
|
||||||
if len(site.peers) == 0:
|
if len(site.peers) == 0:
|
||||||
if any(sys.modules["main"].file_server.port_opened.values()) or sys.modules["main"].file_server.tor_manager.start_onions:
|
import main
|
||||||
|
if any(main.file_server.port_opened.values()) or main.file_server.tor_manager.start_onions:
|
||||||
if notification:
|
if notification:
|
||||||
self.cmd("notification", ["info", _["No peers found, but your content is ready to access."]])
|
self.cmd("notification", ["info", _["No peers found, but your content is ready to access."]])
|
||||||
if callback:
|
if callback:
|
||||||
|
@ -1106,10 +1112,11 @@ class UiWebsocket(object):
|
||||||
)
|
)
|
||||||
websocket.cmd("updating")
|
websocket.cmd("updating")
|
||||||
|
|
||||||
sys.modules["main"].update_after_shutdown = True
|
import main
|
||||||
|
main.update_after_shutdown = True
|
||||||
SiteManager.site_manager.save()
|
SiteManager.site_manager.save()
|
||||||
sys.modules["main"].file_server.stop()
|
main.file_server.stop()
|
||||||
sys.modules["main"].ui_server.stop()
|
main.ui_server.stop()
|
||||||
|
|
||||||
self.cmd(
|
self.cmd(
|
||||||
"confirm",
|
"confirm",
|
||||||
|
@ -1118,15 +1125,17 @@ class UiWebsocket(object):
|
||||||
)
|
)
|
||||||
|
|
||||||
def actionServerPortcheck(self, to):
|
def actionServerPortcheck(self, to):
|
||||||
file_server = sys.modules["main"].file_server
|
import main
|
||||||
|
file_server = main.file_server
|
||||||
file_server.portCheck()
|
file_server.portCheck()
|
||||||
self.response(to, file_server.port_opened)
|
self.response(to, file_server.port_opened)
|
||||||
|
|
||||||
def actionServerShutdown(self, to, restart=False):
|
def actionServerShutdown(self, to, restart=False):
|
||||||
|
import main
|
||||||
if restart:
|
if restart:
|
||||||
sys.modules["main"].restart_after_shutdown = True
|
main.restart_after_shutdown = True
|
||||||
sys.modules["main"].file_server.stop()
|
main.file_server.stop()
|
||||||
sys.modules["main"].ui_server.stop()
|
main.ui_server.stop()
|
||||||
|
|
||||||
def actionServerShowdirectory(self, to, directory="backup", inner_path=""):
|
def actionServerShowdirectory(self, to, directory="backup", inner_path=""):
|
||||||
if self.request.env["REMOTE_ADDR"] != "127.0.0.1":
|
if self.request.env["REMOTE_ADDR"] != "127.0.0.1":
|
||||||
|
@ -1182,7 +1191,8 @@ class UiWebsocket(object):
|
||||||
value = False
|
value = False
|
||||||
else:
|
else:
|
||||||
value = True
|
value = True
|
||||||
tor_manager = sys.modules["main"].file_server.tor_manager
|
import main
|
||||||
|
tor_manager = main.file_server.tor_manager
|
||||||
tor_manager.request("SETCONF UseBridges=%i" % value)
|
tor_manager.request("SETCONF UseBridges=%i" % value)
|
||||||
|
|
||||||
if key == "trackers_file":
|
if key == "trackers_file":
|
||||||
|
@ -1192,6 +1202,6 @@ class UiWebsocket(object):
|
||||||
logging.getLogger('').setLevel(logging.getLevelName(config.log_level))
|
logging.getLogger('').setLevel(logging.getLevelName(config.log_level))
|
||||||
|
|
||||||
if key == "ip_external":
|
if key == "ip_external":
|
||||||
gevent.spawn(sys.modules["main"].file_server.portCheck)
|
gevent.spawn(main.file_server.portCheck)
|
||||||
|
|
||||||
self.response(to, "ok")
|
self.response(to, "ok")
|
||||||
|
|
16
src/main.py
16
src/main.py
|
@ -151,7 +151,7 @@ class Actions(object):
|
||||||
logging.info("Please, secure it now, you going to need it to modify your site!")
|
logging.info("Please, secure it now, you going to need it to modify your site!")
|
||||||
|
|
||||||
logging.info("Creating directory structure...")
|
logging.info("Creating directory structure...")
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ class Actions(object):
|
||||||
logging.info("Site created!")
|
logging.info("Site created!")
|
||||||
|
|
||||||
def siteSign(self, address, privatekey=None, inner_path="content.json", publish=False, remove_missing_optional=False):
|
def siteSign(self, address, privatekey=None, inner_path="content.json", publish=False, remove_missing_optional=False):
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
from Debug import Debug
|
from Debug import Debug
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
@ -196,7 +196,7 @@ class Actions(object):
|
||||||
|
|
||||||
def siteVerify(self, address):
|
def siteVerify(self, address):
|
||||||
import time
|
import time
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
|
||||||
|
@ -230,7 +230,7 @@ class Actions(object):
|
||||||
logging.error("[ERROR] Error during verifying site files!")
|
logging.error("[ERROR] Error during verifying site files!")
|
||||||
|
|
||||||
def dbRebuild(self, address):
|
def dbRebuild(self, address):
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
|
||||||
|
@ -241,7 +241,7 @@ class Actions(object):
|
||||||
logging.info("Done in %.3fs" % (time.time() - s))
|
logging.info("Done in %.3fs" % (time.time() - s))
|
||||||
|
|
||||||
def dbQuery(self, address, query):
|
def dbQuery(self, address, query):
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ class Actions(object):
|
||||||
print(site.peers)
|
print(site.peers)
|
||||||
|
|
||||||
def siteDownload(self, address):
|
def siteDownload(self, address):
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
|
||||||
|
@ -301,7 +301,7 @@ class Actions(object):
|
||||||
|
|
||||||
|
|
||||||
def siteNeedFile(self, address, inner_path):
|
def siteNeedFile(self, address, inner_path):
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
|
||||||
|
@ -357,7 +357,7 @@ class Actions(object):
|
||||||
|
|
||||||
def sitePublish(self, address, peer_ip=None, peer_port=15441, inner_path="content.json"):
|
def sitePublish(self, address, peer_ip=None, peer_port=15441, inner_path="content.json"):
|
||||||
global file_server
|
global file_server
|
||||||
from Site import Site
|
from Site.Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
from File import FileServer # We need fileserver to handle incoming file requests
|
from File import FileServer # We need fileserver to handle incoming file requests
|
||||||
from Peer import Peer
|
from Peer import Peer
|
||||||
|
|
|
@ -26,7 +26,7 @@ def main():
|
||||||
import update
|
import update
|
||||||
|
|
||||||
# Close lock file
|
# Close lock file
|
||||||
sys.modules["main"].lock.close()
|
main.lock.close()
|
||||||
|
|
||||||
# Update
|
# Update
|
||||||
try:
|
try:
|
||||||
|
@ -49,7 +49,7 @@ def main():
|
||||||
import atexit
|
import atexit
|
||||||
print("Restarting...")
|
print("Restarting...")
|
||||||
# Close log files
|
# Close log files
|
||||||
logger = sys.modules["main"].logging.getLogger()
|
logger = main.logging.getLogger()
|
||||||
|
|
||||||
for handler in logger.handlers[:]:
|
for handler in logger.handlers[:]:
|
||||||
handler.flush()
|
handler.flush()
|
||||||
|
|
Loading…
Reference in a new issue