3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-01 01:09:22 +01:00

Move some functions back into NetworkCore

Things like is_internal_client() are specific to the way we track users, so it doesn't make much sense to override these per protocol. It can *still* be done though, but there's little point...
This commit is contained in:
James Lu 2017-06-27 16:17:28 -07:00
parent 56f1c9e919
commit 5e7529dae4

View File

@ -418,6 +418,61 @@ class PyLinkNetworkCore(utils.DeprecatedAttributesObject, utils.CamelCaseToSnake
log.debug('Removing client %s from self.servers[%s].users', numeric, sid)
self.servers[sid].users.discard(numeric)
### State checking functions
def nick_to_uid(self, nick):
"""Looks up the UID of a user with the given nick, if one is present."""
nick = self.to_lower(nick)
for k, v in self.users.copy().items():
if self.to_lower(v.nick) == nick:
return k
def is_internal_client(self, numeric):
"""
Returns whether the given client numeric (UID) is a PyLink client.
"""
sid = self.get_server(numeric)
if sid and self.servers[sid].internal:
return True
return False
def is_internal_server(self, sid):
"""Returns whether the given SID is an internal PyLink server."""
return (sid in self.servers and self.servers[sid].internal)
def get_server(self, numeric):
"""Finds the SID of the server a user is on."""
userobj = self.users.get(numeric)
if userobj:
return userobj.server
def is_manipulatable_client(self, uid):
"""
Returns whether the given user is marked as an internal, manipulatable
client. Usually, automatically spawned services clients should have this
set True to prevent interactions with opers (like mode changes) from
causing desyncs.
"""
return self.is_internal_client(uid) and self.users[uid].manipulatable
def get_service_bot(self, uid):
"""
Checks whether the given UID is a registered service bot. If True,
returns the cooresponding ServiceBot object.
"""
userobj = self.users.get(uid)
if not userobj:
return False
# Look for the "service" attribute in the IrcUser object, if one exists.
try:
sname = userobj.service
# Warn if the service name we fetched isn't a registered service.
if sname not in world.services.keys():
log.warning("(%s) User %s / %s had a service bot record to a service that doesn't "
"exist (%s)!", self.name, uid, userobj.nick, sname)
return world.services.get(sname)
except AttributeError:
return False
class PyLinkNetworkCoreWithUtils(PyLinkNetworkCore):
def __init__(self, *args, **kwargs):
@ -818,62 +873,6 @@ class PyLinkNetworkCoreWithUtils(PyLinkNetworkCore):
log.debug('wrap_modes: returning %s for %s', strings, orig_modes)
return strings
### State checking functions
def nick_to_uid(self, nick):
"""Looks up the UID of a user with the given nick, if one is present."""
nick = self.to_lower(nick)
for k, v in self.users.copy().items():
if self.to_lower(v.nick) == nick:
return k
def is_internal_client(self, numeric):
"""
Returns whether the given client numeric (UID) is a PyLink client.
"""
sid = self.get_server(numeric)
if sid and self.servers[sid].internal:
return True
return False
def is_internal_server(self, sid):
"""Returns whether the given SID is an internal PyLink server."""
return (sid in self.servers and self.servers[sid].internal)
def get_server(self, numeric):
"""Finds the SID of the server a user is on."""
userobj = self.users.get(numeric)
if userobj:
return userobj.server
def is_manipulatable_client(self, uid):
"""
Returns whether the given user is marked as an internal, manipulatable
client. Usually, automatically spawned services clients should have this
set True to prevent interactions with opers (like mode changes) from
causing desyncs.
"""
return self.is_internal_client(uid) and self.users[uid].manipulatable
def get_service_bot(self, uid):
"""
Checks whether the given UID is a registered service bot. If True,
returns the cooresponding ServiceBot object.
"""
userobj = self.users.get(uid)
if not userobj:
return False
# Look for the "service" attribute in the IrcUser object, if one exists.
try:
sname = userobj.service
# Warn if the service name we fetched isn't a registered service.
if sname not in world.services.keys():
log.warning("(%s) User %s / %s had a service bot record to a service that doesn't "
"exist (%s)!", self.name, uid, userobj.nick, sname)
return world.services.get(sname)
except AttributeError:
return False
def get_hostmask(self, user, realhost=False, ip=False):
"""
Returns the hostmask of the given user, if present. If the realhost option