[setuptools packaging] access modules via imports (#1969)

This commit is contained in:
radfish 2019-04-15 06:31:33 -04:00 committed by ZeroNet
parent 6d8f55cf75
commit f6e3a74567
23 changed files with 96 additions and 80 deletions

View file

@ -501,6 +501,7 @@ class Config(object):
def getServerInfo(self):
from Plugin import PluginManager
import main
info = {
"platform": sys.platform,
@ -520,9 +521,9 @@ class Config(object):
}
try:
info["ip_external"] = sys.modules["main"].file_server.port_opened
info["tor_enabled"] = sys.modules["main"].file_server.tor_manager.enabled
info["tor_status"] = sys.modules["main"].file_server.tor_manager.status
info["ip_external"] = main.file_server.port_opened
info["tor_enabled"] = main.file_server.tor_manager.enabled
info["tor_status"] = main.file_server.tor_manager.status
except:
pass

View file

@ -1,7 +1,7 @@
import time
import os
from Db import Db
from Db.Db import Db
from Config import config
from Plugin import PluginManager
from Debug import Debug

View file

@ -1,3 +0,0 @@
from .Db import Db
from .DbQuery import DbQuery
from .DbCursor import DbCursor

View file

@ -13,12 +13,13 @@ last_error = None
def shutdown(reason="Unknown"):
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:
if "file_server" in dir(sys.modules["main"]):
gevent.spawn(sys.modules["main"].file_server.stop)
if "ui_server" in dir(sys.modules["main"]):
gevent.spawn(sys.modules["main"].ui_server.stop)
if "file_server" in dir(main):
gevent.spawn(main.file_server.stop)
if "ui_server" in dir(main):
gevent.spawn(main.ui_server.stop)
except Exception as err:
print("Proper shutdown error: %s" % err)
sys.exit(0)

View file

@ -91,7 +91,8 @@ class Peer(object):
elif self.site:
connection_server = self.site.connection_server
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.reputation += 1
self.connection.sites += 1

View file

@ -55,14 +55,15 @@ class Site(object):
self.storage = SiteStorage(self, allow_create=allow_create) # Save and load site files
self.content_manager = ContentManager(self)
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
self.connection_server = sys.modules["main"].file_server
else:
if "main" in sys.modules:
sys.modules["main"].file_server = FileServer()
self.connection_server = sys.modules["main"].file_server
if "main" in sys.modules: # import main has side-effects, breaks tests
import main
if "file_server" in dir(main): # Use global file server by default if possible
self.connection_server = main.file_server
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

View file

@ -11,7 +11,7 @@ import gevent.event
import util
from util import SafeRe
from Db import Db
from Db.Db import Db
from Debug import Debug
from Config import config
from util import helper

View file

@ -1,3 +0,0 @@
from .Site import Site
from .SiteStorage import SiteStorage
from .SiteAnnouncer import SiteAnnouncer

View file

@ -1,6 +1,6 @@
import re
from Db import DbQuery
from Db.DbQuery import DbQuery
class TestDbQuery:

View file

@ -8,7 +8,7 @@ from Connection import ConnectionServer
from Config import config
from File import FileRequest
from File import FileServer
from Site import Site
from Site.Site import Site
from . import Spy

View file

@ -89,7 +89,7 @@ config.trackers = []
config.data_dir = TEST_DATA_PATH # Use test data for unittests
config.initLogging()
from Site import Site
from Site.Site import Site
from Site import SiteManager
from User import UserManager
from File import FileServer
@ -104,7 +104,7 @@ from Db import Db
def cleanup():
sys.modules["Db.Db"].dbCloseAll()
Db.dbCloseAll()
for dir_path in [config.data_dir, config.data_dir + "-temp"]:
for file_name in os.listdir(dir_path):
ext = file_name.rsplit(".", 1)[-1]
@ -388,7 +388,7 @@ def db(request):
if os.path.isfile(db_path):
os.unlink(db_path)
db = Db(schema, db_path)
db = Db.Db(schema, db_path)
db.checkTables()
def stop():

View file

@ -82,8 +82,10 @@ class TorManager(object):
def setStatus(self, status):
self.status = status
if "ui_server" in dir(sys.modules.get("main", {})):
sys.modules["main"].ui_server.updateWebsocket()
if "main" in sys.modules: # import main has side-effects, breaks tests
import main
if "ui_server" in dir(main):
main.ui_server.updateWebsocket()
def startTor(self):
if sys.platform.startswith("win"):

View file

@ -745,8 +745,8 @@ class UiRequest(object):
# Debug last error
def actionDebug(self):
# Raise last error from DebugHook
import sys
last_error = sys.modules["main"].DebugHook.last_error
import main
last_error = main.DebugHook.last_error
if last_error:
raise last_error[0](last_error[1]).with_traceback(last_error[2])
else:

View file

@ -34,16 +34,16 @@ class UiWSGIHandler(WSGIHandler):
except Exception as err:
logging.error("UiWSGIHandler websocket error: %s" % Debug.formatException(err))
if config.debug: # Allow websocket errors to appear on /Debug
import sys
sys.modules["main"].DebugHook.handleError()
import main
main.DebugHook.handleError()
else: # Standard HTTP request
try:
super(UiWSGIHandler, self).run_application()
except Exception as err:
logging.error("UiWSGIHandler error: %s" % Debug.formatException(err))
if config.debug: # Allow websocket errors to appear on /Debug
import sys
sys.modules["main"].DebugHook.handleError()
import main
main.DebugHook.handleError()
def handle(self):
# Save socket to be able to close them properly on exit
@ -160,7 +160,8 @@ class UiServer:
self.server.serve_forever()
except Exception as 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.")
def stop(self):

View file

@ -50,7 +50,8 @@ class UiWebsocket(object):
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
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:
self.site.page_requested = False # Not ready yet, check next time
else:
@ -84,7 +85,8 @@ class UiWebsocket(object):
self.handleRequest(req)
except Exception as err:
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))
if not self.hasPlugin("Multiuser"):
self.cmd("error", "Internal error: %s" % Debug.formatException(err, "html"))
@ -105,7 +107,8 @@ class UiWebsocket(object):
"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()):
self.site.notifications.append([
"done",
@ -233,7 +236,8 @@ class UiWebsocket(object):
self.response(args[0], result)
except Exception as err:
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.cmd("error", "Internal error: %s" % Debug.formatException(err, "html"))
@ -318,7 +322,8 @@ class UiWebsocket(object):
return ret
def formatServerInfo(self):
file_server = sys.modules["main"].file_server
import main
file_server = main.file_server
if file_server.port_opened == {}:
ip_external = None
else:
@ -548,7 +553,8 @@ class UiWebsocket(object):
self.response(to, "ok")
else:
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:
self.cmd("notification", ["info", _["No peers found, but your content is ready to access."]])
if callback:
@ -1106,10 +1112,11 @@ class UiWebsocket(object):
)
websocket.cmd("updating")
sys.modules["main"].update_after_shutdown = True
import main
main.update_after_shutdown = True
SiteManager.site_manager.save()
sys.modules["main"].file_server.stop()
sys.modules["main"].ui_server.stop()
main.file_server.stop()
main.ui_server.stop()
self.cmd(
"confirm",
@ -1118,15 +1125,17 @@ class UiWebsocket(object):
)
def actionServerPortcheck(self, to):
file_server = sys.modules["main"].file_server
import main
file_server = main.file_server
file_server.portCheck()
self.response(to, file_server.port_opened)
def actionServerShutdown(self, to, restart=False):
import main
if restart:
sys.modules["main"].restart_after_shutdown = True
sys.modules["main"].file_server.stop()
sys.modules["main"].ui_server.stop()
main.restart_after_shutdown = True
main.file_server.stop()
main.ui_server.stop()
def actionServerShowdirectory(self, to, directory="backup", inner_path=""):
if self.request.env["REMOTE_ADDR"] != "127.0.0.1":
@ -1182,7 +1191,8 @@ class UiWebsocket(object):
value = False
else:
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)
if key == "trackers_file":
@ -1192,6 +1202,6 @@ class UiWebsocket(object):
logging.getLogger('').setLevel(logging.getLevelName(config.log_level))
if key == "ip_external":
gevent.spawn(sys.modules["main"].file_server.portCheck)
gevent.spawn(main.file_server.portCheck)
self.response(to, "ok")

View file

@ -151,7 +151,7 @@ class Actions(object):
logging.info("Please, secure it now, you going to need it to modify your site!")
logging.info("Creating directory structure...")
from Site import Site
from Site.Site import Site
from Site import SiteManager
SiteManager.site_manager.load()
@ -167,7 +167,7 @@ class Actions(object):
logging.info("Site created!")
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 Debug import Debug
SiteManager.site_manager.load()
@ -196,7 +196,7 @@ class Actions(object):
def siteVerify(self, address):
import time
from Site import Site
from Site.Site import Site
from Site import SiteManager
SiteManager.site_manager.load()
@ -230,7 +230,7 @@ class Actions(object):
logging.error("[ERROR] Error during verifying site files!")
def dbRebuild(self, address):
from Site import Site
from Site.Site import Site
from Site import SiteManager
SiteManager.site_manager.load()
@ -241,7 +241,7 @@ class Actions(object):
logging.info("Done in %.3fs" % (time.time() - s))
def dbQuery(self, address, query):
from Site import Site
from Site.Site import Site
from Site import SiteManager
SiteManager.site_manager.load()
@ -272,7 +272,7 @@ class Actions(object):
print(site.peers)
def siteDownload(self, address):
from Site import Site
from Site.Site import Site
from Site import SiteManager
SiteManager.site_manager.load()
@ -301,7 +301,7 @@ class Actions(object):
def siteNeedFile(self, address, inner_path):
from Site import Site
from Site.Site import Site
from Site import SiteManager
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"):
global file_server
from Site import Site
from Site.Site import Site
from Site import SiteManager
from File import FileServer # We need fileserver to handle incoming file requests
from Peer import Peer