[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

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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)

View File

@ -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

View File

@ -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

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"): 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)

View File

@ -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

View File

@ -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

View File

@ -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

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 import re
from Db import DbQuery from Db.DbQuery import DbQuery
class TestDbQuery: class TestDbQuery:

View File

@ -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

View File

@ -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():

View File

@ -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"):

View File

@ -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:

View File

@ -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):

View File

@ -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")

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("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

View File

@ -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()