Turned comms into typeclassed objects.

This commit is contained in:
Kelketek 2013-09-28 22:23:30 -05:00
parent 39b69dcdc2
commit 851e6d00cc
28 changed files with 1000 additions and 291 deletions

View file

@ -38,7 +38,7 @@ from django.contrib.auth.models import User
from src.players.models import PlayerDB from src.players.models import PlayerDB
from src.objects.models import ObjectDB from src.objects.models import ObjectDB
from src.server.models import ServerConfig from src.server.models import ServerConfig
from src.comms.models import Channel from src.comms.models import ChannelDB
from src.commands.cmdset import CmdSet from src.commands.cmdset import CmdSet
from src.utils import create, logger, utils, ansi from src.utils import create, logger, utils, ansi
@ -231,7 +231,7 @@ its and @/./+/-/_ only.") # this echoes the restrictions made by django's auth m
# join the new player to the public channel # join the new player to the public channel
pchanneldef = settings.CHANNEL_PUBLIC pchanneldef = settings.CHANNEL_PUBLIC
if pchanneldef: if pchanneldef:
pchannel = Channel.objects.get_channel(pchanneldef[0]) pchannel = ChannelDB.objects.get_channel(pchanneldef[0])
if not pchannel.connect_to(new_player): if not pchannel.connect_to(new_player):
string = "New player '%s' could not connect to public channel!" % new_player.key string = "New player '%s' could not connect to public channel!" % new_player.key
logger.log_errmsg(string) logger.log_errmsg(string)

8
ev.py
View file

@ -133,7 +133,7 @@ from src.locks import lockfuncs
from src.scripts.scripts import Script from src.scripts.scripts import Script
# comms # comms
from src.comms.models import Msg, Channel, PlayerChannelConnection, ExternalChannelConnection from src.comms.models import Msg, ChannelDB, PlayerChannelConnection, ExternalChannelConnection
# objects # objects
from src.objects.objects import Object, Character, Room, Exit from src.objects.objects import Object, Character, Room, Exit
@ -194,7 +194,7 @@ class DBmanagers(_EvContainer):
from src.help.models import HelpEntry from src.help.models import HelpEntry
from src.players.models import PlayerDB from src.players.models import PlayerDB
from src.scripts.models import ScriptDB from src.scripts.models import ScriptDB
from src.comms.models import Msg, Channel, PlayerChannelConnection, ExternalChannelConnection from src.comms.models import Msg, ChannelDB, PlayerChannelConnection, ExternalChannelConnection
from src.objects.models import ObjectDB from src.objects.models import ObjectDB
from src.server.models import ServerConfig from src.server.models import ServerConfig
@ -202,12 +202,12 @@ class DBmanagers(_EvContainer):
players = PlayerDB.objects players = PlayerDB.objects
scripts = ScriptDB.objects scripts = ScriptDB.objects
msgs = Msg.objects msgs = Msg.objects
channels = Channel.objects channels = ChannelDB.objects
connections = PlayerChannelConnection.objects connections = PlayerChannelConnection.objects
externalconnections = ExternalChannelConnection.objects externalconnections = ExternalChannelConnection.objects
objects = ObjectDB.objects objects = ObjectDB.objects
serverconfigs = ServerConfig.objects serverconfigs = ServerConfig.objects
del HelpEntry, PlayerDB, ScriptDB, Msg, Channel, PlayerChannelConnection, del HelpEntry, PlayerDB, ScriptDB, Msg, ChannelDB, PlayerChannelConnection,
del ExternalChannelConnection, ObjectDB, ServerConfig del ExternalChannelConnection, ObjectDB, ServerConfig
managers = DBmanagers() managers = DBmanagers()

View file

@ -60,7 +60,7 @@ class PlayerCmdSet(CmdSet):
self.add(comms.CmdChannels()) self.add(comms.CmdChannels())
self.add(comms.CmdCdestroy()) self.add(comms.CmdCdestroy())
self.add(comms.CmdChannelCreate()) self.add(comms.CmdChannelCreate())
self.add(comms.CmdCset()) self.add(comms.CmdClock())
self.add(comms.CmdCBoot()) self.add(comms.CmdCBoot())
self.add(comms.CmdCemit()) self.add(comms.CmdCemit())
self.add(comms.CmdCWho()) self.add(comms.CmdCWho())

View file

@ -8,7 +8,7 @@ for easy handling.
""" """
from django.conf import settings from django.conf import settings
from src.comms.models import Channel, Msg, PlayerChannelConnection, ExternalChannelConnection from src.comms.models import ChannelDB, Msg, PlayerChannelConnection, ExternalChannelConnection
from src.comms import irc, imc2, rss from src.comms import irc, imc2, rss
from src.comms.channelhandler import CHANNELHANDLER from src.comms.channelhandler import CHANNELHANDLER
from src.utils import create, utils, prettytable from src.utils import create, utils, prettytable
@ -27,10 +27,10 @@ def find_channel(caller, channelname, silent=False, noaliases=False):
Helper function for searching for a single channel with Helper function for searching for a single channel with
some error handling. some error handling.
""" """
channels = Channel.objects.channel_search(channelname) channels = ChannelDB.objects.channel_search(channelname)
if not channels: if not channels:
if not noaliases: if not noaliases:
channels = [chan for chan in Channel.objects.all() if channelname in chan.aliases] channels = [chan for chan in ChannelDB.objects.get_all_channels() if channelname in chan.aliases.all()]
if channels: if channels:
return channels[0] return channels[0]
if not silent: if not silent:
@ -197,7 +197,7 @@ class CmdAllCom(MuxPlayerCommand):
if args == "on": if args == "on":
# get names of all channels available to listen to and activate them all # get names of all channels available to listen to and activate them all
channels = [chan for chan in Channel.objects.get_all_channels() if chan.access(caller, 'listen')] channels = [chan for chan in ChannelDB.objects.get_all_channels() if chan.access(caller, 'listen')]
for channel in channels: for channel in channels:
caller.execute_cmd("addcom %s" % channel.key) caller.execute_cmd("addcom %s" % channel.key)
elif args == "off": elif args == "off":
@ -207,13 +207,13 @@ class CmdAllCom(MuxPlayerCommand):
caller.execute_cmd("delcom %s" % channel.key) caller.execute_cmd("delcom %s" % channel.key)
elif args == "destroy": elif args == "destroy":
# destroy all channels you control # destroy all channels you control
channels = [chan for chan in Channel.objects.get_all_channels() if chan.access(caller, 'control')] channels = [chan for chan in ChannelDB.objects.get_all_channels() if chan.access(caller, 'control')]
for channel in channels: for channel in channels:
caller.execute_cmd("@cdestroy %s" % channel.key) caller.execute_cmd("@cdestroy %s" % channel.key)
elif args == "who": elif args == "who":
# run a who, listing the subscribers on visible channels. # run a who, listing the subscribers on visible channels.
string = "\n{CChannel subscriptions{n" string = "\n{CChannel subscriptions{n"
channels = [chan for chan in Channel.objects.get_all_channels() if chan.access(caller, 'listen')] channels = [chan for chan in ChannelDB.objects.get_all_channels() if chan.access(caller, 'listen')]
if not channels: if not channels:
string += "No channels." string += "No channels."
for channel in channels: for channel in channels:
@ -237,8 +237,8 @@ class CmdChannels(MuxPlayerCommand):
@clist @clist
comlist comlist
Lists all channels available to you, wether you listen to them or not. Lists all channels available to you, whether you listen to them or not.
Use 'comlist" to only view your current channel subscriptions. Use 'comlist' to only view your current channel subscriptions.
Use addcom/delcom to join and leave channels Use addcom/delcom to join and leave channels
""" """
key = "@channels" key = "@channels"
@ -252,12 +252,14 @@ class CmdChannels(MuxPlayerCommand):
caller = self.caller caller = self.caller
# all channels we have available to listen to # all channels we have available to listen to
channels = [chan for chan in Channel.objects.get_all_channels() if chan.access(caller, 'listen')] channels = [chan for chan in ChannelDB.objects.get_all_channels() if chan.access(caller, 'listen')]
print channels
if not channels: if not channels:
self.msg("No channels available.") self.msg("No channels available.")
return return
# all channel we are already subscribed to # all channel we are already subscribed to
subs = [conn.channel for conn in PlayerChannelConnection.objects.get_all_player_connections(caller)] subs = [conn.channel for conn in PlayerChannelConnection.objects.get_all_player_connections(caller)]
print subs
if self.cmdstring == "comlist": if self.cmdstring == "comlist":
# just display the subscribed channels with no extra info # just display the subscribed channels with no extra info
@ -265,21 +267,22 @@ class CmdChannels(MuxPlayerCommand):
for chan in subs: for chan in subs:
clower = chan.key.lower() clower = chan.key.lower()
nicks = caller.nicks.get(category="channel") nicks = caller.nicks.get(category="channel")
comtable.add_row(["%s%s" % (chan.key, chan.aliases and "(%s)" % ",".join(chan.aliases) or ""), comtable.add_row(["%s%s" % (chan.key, chan.aliases.all() and "(%s)" % ",".join(chan.aliases.all()) or ""),
"%s".join(nick.db_key for nick in make_iter(nicks) if nick and nick.value.lower()==clower()), "%s".join(nick for nick in make_iter(nicks) if nick and nick.lower()==clower),
chan.desc]) chan.db.desc])
caller.msg("\n{wChannel subscriptions{n (use {w@channels{n to list all, {waddcom{n/{wdelcom{n to sub/unsub):{n\n%s" % comtable) caller.msg("\n{wChannel subscriptions{n (use {w@channels{n to list all, {waddcom{n/{wdelcom{n to sub/unsub):{n\n%s" % comtable)
else: else:
# full listing (of channels caller is able to listen to) # full listing (of channels caller is able to listen to)
comtable = prettytable.PrettyTable(["{wsub","{wchannel","{wmy aliases","{wlocks","{wdescription"]) comtable = prettytable.PrettyTable(["{wsub","{wchannel","{wmy aliases","{wlocks","{wdescription"])
for chan in channels: for chan in channels:
clower = chan.key.lower()
nicks = caller.nicks.get(category="channel") nicks = caller.nicks.get(category="channel")
if nicks: nicks = nicks or []
comtable.add_row([chan in subs and "{gYes{n" or "{rNo{n", comtable.add_row([chan in subs and "{gYes{n" or "{rNo{n",
"%s%s" % (chan.key, chan.aliases and "(%s)" % ",".join(chan.aliases) or ""), "%s%s" % (chan.key, chan.aliases.all() and "(%s)" % ",".join(chan.aliases.all()) or ""),
"%s".join(nick.db_key for nick in make_iter(nicks) if nick.value.lower()==clower()), "%s".join(nick for nick in make_iter(nicks) if nick.lower()==clower),
chan.locks, str(chan.locks),
chan.desc]) chan.db.desc])
caller.msg("\n{wAvailable channels{n (use {wcomlist{n,{waddcom{n and {wdelcom{n to manage subscriptions):\n%s" % comtable) caller.msg("\n{wAvailable channels{n (use {wcomlist{n,{waddcom{n and {wdelcom{n to manage subscriptions):\n%s" % comtable)
class CmdCdestroy(MuxPlayerCommand): class CmdCdestroy(MuxPlayerCommand):
@ -353,7 +356,7 @@ class CmdCBoot(MuxPlayerCommand):
searchstring = playername.lstrip('*') searchstring = playername.lstrip('*')
else: else:
searchstring = self.rhs.lstrip('*') searchstring = self.rhs.lstrip('*')
player = self.search(searchstring, player=True) player = self.caller.search(searchstring, player=True)
if not player: if not player:
return return
if reason: if reason:
@ -362,7 +365,7 @@ class CmdCBoot(MuxPlayerCommand):
string = "You don't control this channel." string = "You don't control this channel."
self.msg(string) self.msg(string)
return return
if not PlayerChannelConnection.objects.has_connection(player, channel): if not PlayerChannelConnection.objects.has_player_connection(player, channel):
string = "Player %s is not connected to channel %s." % (player.key, channel.key) string = "Player %s is not connected to channel %s." % (player.key, channel.key)
self.msg(string) self.msg(string)
return return
@ -370,7 +373,8 @@ class CmdCBoot(MuxPlayerCommand):
string = "%s boots %s from channel.%s" % (self.caller, player.key, reason) string = "%s boots %s from channel.%s" % (self.caller, player.key, reason)
channel.msg(string) channel.msg(string)
# find all player's nicks linked to this channel and delete them # find all player's nicks linked to this channel and delete them
for nick in [nick for nick in player.character.nicks.get(category="channel") for nick in [nick for nick in
player.character.nicks.get(category="channel") or []
if nick.db_real.lower() == channel.key]: if nick.db_real.lower() == channel.key]:
nick.delete() nick.delete()
# disconnect player # disconnect player
@ -497,7 +501,7 @@ class CmdChannelCreate(MuxPlayerCommand):
for part in lhs.split(';', 1) if part.strip()] for part in lhs.split(';', 1) if part.strip()]
aliases = [alias.strip().lower() aliases = [alias.strip().lower()
for alias in aliases.split(';') if alias.strip()] for alias in aliases.split(';') if alias.strip()]
channel = Channel.objects.channel_search(channame) channel = ChannelDB.objects.channel_search(channame)
if channel: if channel:
self.msg("A channel with that name already exists.") self.msg("A channel with that name already exists.")
return return
@ -508,27 +512,27 @@ class CmdChannelCreate(MuxPlayerCommand):
self.msg("Created channel %s and connected to it." % new_chan.key) self.msg("Created channel %s and connected to it." % new_chan.key)
class CmdCset(MuxPlayerCommand): class CmdClock(MuxPlayerCommand):
""" """
@cset - changes channel access restrictions @clock - changes channel access restrictions
Usage: Usage:
@cset <channel> [= <lockstring>] @clock <channel> [= <lockstring>]
Changes the lock access restrictions of a channel. If no Changes the lock access restrictions of a channel. If no
lockstring was given, view the current lock definitions. lockstring was given, view the current lock definitions.
""" """
key = "@cset" key = "@clock"
locks = "cmd:not pperm(channel_banned)" locks = "cmd:not pperm(channel_banned)"
aliases = ["@cclock"] aliases = ["@clock"]
help_category = "Comms" help_category = "Comms"
def func(self): def func(self):
"run the function" "run the function"
if not self.args: if not self.args:
string = "Usage: @cset channel [= lockstring]" string = "Usage: @clock channel [= lockstring]"
self.msg(string) self.msg(string)
return return
@ -586,7 +590,7 @@ class CmdCdesc(MuxPlayerCommand):
self.msg("You cannot admin this channel.") self.msg("You cannot admin this channel.")
return return
# set the description # set the description
channel.desc = self.rhs channel.db.desc = self.rhs
channel.save() channel.save()
self.msg("Description of channel '%s' set to '%s'." % (channel.key, self.rhs)) self.msg("Description of channel '%s' set to '%s'." % (channel.key, self.rhs))

View file

@ -18,7 +18,7 @@ line with a command (if there is no match to a known command,
the line is just added to the editor buffer). the line is just added to the editor buffer).
""" """
from src.comms.models import Channel from src.comms.models import ChannelDB
from src.utils import create from src.utils import create
# The command keys the engine is calling # The command keys the engine is calling
@ -153,7 +153,7 @@ class SystemSendToChannel(MuxCommand):
if not msg: if not msg:
caller.msg("Say what?") caller.msg("Say what?")
return return
channel = Channel.objects.get_channel(channelkey) channel = ChannelDB.objects.get_channel(channelkey)
if not channel: if not channel:
caller.msg("Channel '%s' not found." % channelkey) caller.msg("Channel '%s' not found." % channelkey)
return return

View file

@ -247,7 +247,7 @@ class TestComms(CommandTest):
self.call(comms.CmdDelCom(), "tc", "Your alias 'tc' for channel testchan was cleared.") self.call(comms.CmdDelCom(), "tc", "Your alias 'tc' for channel testchan was cleared.")
self.call(comms.CmdChannels(), "" ,"Available channels (use comlist,addcom and delcom to manage") self.call(comms.CmdChannels(), "" ,"Available channels (use comlist,addcom and delcom to manage")
self.call(comms.CmdAllCom(), "", "Available channels (use comlist,addcom and delcom to manage") self.call(comms.CmdAllCom(), "", "Available channels (use comlist,addcom and delcom to manage")
self.call(comms.CmdCset(), "testchan=send:all()", "Lock(s) applied. Current locks on testchan:") self.call(comms.CmdClock(), "testchan=send:all()", "Lock(s) applied. Current locks on testchan:")
self.call(comms.CmdCdesc(), "testchan = Test Channel", "Description of channel 'testchan' set to 'Test Channel'.") self.call(comms.CmdCdesc(), "testchan = Test Channel", "Description of channel 'testchan' set to 'Test Channel'.")
self.call(comms.CmdCemit(), "testchan = Test Message", "Sent to channel testchan: [testchan] Test Message") self.call(comms.CmdCemit(), "testchan = Test Message", "Sent to channel testchan: [testchan] Test Message")
self.call(comms.CmdCWho(), "testchan", "Channel subscriptions\ntestchan:\n TestPlayer7") self.call(comms.CmdCWho(), "testchan", "Channel subscriptions\ntestchan:\n TestPlayer7")

View file

@ -7,7 +7,7 @@ from django.conf import settings
from src.players.models import PlayerDB from src.players.models import PlayerDB
from src.objects.models import ObjectDB from src.objects.models import ObjectDB
from src.server.models import ServerConfig from src.server.models import ServerConfig
from src.comms.models import Channel from src.comms.models import ChannelDB
from src.utils import create, logger, utils, ansi from src.utils import create, logger, utils, ansi
from src.commands.default.muxcommand import MuxCommand from src.commands.default.muxcommand import MuxCommand
@ -176,7 +176,7 @@ class CmdUnconnectedCreate(MuxCommand):
# join the new player to the public channel # join the new player to the public channel
pchanneldef = settings.CHANNEL_PUBLIC pchanneldef = settings.CHANNEL_PUBLIC
if pchanneldef: if pchanneldef:
pchannel = Channel.objects.get_channel(pchanneldef[0]) pchannel = ChannelDB.objects.get_channel(pchanneldef[0])
if not pchannel.connect_to(new_player): if not pchannel.connect_to(new_player):
string = "New player '%s' could not connect to public channel!" % new_player.key string = "New player '%s' could not connect to public channel!" % new_player.key
logger.log_errmsg(string) logger.log_errmsg(string)

View file

@ -9,4 +9,4 @@ Also, the initiated object manager is available as src.comms.msgmanager and src.
from src.comms.models import * from src.comms.models import *
msgmanager = Msg.objects msgmanager = Msg.objects
channelmanager = Channel.objects channelmanager = ChannelDB.objects

View file

@ -4,7 +4,7 @@
# #
from django.contrib import admin from django.contrib import admin
from src.comms.models import Channel, Msg, PlayerChannelConnection, ExternalChannelConnection from src.comms.models import ChannelDB, Msg, PlayerChannelConnection, ExternalChannelConnection
class MsgAdmin(admin.ModelAdmin): class MsgAdmin(admin.ModelAdmin):
list_display = ('id', 'db_date_sent', 'db_sender', 'db_receivers', 'db_channels', 'db_message', 'db_lock_storage') list_display = ('id', 'db_date_sent', 'db_sender', 'db_receivers', 'db_channels', 'db_message', 'db_lock_storage')
@ -48,7 +48,7 @@ class ChannelAdmin(admin.ModelAdmin):
(None, {'fields':(('db_key', 'db_aliases', 'db_desc'),'db_lock_storage', 'db_keep_log')}), (None, {'fields':(('db_key', 'db_aliases', 'db_desc'),'db_lock_storage', 'db_keep_log')}),
) )
admin.site.register(Channel, ChannelAdmin) admin.site.register(ChannelDB, ChannelAdmin)
# class PlayerChannelConnectionAdmin(admin.ModelAdmin): # class PlayerChannelConnectionAdmin(admin.ModelAdmin):
# list_display = ('db_channel', 'db_player') # list_display = ('db_channel', 'db_player')

View file

@ -23,7 +23,7 @@ update() on the channelhandler. Or use Channel.objects.delete() which
does this for you. does this for you.
""" """
from src.comms.models import Channel, Msg from src.comms.models import ChannelDB, Msg
from src.commands import cmdset, command from src.commands import cmdset, command
from src.utils import utils from src.utils import utils
@ -64,7 +64,7 @@ class ChannelCommand(command.Command):
if not msg: if not msg:
self.msg("Say what?") self.msg("Say what?")
return return
channel = Channel.objects.get_channel(channelkey) channel = ChannelDB.objects.get_channel(channelkey)
if not channel: if not channel:
self.msg("Channel '%s' not found." % channelkey) self.msg("Channel '%s' not found." % channelkey)
@ -112,11 +112,9 @@ class ChannelHandler(object):
def _format_help(self, channel): def _format_help(self, channel):
"builds a doc string" "builds a doc string"
key = channel.key key = channel.key
aliases = channel.aliases aliases = channel.aliases.all()
if not utils.is_iter(aliases):
aliases = [aliases]
ustring = "%s <message>" % key.lower() + "".join(["\n %s <message>" % alias.lower() for alias in aliases]) ustring = "%s <message>" % key.lower() + "".join(["\n %s <message>" % alias.lower() for alias in aliases])
desc = channel.desc desc = channel.db.desc
string = \ string = \
""" """
Channel '%s' Channel '%s'
@ -137,7 +135,7 @@ class ChannelHandler(object):
""" """
# map the channel to a searchable command # map the channel to a searchable command
cmd = ChannelCommand(key=channel.key.strip().lower(), cmd = ChannelCommand(key=channel.key.strip().lower(),
aliases=channel.aliases if channel.aliases else [], aliases=channel.aliases.all(),
locks="cmd:all();%s" % channel.locks, locks="cmd:all();%s" % channel.locks,
obj=channel) obj=channel)
cmd.__doc__= self._format_help(channel) cmd.__doc__= self._format_help(channel)
@ -148,7 +146,7 @@ class ChannelHandler(object):
"Updates the handler completely." "Updates the handler completely."
self.cached_channel_cmds = [] self.cached_channel_cmds = []
self.cached_cmdsets = {} self.cached_cmdsets = {}
for channel in Channel.objects.all(): for channel in ChannelDB.objects.get_all_channels():
self.add_channel(channel) self.add_channel(channel)
def get_cmdset(self, source_object): def get_cmdset(self, source_object):

21
src/comms/comms.py Normal file
View file

@ -0,0 +1,21 @@
"""
Default Typeclass for Comms.
See objects.objects for more information on Typeclassing.
"""
from src.typeclasses.typeclass import TypeClass
class Comm(TypeClass):
"""
This is the base class for all Comms. Inherit from this to create different
types of communication channels.
"""
def __init__(self, dbobj):
super(Comm, self).__init__(dbobj)
def format_message(self, msg):
"""
Takes a Msg (see models.Msg), and derives the output display for it on
the channel.
"""

View file

@ -11,7 +11,7 @@ from django.conf import settings
from src.utils import logger, create, search, utils from src.utils import logger, create, search, utils
from src.server.sessionhandler import SESSIONS from src.server.sessionhandler import SESSIONS
from src.scripts.scripts import Script from src.scripts.scripts import Script
from src.comms.models import Channel, ExternalChannelConnection from src.comms.models import ChannelDB, ExternalChannelConnection
from src.comms.imc2lib import imc2_packets as pck from src.comms.imc2lib import imc2_packets as pck
from src.comms.imc2lib.imc2_trackers import IMC2MudList, IMC2ChanList from src.comms.imc2lib.imc2_trackers import IMC2MudList, IMC2ChanList
from src.comms.imc2lib.imc2_listeners import handle_whois_reply from src.comms.imc2lib.imc2_listeners import handle_whois_reply
@ -26,7 +26,7 @@ IMC2_CLIENT_PWD = settings.IMC2_CLIENT_PWD
IMC2_SERVER_PWD = settings.IMC2_SERVER_PWD IMC2_SERVER_PWD = settings.IMC2_SERVER_PWD
# channel to send info to # channel to send info to
INFOCHANNEL = Channel.objects.channel_search(settings.CHANNEL_MUDINFO[0]) INFOCHANNEL = ChannelDB.objects.channel_search(settings.CHANNEL_MUDINFO[0])
# all linked channel connections # all linked channel connections
IMC2_CLIENT = None IMC2_CLIENT = None
# IMC2 debug mode # IMC2 debug mode
@ -407,8 +407,8 @@ def create_connection(channel, imc2_channel):
This will create a new IMC2<->channel connection. This will create a new IMC2<->channel connection.
""" """
if not type(channel) == Channel: if not type(channel) == ChannelDB:
new_channel = Channel.objects.filter(db_key=channel) new_channel = ChannelDB.objects.filter(db_key=channel)
if not new_channel: if not new_channel:
logger.log_errmsg(_("Cannot attach IMC2<->Evennia: Evennia Channel '%s' not found") % channel) logger.log_errmsg(_("Cannot attach IMC2<->Evennia: Evennia Channel '%s' not found") % channel)
return False return False

View file

@ -7,13 +7,13 @@ from twisted.application import internet
from twisted.words.protocols import irc from twisted.words.protocols import irc
from twisted.internet import protocol from twisted.internet import protocol
from django.conf import settings from django.conf import settings
from src.comms.models import ExternalChannelConnection, Channel from src.comms.models import ExternalChannelConnection, ChannelDB
from src.utils import logger, utils from src.utils import logger, utils
from src.server.sessionhandler import SESSIONS from src.server.sessionhandler import SESSIONS
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
INFOCHANNEL = Channel.objects.channel_search(settings.CHANNEL_MUDINFO[0]) INFOCHANNEL = ChannelDB.objects.channel_search(settings.CHANNEL_MUDINFO[0])
IRC_CHANNELS = [] IRC_CHANNELS = []
def msg_info(message): def msg_info(message):
@ -134,8 +134,8 @@ def create_connection(channel, irc_network, irc_port, irc_channel, irc_bot_nick)
""" """
This will create a new IRC<->channel connection. This will create a new IRC<->channel connection.
""" """
if not type(channel) == Channel: if not type(channel) == ChannelDB:
new_channel = Channel.objects.filter(db_key=channel) new_channel = ChannelDB.objects.filter(db_key=channel)
if not new_channel: if not new_channel:
logger.log_errmsg(_("Cannot attach IRC<->Evennia: Evennia Channel '%s' not found") % channel) logger.log_errmsg(_("Cannot attach IRC<->Evennia: Evennia Channel '%s' not found") % channel)
return False return False

View file

@ -6,11 +6,12 @@ import itertools
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from src.typeclasses.managers import returns_typeclass_list, returns_typeclass
_GA = object.__getattribute__ _GA = object.__getattribute__
_PlayerDB = None _PlayerDB = None
_ObjectDB = None _ObjectDB = None
_Channel = None _ChannelDB = None
_SESSIONS = None _SESSIONS = None
_ExternalConnection = None _ExternalConnection = None
_User = None _User = None
@ -45,13 +46,13 @@ def dbref(dbref, reqhash=True):
def identify_object(inp): def identify_object(inp):
"identify if an object is a player or an object; return its database model" "identify if an object is a player or an object; return its database model"
# load global stores # load global stores
global _PlayerDB, _ObjectDB, _Channel, _ExternalConnection, _User global _PlayerDB, _ObjectDB, _ChannelDB, _ExternalConnection, _User
if not _PlayerDB: if not _PlayerDB:
from src.players.models import PlayerDB as _PlayerDB from src.players.models import PlayerDB as _PlayerDB
if not _ObjectDB: if not _ObjectDB:
from src.objects.models import ObjectDB as _ObjectDB from src.objects.models import ObjectDB as _ObjectDB
if not _Channel: if not _ChannelDB:
from src.comms.models import Channel as _Channel from src.comms.models import ChannelDB as _ChannelDB
if not _ExternalConnection: if not _ExternalConnection:
from src.comms.models import ExternalChannelConnection as _ExternalConnection from src.comms.models import ExternalChannelConnection as _ExternalConnection
if not _User: if not _User:
@ -66,7 +67,7 @@ def identify_object(inp):
typ = type(obj) typ = type(obj)
if typ == _PlayerDB: return obj, "player" if typ == _PlayerDB: return obj, "player"
elif typ == _ObjectDB: return obj, "object" elif typ == _ObjectDB: return obj, "object"
elif typ == _Channel: return obj, "channel" elif typ == _ChannelDB: return obj, "channel"
elif dbref(obj): return dbref(obj), "dbref" elif dbref(obj): return dbref(obj), "dbref"
elif typ == basestring: return obj, "string" elif typ == basestring: return obj, "string"
elif typ == _ExternalConnection: return obj, "external" elif typ == _ExternalConnection: return obj, "external"
@ -96,8 +97,8 @@ def to_object(inp, objtype='player'):
print objtype, inp, obj, typ, type(inp) print objtype, inp, obj, typ, type(inp)
raise CommError() raise CommError()
elif objtype == 'channel': elif objtype == 'channel':
if typ == 'string': return _Channel.objects.get(db_key__iexact=obj) if typ == 'string': return _ChannelDB.objects.get(db_key__iexact=obj)
if typ == 'dbref': return _Channel.objects.get(id=obj) if typ == 'dbref': return _ChannelDB.objects.get(id=obj)
print objtype, inp, obj, typ, type(inp) print objtype, inp, obj, typ, type(inp)
raise CommError() raise CommError()
elif objtype == 'external': elif objtype == 'external':
@ -262,13 +263,14 @@ class ChannelManager(models.Manager):
channel_search (equivalent to ev.search_channel) channel_search (equivalent to ev.search_channel)
""" """
@returns_typeclass_list
def get_all_channels(self): def get_all_channels(self):
""" """
Returns all channels in game. Returns all channels in game.
""" """
return self.all() return self.all()
@returns_typeclass
def get_channel(self, channelkey): def get_channel(self, channelkey):
""" """
Return the channel object if given its key. Return the channel object if given its key.
@ -279,7 +281,7 @@ class ChannelManager(models.Manager):
if not channels: if not channels:
# also check aliases # also check aliases
channels = [channel for channel in self.all() channels = [channel for channel in self.all()
if channelkey in channel.aliases] if channelkey in channel.aliases.all()]
if channels: if channels:
return channels[0] return channels[0]
return None return None
@ -319,7 +321,7 @@ class ChannelManager(models.Manager):
unique_online_users = set(sess.uid for sess in session_list if sess.logged_in) unique_online_users = set(sess.uid for sess in session_list if sess.logged_in)
online_players = (sess.get_player() for sess in session_list if sess.uid in unique_online_users) online_players = (sess.get_player() for sess in session_list if sess.uid in unique_online_users)
for player in online_players: for player in online_players:
players.extend(PlayerChannelConnection.objects.filter(db_player=player, db_channel=channel)) players.extend(PlayerChannelConnection.objects.filter(db_player=player.dbobj, db_channel=channel))
else: else:
players.extend(PlayerChannelConnection.objects.get_all_connections(channel)) players.extend(PlayerChannelConnection.objects.get_all_connections(channel))
@ -327,6 +329,7 @@ class ChannelManager(models.Manager):
return itertools.chain(players, external_connections) return itertools.chain(players, external_connections)
@returns_typeclass_list
def channel_search(self, ostring): def channel_search(self, ostring):
""" """
Search the channel database for a particular channel. Search the channel database for a particular channel.
@ -345,7 +348,7 @@ class ChannelManager(models.Manager):
channels = self.filter(db_key__iexact=ostring) channels = self.filter(db_key__iexact=ostring)
if not channels: if not channels:
# still no match. Search by alias. # still no match. Search by alias.
channels = [channel for channel in self.all() if ostring.lower() in [a.lower for a in channel.aliases]] channels = [channel for channel in self.all() if ostring.lower() in [a.lower for a in channel.aliases.all()]]
return channels return channels
# #
@ -371,7 +374,7 @@ class PlayerChannelConnectionManager(models.Manager):
break_connection break_connection
""" """
@returns_typeclass_list
def get_all_player_connections(self, player): def get_all_player_connections(self, player):
"Get all connections that the given player has." "Get all connections that the given player has."
player = to_object(player) player = to_object(player)
@ -380,7 +383,8 @@ class PlayerChannelConnectionManager(models.Manager):
def has_player_connection(self, player, channel): def has_player_connection(self, player, channel):
"Checks so a connection exists player<->channel" "Checks so a connection exists player<->channel"
if player and channel: if player and channel:
return self.filter(db_player=player).filter(db_channel=channel).count() > 0 return self.filter(db_player=player.dbobj).filter(
db_channel=channel.dbobj).count() > 0
return False return False
def get_all_connections(self, channel): def get_all_connections(self, channel):

View file

@ -0,0 +1,182 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'InterimChannel'
db.create_table(u'comms_interimchannel', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('db_key', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
('db_typeclass_path', self.gf('django.db.models.fields.CharField')(max_length=255, null=True)),
('db_date_created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('db_lock_storage', self.gf('django.db.models.fields.TextField')(blank=True)),
))
db.send_create_signal(u'comms', ['InterimChannel'])
# Adding M2M table for field db_attributes on 'InterimChannel'
m2m_table_name = db.shorten_name(u'comms_interimchannel_db_attributes')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('interimchannel', models.ForeignKey(orm[u'comms.interimchannel'], null=False)),
('attribute', models.ForeignKey(orm[u'typeclasses.attribute'], null=False))
))
db.create_unique(m2m_table_name, ['interimchannel_id', 'attribute_id'])
# Adding M2M table for field db_tags on 'InterimChannel'
m2m_table_name = db.shorten_name(u'comms_interimchannel_db_tags')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('interimchannel', models.ForeignKey(orm[u'comms.interimchannel'], null=False)),
('tag', models.ForeignKey(orm[u'typeclasses.tag'], null=False))
))
db.create_unique(m2m_table_name, ['interimchannel_id', 'tag_id'])
def backwards(self, orm):
# Deleting model 'InterimChannel'
db.delete_table(u'comms_interimchannel')
# Removing M2M table for field db_attributes on 'InterimChannel'
db.delete_table(db.shorten_name(u'comms_interimchannel_db_attributes'))
# Removing M2M table for field db_tags on 'InterimChannel'
db.delete_table(db.shorten_name(u'comms_interimchannel_db_tags'))
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'comms.channel': {
'Meta': {'object_name': 'Channel'},
'db_aliases': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'db_desc': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
'db_keep_log': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.externalchannelconnection': {
'Meta': {'object_name': 'ExternalChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.Channel']"}),
'db_external_config': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_external_key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'db_external_send_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_is_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.interimchannel': {
'Meta': {'ordering': "['-db_date_created', 'id', 'db_typeclass_path', 'db_key']", 'object_name': 'InterimChannel'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.msg': {
'Meta': {'object_name': 'Msg'},
'db_date_sent': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
'db_header': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_hide_from_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_channels_set'", 'null': 'True', 'to': u"orm['comms.Channel']"}),
'db_hide_from_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_objects_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_hide_from_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_players_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_message': ('django.db.models.fields.TextField', [], {}),
'db_receivers_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'channel_set'", 'null': 'True', 'to': u"orm['comms.Channel']"}),
'db_receivers_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_object_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_receivers_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_player_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_sender_external': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
'db_sender_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_object_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_sender_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_player_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.playerchannelconnection': {
'Meta': {'object_name': 'PlayerChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.Channel']"}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'objects.objectdb': {
'Meta': {'object_name': 'ObjectDB'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destinations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_home': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'homes_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_location': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']", 'null': 'True', 'blank': 'True'}),
'db_sessid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'players.playerdb': {
'Meta': {'object_name': 'PlayerDB'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_is_connected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'typeclasses.attribute': {
'Meta': {'object_name': 'Attribute'},
'db_category': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_strvalue': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_value': ('src.utils.picklefield.PickledObjectField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'typeclasses.tag': {
'Meta': {'unique_together': "(('db_key', 'db_category'),)", 'object_name': 'Tag', 'index_together': "(('db_key', 'db_category'),)"},
'db_category': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'db_index': 'True'}),
'db_data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['comms']

View file

@ -0,0 +1,143 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
db.rename_table('comms_channel', 'comms_channeldb')
db.rename_column('comms_externalchannelconnection', 'channel_id', 'channeldb_id')
db.rename_column('comms_msg_db_hide_from_channels', 'channel_id', 'channeldb_id')
db.rename_column('comms_msg_db_receivers_channels', 'channel_id', 'channeldb_id')
def backwards(self, orm):
db.rename_table('comms_channeldb', 'comms_channel')
db.rename_column('comms_externalchannelconnection', 'channeldb_id', 'channel_id')
db.rename_column('comms_msg_db_hide_from_channels', 'channeldb_id', 'channel_id')
db.rename_column('comms_msg_db_receivers_channels', 'channeldb_id', 'channel_id')
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'comms.channel': {
'Meta': {'object_name': 'Channel'},
'db_aliases': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'db_desc': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
'db_keep_log': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.externalchannelconnection': {
'Meta': {'object_name': 'ExternalChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.Channel']"}),
'db_external_config': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_external_key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'db_external_send_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_is_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.msg': {
'Meta': {'object_name': 'Msg'},
'db_date_sent': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
'db_header': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_hide_from_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_channels_set'", 'null': 'True', 'to': u"orm['comms.Channel']"}),
'db_hide_from_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_objects_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_hide_from_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_players_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_message': ('django.db.models.fields.TextField', [], {}),
'db_receivers_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'channel_set'", 'null': 'True', 'to': u"orm['comms.Channel']"}),
'db_receivers_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_object_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_receivers_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_player_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_sender_external': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
'db_sender_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_object_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_sender_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_player_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.playerchannelconnection': {
'Meta': {'object_name': 'PlayerChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.Channel']"}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'objects.objectdb': {
'Meta': {'object_name': 'ObjectDB'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destinations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_home': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'homes_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_location': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']", 'null': 'True', 'blank': 'True'}),
'db_sessid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'players.playerdb': {
'Meta': {'object_name': 'PlayerDB'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_is_connected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'typeclasses.attribute': {
'Meta': {'object_name': 'Attribute'},
'db_category': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_strvalue': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_value': ('src.utils.picklefield.PickledObjectField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'typeclasses.tag': {
'Meta': {'unique_together': "(('db_key', 'db_category'),)", 'object_name': 'Tag', 'index_together': "(('db_key', 'db_category'),)"},
'db_category': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'db_index': 'True'}),
'db_data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['comms']

View file

@ -0,0 +1,172 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import DataMigration
from django.db import models
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
# Note: Don't use "from appname.models import ModelName".
# Use orm.ModelName to refer to models in this application,
# and orm['appname.ModelName'] for models in other applications.
ChannelDB = orm['comms.ChannelDB']
InterimChannel = orm['comms.InterimChannel']
Attribute = orm['typeclasses.Attribute']
Tag = orm['typeclasses.Tag']
for channel in ChannelDB.objects.all():
new_channel = InterimChannel(id=channel.id, db_key=channel.db_key,
db_lock_storage=channel.db_lock_storage)
new_channel.save()
desc = Attribute(db_key='desc', db_value=channel.db_desc)
desc.save()
keep_log = Attribute(db_key='keep_log',
db_value=channel.db_keep_log)
keep_log.save()
new_channel.db_attributes.add(desc)
new_channel.db_attributes.add(keep_log)
for name in [alias.strip() for alias in
channel.db_aliases.split(',')]:
tag = Tag(db_key=name, db_category='comm_alias')
tag.save()
new_channel.db_tags.add(tag)
new_channel.save()
def backwards(self, orm):
"Remove all InterimChannels."
orm['comms.InterimChannel'].objects.all().delete()
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'comms.channeldb': {
'Meta': {'object_name': 'ChannelDB'},
'db_aliases': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'db_desc': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
'db_keep_log': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.externalchannelconnection': {
'Meta': {'object_name': 'ExternalChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.ChannelDB']"}),
'db_external_config': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_external_key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'db_external_send_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_is_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.interimchannel': {
'Meta': {'ordering': "['-db_date_created', 'id', 'db_typeclass_path', 'db_key']", 'object_name': 'InterimChannel'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.msg': {
'Meta': {'object_name': 'Msg'},
'db_date_sent': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
'db_header': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_hide_from_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_channels_set'", 'null': 'True', 'to': u"orm['comms.ChannelDB']"}),
'db_hide_from_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_objects_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_hide_from_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_players_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_message': ('django.db.models.fields.TextField', [], {}),
'db_receivers_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'channel_set'", 'null': 'True', 'to': u"orm['comms.ChannelDB']"}),
'db_receivers_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_object_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_receivers_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_player_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_sender_external': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
'db_sender_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_object_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_sender_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_player_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.playerchannelconnection': {
'Meta': {'object_name': 'PlayerChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.ChannelDB']"}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'objects.objectdb': {
'Meta': {'object_name': 'ObjectDB'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destinations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_home': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'homes_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_location': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']", 'null': 'True', 'blank': 'True'}),
'db_sessid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'players.playerdb': {
'Meta': {'object_name': 'PlayerDB'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_is_connected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'typeclasses.attribute': {
'Meta': {'object_name': 'Attribute'},
'db_category': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_strvalue': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_value': ('src.utils.picklefield.PickledObjectField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'typeclasses.tag': {
'Meta': {'unique_together': "(('db_key', 'db_category'),)", 'object_name': 'Tag', 'index_together': "(('db_key', 'db_category'),)"},
'db_category': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'db_index': 'True'}),
'db_data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['comms']
symmetrical = True

View file

@ -0,0 +1,183 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Changing field 'ExternalChannelConnection.db_channel'
db.alter_column(u'comms_externalchannelconnection', 'db_channel_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['comms.InterimChannel']))
# Changing field 'PlayerChannelConnection.db_channel'
db.alter_column(u'comms_playerchannelconnection', 'db_channel_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['comms.InterimChannel']))
# Deleting model 'ChannelDB'
db.delete_table(u'comms_channeldb')
def backwards(self, orm):
# Adding model 'ChannelDB'
db.create_table(u'comms_channeldb', (
('db_desc', self.gf('django.db.models.fields.CharField')(max_length=80, null=True, blank=True)),
('db_aliases', self.gf('django.db.models.fields.CharField')(max_length=255)),
('db_lock_storage', self.gf('django.db.models.fields.TextField')(blank=True)),
('db_key', self.gf('django.db.models.fields.CharField')(max_length=255, unique=True, db_index=True)),
('db_keep_log', self.gf('django.db.models.fields.BooleanField')(default=True)),
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
))
db.send_create_signal(u'comms', ['ChannelDB'])
InterimChannel = orm['comms.InterimTable']
Attribute = orm['typeclasses.Attribute']
ChannelDB = orm['comms.ChannelDB']
for channel in InterimChannel.objects.all():
try:
desc = channel.db_attributes.objects.get(db_key='desc').db_value
except Attribute.DoesNotExist:
desc = ''
try:
keep_log = channel.db_attributes.objects.get(
db_key='keep_log').db_value
except Attribute.DoesNotExist:
keep_log = False
aliases = [alias.db_key for alias in
channel.db_tags.filter('comm_alias')]
aliases = ','.join(aliases)
new_channel = ChannelDB(db_desc=desc, db_keep_log=False, id=channel.id,
db_key=channel.db_key, db_lock_storage=channel.db_lock_storage,
db_aliases=aliases)
new_channel.save()
# Changing field 'ExternalChannelConnection.db_channel'
db.alter_column(u'comms_externalchannelconnection', 'db_channel_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['comms.ChannelDB']))
# Changing field 'PlayerChannelConnection.db_channel'
db.alter_column(u'comms_playerchannelconnection', 'db_channel_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['comms.ChannelDB']))
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'comms.externalchannelconnection': {
'Meta': {'object_name': 'ExternalChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.InterimChannel']"}),
'db_external_config': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_external_key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'db_external_send_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_is_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.interimchannel': {
'Meta': {'object_name': 'InterimChannel'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.msg': {
'Meta': {'object_name': 'Msg'},
'db_date_sent': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
'db_header': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_hide_from_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_channels_set'", 'null': 'True', 'to': u"orm['comms.InterimChannel']"}),
'db_hide_from_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_objects_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_hide_from_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_players_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_message': ('django.db.models.fields.TextField', [], {}),
'db_receivers_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'channel_set'", 'null': 'True', 'to': u"orm['comms.InterimChannel']"}),
'db_receivers_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_object_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_receivers_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_player_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_sender_external': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
'db_sender_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_object_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_sender_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_player_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.playerchannelconnection': {
'Meta': {'object_name': 'PlayerChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.InterimChannel']"}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'objects.objectdb': {
'Meta': {'object_name': 'ObjectDB'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destinations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_home': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'homes_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_location': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']", 'null': 'True', 'blank': 'True'}),
'db_sessid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'players.playerdb': {
'Meta': {'object_name': 'PlayerDB'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_is_connected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'typeclasses.attribute': {
'Meta': {'object_name': 'Attribute'},
'db_category': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_strvalue': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_value': ('src.utils.picklefield.PickledObjectField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'typeclasses.tag': {
'Meta': {'unique_together': "(('db_key', 'db_category'),)", 'object_name': 'Tag', 'index_together': "(('db_key', 'db_category'),)"},
'db_category': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'db_index': 'True'}),
'db_data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['comms']

View file

@ -0,0 +1,162 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import DataMigration
from django.db import models
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
# Note: Don't use "from appname.models import ModelName".
# Use orm.ModelName to refer to models in this application,
# and orm['appname.ModelName'] for models in other applications.
db.rename_table('comms_interimchannel', 'comms_channeldb')
db.rename_table('comms_interimchannel_db_attributes', 'comms_channeldb_db_attributes')
db.rename_table('comms_interimchannel_db_tags', 'comms_channeldb_db_tags')
db.rename_column('comms_channeldb_db_attributes', 'interimchannel_id', 'channeldb_id')
db.rename_column('comms_channeldb_db_tags', 'interimchannel_id', 'channeldb_id')
def backwards(self, orm):
"Write your backwards methods here."
db.rename_column('comms_channeldb_db_attributes', 'channeldb_id', 'interimchannel_id')
db.rename_column('comms_channeldb_db_tags', 'channeldb_id', 'interimchannel_id')
db.rename_table('comms_channeldb', 'comms_interimchannel')
db.rename_table('comms_channeldb_db_attributes', 'comms_interimchannel_db_attributes')
db.rename_table('comms_channeldb_db_tags', 'comms_interimchannel_db_tags')
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'comms.externalchannelconnection': {
'Meta': {'object_name': 'ExternalChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.ChannelDB']"}),
'db_external_config': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_external_key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'db_external_send_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_is_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.interimchannel': {
'Meta': {'object_name': 'InterimChannel'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.channeldb': {
'Meta': {'object_name': 'ChannelDB'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.msg': {
'Meta': {'object_name': 'Msg'},
'db_date_sent': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
'db_header': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_hide_from_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_channels_set'", 'null': 'True', 'to': u"orm['comms.ChannelDB']"}),
'db_hide_from_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_objects_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_hide_from_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hide_from_players_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_message': ('django.db.models.fields.TextField', [], {}),
'db_receivers_channels': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'channel_set'", 'null': 'True', 'to': u"orm['comms.ChannelDB']"}),
'db_receivers_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_object_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_receivers_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'receiver_player_set'", 'null': 'True', 'to': u"orm['players.PlayerDB']"}),
'db_sender_external': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
'db_sender_objects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_object_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_sender_players': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'sender_player_set'", 'null': 'True', 'db_index': 'True', 'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'comms.playerchannelconnection': {
'Meta': {'object_name': 'PlayerChannelConnection'},
'db_channel': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comms.ChannelDB']"}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'objects.objectdb': {
'Meta': {'object_name': 'ObjectDB'},
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destinations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_home': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'homes_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_location': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locations_set'", 'null': 'True', 'to': u"orm['objects.ObjectDB']"}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['players.PlayerDB']", 'null': 'True', 'blank': 'True'}),
'db_sessid': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'players.playerdb': {
'Meta': {'object_name': 'PlayerDB'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'db_attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Attribute']", 'null': 'True', 'symmetrical': 'False'}),
'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_is_connected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['typeclasses.Tag']", 'null': 'True', 'symmetrical': 'False'}),
'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'typeclasses.attribute': {
'Meta': {'object_name': 'Attribute'},
'db_category': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'db_strvalue': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_value': ('src.utils.picklefield.PickledObjectField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'typeclasses.tag': {
'Meta': {'unique_together': "(('db_key', 'db_category'),)", 'object_name': 'Tag', 'index_together': "(('db_key', 'db_category'),)"},
'db_category': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'db_index': 'True'}),
'db_data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'db_index': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['comms']
symmetrical = True

View file

@ -20,7 +20,9 @@ be able to delete connections on the fly).
""" """
from datetime import datetime from datetime import datetime
from django.conf import settings
from django.db import models from django.db import models
from src.typeclasses.models import TypedObject, TagHandler, AttributeHandler, AliasHandler
from src.utils.idmapper.models import SharedMemoryModel from src.utils.idmapper.models import SharedMemoryModel
from src.comms import managers from src.comms import managers
from src.comms.managers import identify_object from src.comms.managers import identify_object
@ -28,7 +30,11 @@ from src.locks.lockhandler import LockHandler
from src.utils import logger from src.utils import logger
from src.utils.utils import is_iter, to_str, crop, make_iter from src.utils.utils import is_iter, to_str, crop, make_iter
__all__ = ("Msg", "TempMsg", "Channel", "PlayerChannelConnection", "ExternalChannelConnection") __all__ = ("Msg", "TempMsg", "ChannelDB", "PlayerChannelConnection", "ExternalChannelConnection")
_GA = object.__getattribute__
_SA = object.__setattr__
_DA = object.__delattr__
#------------------------------------------------------------ #------------------------------------------------------------
# #
@ -72,7 +78,7 @@ class Msg(SharedMemoryModel):
# with channels below. # with channels below.
db_receivers_players = models.ManyToManyField('players.PlayerDB', related_name='receiver_player_set', null=True, help_text="player receivers") db_receivers_players = models.ManyToManyField('players.PlayerDB', related_name='receiver_player_set', null=True, help_text="player receivers")
db_receivers_objects = models.ManyToManyField('objects.ObjectDB', related_name='receiver_object_set', null=True, help_text="object receivers") db_receivers_objects = models.ManyToManyField('objects.ObjectDB', related_name='receiver_object_set', null=True, help_text="object receivers")
db_receivers_channels = models.ManyToManyField("Channel", related_name='channel_set', null=True, help_text="channel recievers") db_receivers_channels = models.ManyToManyField("ChannelDB", related_name='channel_set', null=True, help_text="channel recievers")
# header could be used for meta-info about the message if your system needs it, or as a separate # header could be used for meta-info about the message if your system needs it, or as a separate
# store for the mail subject line maybe. # store for the mail subject line maybe.
@ -88,7 +94,7 @@ class Msg(SharedMemoryModel):
# these can be used to filter/hide a given message from supplied objects/players/channels # these can be used to filter/hide a given message from supplied objects/players/channels
db_hide_from_players = models.ManyToManyField("players.PlayerDB", related_name='hide_from_players_set', null=True) db_hide_from_players = models.ManyToManyField("players.PlayerDB", related_name='hide_from_players_set', null=True)
db_hide_from_objects = models.ManyToManyField("objects.ObjectDB", related_name='hide_from_objects_set', null=True) db_hide_from_objects = models.ManyToManyField("objects.ObjectDB", related_name='hide_from_objects_set', null=True)
db_hide_from_channels = models.ManyToManyField("Channel", related_name='hide_from_channels_set', null=True) db_hide_from_channels = models.ManyToManyField("ChannelDB", related_name='hide_from_channels_set', null=True)
# Database manager # Database manager
objects = managers.MsgManager() objects = managers.MsgManager()
@ -201,7 +207,7 @@ class Msg(SharedMemoryModel):
#@channels.setter #@channels.setter
def __channels_set(self, value): def __channels_set(self, value):
"Setter. Allows for self.channels = value. Requires a channel to be added." "Setter. Allows for self.channels = value. Requires a channel to be added."
for val in (v for v in make_iter(value) if v): for val in (v.dbobj for v in make_iter(value) if v):
self.db_receivers_channels.add(val) self.db_receivers_channels.add(val)
#@channels.deleter #@channels.deleter
def __channels_del(self): def __channels_del(self):
@ -210,58 +216,6 @@ class Msg(SharedMemoryModel):
self.save() self.save()
channels = property(__channels_get, __channels_set, __channels_del) channels = property(__channels_get, __channels_set, __channels_del)
# header property (wraps db_header)
#@property
#def __header_get(self):
# "Getter. Allows for value = self.message"
# return self.db_header
##@message.setter
#def __header_set(self, value):
# "Setter. Allows for self.message = value"
# if value:
# self.db_header = value
# self.save()
##@message.deleter
#def __header_del(self):
# "Deleter. Allows for del self.message"
# self.db_header = ""
# self.save()
#header = property(__header_get, __header_set, __header_del)
## message property (wraps db_message)
##@property
#def __message_get(self):
# "Getter. Allows for value = self.message"
# return self.db_message
##@message.setter
#def __message_set(self, value):
# "Setter. Allows for self.message = value"
# self.db_message = value
# self.save()
##@message.deleter
#def __message_del(self):
# "Deleter. Allows for del self.message"
# self.db_message = ""
# self.save()
#message = property(__message_get, __message_set, __message_del)
## date_sent property (wraps db_date_sent)
##@property
#def __date_sent_get(self):
# "Getter. Allows for value = self.date_sent"
# return self.db_date_sent
##@date_sent.setter
#def __date_sent_set(self, value):
# "Setter. Allows for self.date_sent = value"
# raise Exception("You cannot edit date_sent!")
##@date_sent.deleter
#def __date_sent_del(self):
# "Deleter. Allows for del self.date_sent"
# raise Exception("You cannot delete the date_sent property!")
#date_sent = property(__date_sent_get, __date_sent_set, __date_sent_del)
# hide_from property
#@property
def __hide_from_get(self): def __hide_from_get(self):
"Getter. Allows for value = self.hide_from. Returns 3 lists of players, objects and channels" "Getter. Allows for value = self.hide_from. Returns 3 lists of players, objects and channels"
return self.db_hide_from_players.all(), self.db_hide_from_objects.all(), self.db_hide_from_channels.all() return self.db_hide_from_players.all(), self.db_hide_from_objects.all(), self.db_hide_from_channels.all()
@ -313,15 +267,6 @@ class Msg(SharedMemoryModel):
receivers = ",".join(["[%s]" % obj.key for obj in self.channels] + [obj.key for obj in self.receivers]) receivers = ",".join(["[%s]" % obj.key for obj in self.channels] + [obj.key for obj in self.receivers])
return "%s->%s: %s" % (senders, receivers, crop(self.message, width=40)) return "%s->%s: %s" % (senders, receivers, crop(self.message, width=40))
def access(self, accessing_obj, access_type='read', default=False):
"""
Determines if another object has permission to access.
accessing_obj - object trying to access this one
access_type - type of access sought
default - what to return if no lock of access_type was found
"""
return self.locks.check(accessing_obj, access_type=access_type, default=default)
#------------------------------------------------------------ #------------------------------------------------------------
# #
@ -375,14 +320,13 @@ class TempMsg(object):
"checks lock access" "checks lock access"
return self.locks.check(accessing_obj, access_type=access_type, default=default) return self.locks.check(accessing_obj, access_type=access_type, default=default)
#------------------------------------------------------------ #------------------------------------------------------------
# #
# Channel # Channel
# #
#------------------------------------------------------------ #------------------------------------------------------------
class Channel(SharedMemoryModel): class ChannelDB(TypedObject):
""" """
This is the basis of a comm channel, only implementing This is the basis of a comm channel, only implementing
the very basics of distributing messages. the very basics of distributing messages.
@ -396,132 +340,22 @@ class Channel(SharedMemoryModel):
""" """
#
# Channel database model setup
#
#
# These databse fields are all set using their corresponding properties,
# named same as the field, but withtout the db_* prefix.
# unique identifier for this channel
db_key = models.CharField('key', max_length=255, unique=True, db_index=True)
# optional description of channel
db_desc = models.CharField('description', max_length=80, blank=True, null=True)
# aliases for the channel. These are searched by cmdhandler
# as well to determine if a command is the name of a channel.
# Several aliases are separated by commas.
db_aliases = models.CharField('aliases', max_length=255)
# Whether this channel should remember its past messages
db_keep_log = models.BooleanField(default=True)
# Storage of lock definitions
db_lock_storage = models.TextField('locks', blank=True)
# Database manager # Database manager
objects = managers.ChannelManager() objects = managers.ChannelManager()
_typeclass_paths = settings.COMM_TYPECLASS_PATHS
_default_typeclass_path = settings.BASE_COMM_TYPECLASS or "src.comms.comms.Comm"
class Meta: class Meta:
"Define Django meta options" "Define Django meta options"
verbose_name = "Channel" verbose_name = "Channel"
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
SharedMemoryModel.__init__(self, *args, **kwargs) TypedObject.__init__(self, *args, **kwargs)
self.locks = LockHandler(self) _SA(self, "tags", TagHandler(self, category_prefix="comm_"))
_SA(self, "aliases", AliasHandler(self, category_prefix="comm_"))
_SA(self, "attributes", AttributeHandler(self))
# Wrapper properties to easily set database fields. These are
# @property decorators that allows to access these fields using
# normal python operations (without having to remember to save()
# etc). So e.g. a property 'attr' has a get/set/del decorator
# defined that allows the user to do self.attr = value,
# value = self.attr and del self.attr respectively (where self
# is the object in question).
# key property (wraps db_key)
#@property
#def key_get(self):
# "Getter. Allows for value = self.key"
# return self.db_key
##@key.setter
#def key_set(self, value):
# "Setter. Allows for self.key = value"
# self.db_key = value
# self.save()
##@key.deleter
#def key_del(self):
# "Deleter. Allows for del self.key"
# raise Exception("You cannot delete the channel key!")
#key = property(key_get, key_set, key_del)
# desc property (wraps db_desc)
#@property
#def desc_get(self):
# "Getter. Allows for value = self.desc"
# return self.db_desc
##@desc.setter
#def desc_set(self, value):
# "Setter. Allows for self.desc = value"
# self.db_desc = value
# self.save()
##@desc.deleter
#def desc_del(self):
# "Deleter. Allows for del self.desc"
# self.db_desc = ""
# self.save()
#desc = property(desc_get, desc_set, desc_del)
# aliases property
#@property
def aliases_get(self):
"Getter. Allows for value = self.aliases. Returns a list of aliases."
if self.db_aliases:
return [perm.strip() for perm in self.db_aliases.split(',')]
return []
#@aliases.setter
def aliases_set(self, value):
"Setter. Allows for self.aliases = value. Stores as a comma-separated string."
if is_iter(value):
value = ",".join([str(val).strip().lower() for val in value])
self.db_aliases = value
self.save()
#@aliases_del.deleter
def aliases_del(self):
"Deleter. Allows for del self.aliases"
self.db_aliases = ""
self.save()
aliases = property(aliases_get, aliases_set, aliases_del)
# keep_log property (wraps db_keep_log)
#@property
#def keep_log_get(self):
# "Getter. Allows for value = self.keep_log"
# return self.db_keep_log
##@keep_log.setter
#def keep_log_set(self, value):
# "Setter. Allows for self.keep_log = value"
# self.db_keep_log = value
# self.save()
##@keep_log.deleter
#def keep_log_del(self):
# "Deleter. Allows for del self.keep_log"
# self.db_keep_log = False
# self.save()
#keep_log = property(keep_log_get, keep_log_set, keep_log_del)
# lock_storage property (wraps db_lock_storage)
#@property
#def lock_storage_get(self):
# "Getter. Allows for value = self.lock_storage"
# return self.db_lock_storage
##@nick.setter
#def lock_storage_set(self, value):
# """Saves the lock_storagetodate. This is usually not called directly, but through self.lock()"""
# self.db_lock_storage = value
# self.save()
##@nick.deleter
#def lock_storage_del(self):
# "Deleter is disabled. Use the lockhandler.delete (self.lock.delete) instead"""
# logger.log_errmsg("Lock_Storage (on %s) cannot be deleted. Use obj.lock.delete() instead." % self)
#lock_storage = property(lock_storage_get, lock_storage_set, lock_storage_del)
class Meta: class Meta:
"Define Django meta options" "Define Django meta options"
@ -533,7 +367,7 @@ class Channel(SharedMemoryModel):
# #
def __str__(self): def __str__(self):
return "Channel '%s' (%s)" % (self.key, self.desc) return "Channel '%s' (%s)" % (self.key, self.typeclass.db.desc)
def has_connection(self, player): def has_connection(self, player):
""" """
@ -587,12 +421,12 @@ class Channel(SharedMemoryModel):
msg = msgobj.message msg = msgobj.message
# get all players connected to this channel and send to them # get all players connected to this channel and send to them
for conn in Channel.objects.get_all_connections(self, online=online): for conn in ChannelDB.objects.get_all_connections(self, online=online):
try: try:
conn.player.msg(msg, from_obj=senders) conn.player.msg(msg, from_obj=senders)
except AttributeError: except AttributeError:
try: try:
conn.to_external(msg, from_object=senders, from_channel=self) conn.to_external(msg, senders=senders, from_channel=self)
except Exception: except Exception:
logger.log_trace("Cannot send msg to connection '%s'" % conn) logger.log_trace("Cannot send msg to connection '%s'" % conn)
return True return True
@ -619,9 +453,9 @@ class Channel(SharedMemoryModel):
def delete(self): def delete(self):
"Clean out all connections to this channel and delete it." "Clean out all connections to this channel and delete it."
for connection in Channel.objects.get_all_connections(self): for connection in ChannelDB.objects.get_all_connections(self):
connection.delete() connection.delete()
super(Channel, self).delete() super(ChannelDB, self).delete()
def access(self, accessing_obj, access_type='listen', default=False): def access(self, accessing_obj, access_type='listen', default=False):
""" """
Determines if another object has permission to access. Determines if another object has permission to access.
@ -641,7 +475,7 @@ class PlayerChannelConnection(SharedMemoryModel):
# Player connected to a channel # Player connected to a channel
db_player = models.ForeignKey("players.PlayerDB", verbose_name='player') db_player = models.ForeignKey("players.PlayerDB", verbose_name='player')
# Channel the player is connected to # Channel the player is connected to
db_channel = models.ForeignKey(Channel, verbose_name='channel') db_channel = models.ForeignKey(ChannelDB, verbose_name='channel')
# Database manager # Database manager
objects = managers.PlayerChannelConnectionManager() objects = managers.PlayerChannelConnectionManager()
@ -666,11 +500,11 @@ class PlayerChannelConnection(SharedMemoryModel):
#@property #@property
def channel_get(self): def channel_get(self):
"Getter. Allows for value = self.channel" "Getter. Allows for value = self.channel"
return self.db_channel return self.db_channel.typeclass
#@channel.setter #@channel.setter
def channel_set(self, value): def channel_set(self, value):
"Setter. Allows for self.channel = value" "Setter. Allows for self.channel = value"
self.db_channel = value self.db_channel = value.dbobj
self.save() self.save()
#@channel.deleter #@channel.deleter
def channel_del(self): def channel_del(self):
@ -694,7 +528,7 @@ class ExternalChannelConnection(SharedMemoryModel):
that connection. that connection.
""" """
# evennia channel connecting to # evennia channel connecting to
db_channel = models.ForeignKey(Channel, verbose_name='channel', db_channel = models.ForeignKey(ChannelDB, verbose_name='channel',
help_text='which channel this connection is tied to.') help_text='which channel this connection is tied to.')
# external connection identifier # external connection identifier
db_external_key = models.CharField('external key', max_length=128, db_external_key = models.CharField('external key', max_length=128,

View file

@ -9,13 +9,13 @@ to the channel whenever the feed updates.
import re import re
from twisted.internet import task from twisted.internet import task
from django.conf import settings from django.conf import settings
from src.comms.models import ExternalChannelConnection, Channel from src.comms.models import ExternalChannelConnection, ChannelDB
from src.utils import logger, utils from src.utils import logger, utils
from src.scripts.models import ScriptDB from src.scripts.models import ScriptDB
RSS_ENABLED = settings.RSS_ENABLED RSS_ENABLED = settings.RSS_ENABLED
RSS_UPDATE_INTERVAL = settings.RSS_UPDATE_INTERVAL RSS_UPDATE_INTERVAL = settings.RSS_UPDATE_INTERVAL
INFOCHANNEL = Channel.objects.channel_search(settings.CHANNEL_MUDINFO[0]) INFOCHANNEL = ChannelDB.objects.channel_search(settings.CHANNEL_MUDINFO[0])
RETAG = re.compile(r'<[^>]*?>') RETAG = re.compile(r'<[^>]*?>')
# holds rss readers they can be shut down at will. # holds rss readers they can be shut down at will.
@ -102,8 +102,8 @@ def create_connection(channel, url, interval):
""" """
This will create a new RSS->channel connection This will create a new RSS->channel connection
""" """
if not type(channel) == Channel: if not type(channel) == ChannelDB:
new_channel = Channel.objects.filter(db_key=channel) new_channel = ChannelDB.objects.filter(db_key=channel)
if not new_channel: if not new_channel:
logger.log_errmsg("Cannot attach RSS->Evennia: Evennia Channel '%s' not found." % channel) logger.log_errmsg("Cannot attach RSS->Evennia: Evennia Channel '%s' not found." % channel)
return False return False

View file

@ -14,7 +14,7 @@ instead for most things).
import datetime import datetime
from django.conf import settings from django.conf import settings
from src.typeclasses.typeclass import TypeClass from src.typeclasses.typeclass import TypeClass
from src.comms.models import Channel from src.comms.models import ChannelDB
from src.utils import logger from src.utils import logger
__all__ = ("Player",) __all__ = ("Player",)
@ -303,7 +303,7 @@ class Player(TypeClass):
global _CONNECT_CHANNEL global _CONNECT_CHANNEL
if not _CONNECT_CHANNEL: if not _CONNECT_CHANNEL:
try: try:
_CONNECT_CHANNEL = Channel.objects.filter(db_key=settings.CHANNEL_CONNECTINFO[0])[0] _CONNECT_CHANNEL = ChannelDB.objects.filter(db_key=settings.CHANNEL_CONNECTINFO[0])[0]
except Exception: except Exception:
logger.log_trace() logger.log_trace()
now = datetime.datetime.now() now = datetime.datetime.now()

View file

@ -278,11 +278,9 @@ def handle_setup(last_step):
for profile in PlayerDB.objects.all(): for profile in PlayerDB.objects.all():
profile.delete() profile.delete()
elif last_step + num == 3: elif last_step + num == 3:
from src.comms.models import Channel, PlayerChannelConnection from src.comms.models import ChannelDB, PlayerChannelConnection
for chan in Channel.objects.all(): ChannelDB.objects.all().delete()
chan.delete() PlayerChannelConnection.objects.all().delete()
for conn in PlayerChannelConnection.objects.all():
conn.delete()
raise raise
ServerConfig.objects.conf("last_initial_setup_step", last_step + num + 1) ServerConfig.objects.conf("last_initial_setup_step", last_step + num + 1)
# We got through the entire list. Set last_step to -1 so we don't # We got through the entire list. Set last_step to -1 so we don't

View file

@ -11,7 +11,7 @@ import time
from datetime import datetime from datetime import datetime
from django.conf import settings from django.conf import settings
from src.scripts.models import ScriptDB from src.scripts.models import ScriptDB
from src.comms.models import Channel from src.comms.models import ChannelDB
from src.utils import logger, utils from src.utils import logger, utils
from src.utils.utils import make_iter, to_str from src.utils.utils import make_iter, to_str
from src.commands import cmdhandler, cmdsethandler from src.commands import cmdhandler, cmdsethandler
@ -143,7 +143,7 @@ class ServerSession(Session):
if channel: if channel:
try: try:
cchan = settings.CHANNEL_CONNECTINFO cchan = settings.CHANNEL_CONNECTINFO
cchan = Channel.objects.get_channel(cchan[0]) cchan = ChannelDB.objects.get_channel(cchan[0])
cchan.msg("[%s]: %s" % (cchan.key, message)) cchan.msg("[%s]: %s" % (cchan.key, message))
except Exception: except Exception:
pass pass

View file

@ -239,6 +239,7 @@ SERVER_SESSION_CLASS = "src.server.serversession.ServerSession"
OBJECT_TYPECLASS_PATHS = ["game.gamesrc.objects", "game.gamesrc.objects.examples", "contrib"] OBJECT_TYPECLASS_PATHS = ["game.gamesrc.objects", "game.gamesrc.objects.examples", "contrib"]
SCRIPT_TYPECLASS_PATHS = ["game.gamesrc.scripts", "game.gamesrc.scripts.examples", "contrib"] SCRIPT_TYPECLASS_PATHS = ["game.gamesrc.scripts", "game.gamesrc.scripts.examples", "contrib"]
PLAYER_TYPECLASS_PATHS = ["game.gamesrc.objects", "contrib"] PLAYER_TYPECLASS_PATHS = ["game.gamesrc.objects", "contrib"]
COMM_TYPECLASS_PATHS = ["game.gamesrc.objects", "contrib"]
# Typeclass for player objects (linked to a character) (fallback) # Typeclass for player objects (linked to a character) (fallback)
BASE_PLAYER_TYPECLASS = "src.players.player.Player" BASE_PLAYER_TYPECLASS = "src.players.player.Player"
@ -250,6 +251,8 @@ BASE_CHARACTER_TYPECLASS = "src.objects.objects.Character"
BASE_ROOM_TYPECLASS = "src.objects.objects.Room" BASE_ROOM_TYPECLASS = "src.objects.objects.Room"
# Typeclass for Exit objects (fallback). # Typeclass for Exit objects (fallback).
BASE_EXIT_TYPECLASS = "src.objects.objects.Exit" BASE_EXIT_TYPECLASS = "src.objects.objects.Exit"
# Typeclass for Comms (fallback).
BASE_COMM_TYPECLASS = "src.comms.comms.Comm"
# Typeclass for Scripts (fallback). You usually don't need to change this # Typeclass for Scripts (fallback). You usually don't need to change this
# but create custom variations of scripts on a per-case basis instead. # but create custom variations of scripts on a per-case basis instead.
BASE_SCRIPT_TYPECLASS = "src.scripts.scripts.DoNothing" BASE_SCRIPT_TYPECLASS = "src.scripts.scripts.DoNothing"

View file

@ -170,7 +170,7 @@ def returns_typeclass_list(method):
def func(self, *args, **kwargs): def func(self, *args, **kwargs):
"decorator. Returns a list." "decorator. Returns a list."
self.__doc__ = method.__doc__ self.__doc__ = method.__doc__
matches = method(self, *args, **kwargs) matches = make_iter(method(self, *args, **kwargs))
return [(hasattr(dbobj, "typeclass") and dbobj.typeclass) or dbobj for dbobj in make_iter(matches)] return [(hasattr(dbobj, "typeclass") and dbobj.typeclass) or dbobj for dbobj in make_iter(matches)]
return update_wrapper(func, method) return update_wrapper(func, method)

View file

@ -38,7 +38,7 @@ _Msg = None
_Player = None _Player = None
_PlayerDB = None _PlayerDB = None
_to_object = None _to_object = None
_Channel = None _ChannelDB = None
_channelhandler = None _channelhandler = None
@ -344,7 +344,8 @@ def create_message(senderobj, message, channels=None,
message = create_message message = create_message
def create_channel(key, aliases=None, desc=None, def create_channel(key, aliases=None, desc=None,
locks=None, keep_log=True): locks=None, keep_log=True,
typeclass=None):
""" """
Create A communication Channel. A Channel serves as a central Create A communication Channel. A Channel serves as a central
hub for distributing Msgs to groups of people without hub for distributing Msgs to groups of people without
@ -357,20 +358,24 @@ def create_channel(key, aliases=None, desc=None,
aliases - list of alternative (likely shorter) keynames. aliases - list of alternative (likely shorter) keynames.
locks - lock string definitions locks - lock string definitions
""" """
global _Channel, _channelhandler global _ChannelDB, _channelhandler
if not _Channel: if not _ChannelDB:
from src.comms.models import Channel as _Channel from src.comms.models import ChannelDB as _ChannelDB
if not _channelhandler: if not _channelhandler:
from src.comms import channelhandler as _channelhandler from src.comms import channelhandler as _channelhandler
if not typeclass:
typeclass = settings.BASE_COMM_TYPECLASS
try: try:
new_channel = _Channel() new_channel = _ChannelDB(typeclass=typeclass, db_key=key)
new_channel.key = key new_channel.save()
new_channel = new_channel.typeclass
if aliases: if aliases:
if not utils.is_iter(aliases): if not utils.is_iter(aliases):
aliases = [aliases] aliases = [aliases]
new_channel.aliases = ",".join([alias for alias in aliases]) new_channel.aliases.add(aliases)
new_channel.desc = desc new_channel.save()
new_channel.keep_log = keep_log new_channel.db.desc = desc
new_channel.db.keep_log = keep_log
except IntegrityError: except IntegrityError:
string = "Could not add channel: key '%s' already exists." % key string = "Could not add channel: key '%s' already exists." % key
logger.log_errmsg(string) logger.log_errmsg(string)

View file

@ -38,7 +38,7 @@ ObjectDB = ContentType.objects.get(app_label="objects", model="objectdb").model_
PlayerDB = ContentType.objects.get(app_label="players", model="playerdb").model_class() PlayerDB = ContentType.objects.get(app_label="players", model="playerdb").model_class()
ScriptDB = ContentType.objects.get(app_label="scripts", model="scriptdb").model_class() ScriptDB = ContentType.objects.get(app_label="scripts", model="scriptdb").model_class()
Msg = ContentType.objects.get(app_label="comms", model="msg").model_class() Msg = ContentType.objects.get(app_label="comms", model="msg").model_class()
Channel = ContentType.objects.get(app_label="comms", model="channel").model_class() Channel = ContentType.objects.get(app_label="comms", model="channeldb").model_class()
HelpEntry = ContentType.objects.get(app_label="help", model="helpentry").model_class() HelpEntry = ContentType.objects.get(app_label="help", model="helpentry").model_class()
# #