MCPcopy
hub / github.com/HelloZeroNet/ZeroNet / Site

Class Site

src/Site/Site.py:32–1090  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30
31@PluginManager.acceptPlugins
32class Site(object):
33
34 def __init__(self, address, allow_create=True, settings=None):
35 self.address = str(re.sub("[^A-Za-z0-9]", "", address)) # Make sure its correct address
36 self.address_hash = hashlib.sha256(self.address.encode("ascii")).digest()
37 self.address_sha1 = hashlib.sha1(self.address.encode("ascii")).digest()
38 self.address_short = "%s..%s" % (self.address[:6], self.address[-4:]) # Short address for logging
39 self.log = logging.getLogger("Site:%s" % self.address_short)
40 self.addEventListeners()
41
42 self.content = None # Load content.json
43 self.peers = {} # Key: ip:port, Value: Peer.Peer
44 self.peers_recent = collections.deque(maxlen=100)
45 self.peer_blacklist = SiteManager.peer_blacklist # Ignore this peers (eg. myself)
46 self.worker_manager = WorkerManager(self) # Handle site download from other peers
47 self.bad_files = {} # SHA check failed files, need to redownload {"inner.content": 1} (key: file, value: failed accept)
48 self.content_updated = None # Content.js update time
49 self.notifications = [] # Pending notifications displayed once on page load [error|ok|info, message, timeout]
50 self.page_requested = False # Page viewed in browser
51 self.websockets = [] # Active site websocket connections
52
53 self.connection_server = None
54 self.loadSettings(settings) # Load settings from sites.json
55 self.storage = SiteStorage(self, allow_create=allow_create) # Save and load site files
56 self.content_manager = ContentManager(self)
57 self.content_manager.loadContents() # Load content.json files
58 if "main" in sys.modules: # import main has side-effects, breaks tests
59 import main
60 if "file_server" in dir(main): # Use global file server by default if possible
61 self.connection_server = main.file_server
62 else:
63 main.file_server = FileServer()
64 self.connection_server = main.file_server
65 else:
66 self.connection_server = FileServer()
67
68 self.announcer = SiteAnnouncer(self) # Announce and get peer list from other nodes
69
70 if not self.settings.get("auth_key"): # To auth user in site (Obsolete, will be removed)
71 self.settings["auth_key"] = CryptHash.random()
72 self.log.debug("New auth key: %s" % self.settings["auth_key"])
73
74 if not self.settings.get("wrapper_key"): # To auth websocket permissions
75 self.settings["wrapper_key"] = CryptHash.random()
76 self.log.debug("New wrapper key: %s" % self.settings["wrapper_key"])
77
78 if not self.settings.get("ajax_key"): # To auth websocket permissions
79 self.settings["ajax_key"] = CryptHash.random()
80 self.log.debug("New ajax key: %s" % self.settings["ajax_key"])
81
82 def __str__(self):
83 return "Site %s" % self.address_short
84
85 def __repr__(self):
86 return "<%s>" % self.__str__()
87
88 # Load site settings from data/sites.json
89 def loadSettings(self, settings=None):

Callers 12

siteCreateMethod · 0.90
siteSignMethod · 0.90
siteVerifyMethod · 0.90
dbQueryMethod · 0.90
siteAnnounceMethod · 0.90
siteDownloadMethod · 0.90
siteNeedFileMethod · 0.90
loadMethod · 0.90
needMethod · 0.90
siteFunction · 0.90
site_tempFunction · 0.90
testFindOptionalMethod · 0.90

Calls

no outgoing calls

Tested by 3

siteFunction · 0.72
site_tempFunction · 0.72
testFindOptionalMethod · 0.72