One needs to turn off all imports of typeclasses in __init__ or django will create migrations for them. This might be interesting for the future but not for development.

This commit is contained in:
Griatch 2014-12-23 11:53:32 +01:00
parent 749715a193
commit 969b947ba0
8 changed files with 50 additions and 45 deletions

4
ev.py
View file

@ -100,7 +100,7 @@ from src.help.models import HelpEntry
from src.typeclasses.models import Attribute
# players
from src.players.player import Player
from src.players.player import DefaultPlayer
from src.players.models import PlayerDB
# commands
@ -119,7 +119,7 @@ from src.comms.models import Msg, ChannelDB
from src.comms.comms import Channel
# objects
from src.objects.objects import Object, Character, Room, Exit
from src.objects.objects import DefaultObject, DefaultCharacter, DefaultRoom, DefaultExit
# utils

View file

@ -843,3 +843,4 @@ class ObjectDB(TypedObject):
# Perform the deletion of the object
super(ObjectDB, self).delete()
return True

View file

@ -33,7 +33,7 @@ _DA = object.__delattr__
# Base class to inherit from.
#
class Object(ObjectDB):
class DefaultObject(ObjectDB):
"""
This is the base class for all in-game objects. Inherit from this
to create different types of objects in the game.
@ -194,7 +194,7 @@ class Object(ObjectDB):
this object speaks
"""
super(Object, self).__init__(*args, **kwargs)
super(DefaultObject, self).__init__(*args, **kwargs)
## methods inherited from the database object (overload them here)
@ -268,7 +268,7 @@ class Object(ObjectDB):
if searchdata.lower() in ("me", "self",):
return self
return super(Object, self).search(searchdata,
return super(DefaultObject, self).search(searchdata,
global_search=global_search,
use_nicks=use_nicks,
typeclass=typeclass,
@ -305,7 +305,7 @@ class Object(ObjectDB):
# searchdata is a string; wrap some common self-references
if searchdata.lower() in ("me", "self",):
return self.player
return super(Object, self).search_player(searchdata, quiet=quiet)
return super(DefaultObject, self).search_player(searchdata, quiet=quiet)
def execute_cmd(self, raw_string, sessid=None, **kwargs):
"""
@ -333,7 +333,7 @@ class Object(ObjectDB):
useful for coders intending to implement some sort of nested
command structure.
"""
return super(Object, self).execute_cmd(raw_string, sessid=sessid, **kwargs)
return super(DefaultObject, self).execute_cmd(raw_string, sessid=sessid, **kwargs)
def msg(self, text=None, from_obj=None, sessid=None, **kwargs):
"""
@ -347,7 +347,7 @@ class Object(ObjectDB):
default to self.sessid or from_obj.sessid.
"""
super(Object, self).msg(text=text, from_obj=from_obj, sessid=sessid, **kwargs)
super(DefaultObject, self).msg(text=text, from_obj=from_obj, sessid=sessid, **kwargs)
def msg_contents(self, text=None, exclude=None, from_obj=None, **kwargs):
"""
@ -356,7 +356,7 @@ class Object(ObjectDB):
exclude is a list of objects not to send to. See self.msg() for
more info.
"""
super(Object, self).msg_contents(text, exclude=exclude,
super(DefaultObject, self).msg_contents(text, exclude=exclude,
from_obj=from_obj, **kwargs)
def move_to(self, destination, quiet=False,
@ -387,7 +387,7 @@ class Object(ObjectDB):
emit_to_obj.
"""
return super(Object, self).move_to(destination, quiet=quiet,
return super(DefaultObject, self).move_to(destination, quiet=quiet,
emit_to_obj=emit_to_obj,
use_destination=use_destination)
@ -400,9 +400,9 @@ class Object(ObjectDB):
new_key (string) - new key/name of copied object. If new_key is not
specified, the copy will be named
<old_key>_copy by default.
Returns: Object (copy of this one)
Returns: DefaultObject (copy of this one)
"""
return super(Object, self).copy(new_key=new_key)
return super(DefaultObject, self).copy(new_key=new_key)
def delete(self):
"""
@ -415,7 +415,7 @@ class Object(ObjectDB):
were errors during deletion or deletion otherwise
failed.
"""
return super(Object, self).delete()
return super(DefaultObject, self).delete()
# methods inherited from the typeclass system
@ -434,7 +434,7 @@ class Object(ObjectDB):
Returns: Boolean
"""
return super(Object, self).is_typeclass(typeclass, exact=exact)
return super(DefaultObject, self).is_typeclass(typeclass, exact=exact)
def swap_typeclass(self, new_typeclass, clean_attributes=False, no_default=True):
"""
@ -470,7 +470,7 @@ class Object(ObjectDB):
"""
return super(Object, self).swap_typeclass(new_typeclass,
return super(DefaultObject, self).swap_typeclass(new_typeclass,
clean_attributes=clean_attributes, no_default=no_default)
def access(self, accessing_obj, access_type='read', default=False, **kwargs):
@ -483,7 +483,7 @@ class Object(ObjectDB):
default (bool) - what to return if no lock of access_type was found
**kwargs - passed to at_access hook along with result,accessing_obj and access_type
"""
result = super(Object, self).access(accessing_obj, access_type=access_type, default=default)
result = super(DefaultObject, self).access(accessing_obj, access_type=access_type, default=default)
self.at_access(result, accessing_obj, access_type, **kwargs)
return result
@ -504,7 +504,7 @@ class Object(ObjectDB):
permission on the object.
(example: 'Builders')
"""
return super(Object, self).check_permstring(permstring)
return super(DefaultObject, self).check_permstring(permstring)
def __eq__(self, other):
"""
@ -901,11 +901,12 @@ class Object(ObjectDB):
"""
return message
#
# Base Character object
#
class Character(Object):
class DefaultCharacter(DefaultObject):
"""
This is just like the Object except it implements its own
version of the at_object_creation to set up the script
@ -921,7 +922,7 @@ class Character(Object):
you want to fundamentally change how a Character object works).
"""
super(Character, self).basetype_setup()
super(DefaultCharacter, self).basetype_setup()
self.locks.add(";".join(["get:false()", # noone can pick up the character
"call:false()"])) # no commands can be called on character from outside
# add the default cmdset
@ -982,7 +983,7 @@ class Character(Object):
# Base Room object
#
class Room(Object):
class DefaultRoom(DefaultObject):
"""
This is the base room object. It's just like any Object except its
location is None.
@ -993,7 +994,7 @@ class Room(Object):
(since default is None anyway)
"""
super(Room, self).basetype_setup()
super(DefaultRoom, self).basetype_setup()
self.locks.add(";".join(["get:false()",
"puppet:false()"])) # would be weird to puppet a room ...
self.location = None
@ -1003,7 +1004,7 @@ class Room(Object):
# Base Exit object
#
class Exit(Object):
class DefaultExit(DefaultObject):
"""
This is the base exit object - it connects a location to another.
This is done by the exit assigning a "command" on itself with the
@ -1079,7 +1080,7 @@ class Exit(Object):
You should normally not need to overload this - if you do make sure you
include all the functionality in this method.
"""
super(Exit, self).basetype_setup()
super(DefaultExit, self).basetype_setup()
# setting default locks (overload these in at_object_creation()
self.locks.add(";".join(["puppet:false()", # would be weird to puppet an exit ...

View file

@ -24,7 +24,7 @@ _MULTISESSION_MODE = settings.MULTISESSION_MODE
_CMDSET_PLAYER = settings.CMDSET_PLAYER
_CONNECT_CHANNEL = None
class Player(PlayerDB):
class DefaultPlayer(PlayerDB):
"""
Base typeclass for all Players.
"""
@ -105,7 +105,7 @@ class Player(PlayerDB):
at_server_shutdown()
"""
super(Player, self).__init__(*args, **kwargs)
super(DefaultPlayer, self).__init__(*args, **kwargs)
## methods inherited from database model
@ -116,7 +116,7 @@ class Player(PlayerDB):
the server.
text (string) - text data to send
from_obj (Object/Player) - source object of message to send
from_obj (Object/DefaultPlayer) - source object of message to send
sessid - the session id of the session to send to. If not given,
return to all sessions connected to this player. This is usually only
relevant when using msg() directly from a player-command (from
@ -124,7 +124,7 @@ class Player(PlayerDB):
handles the sessid).
kwargs - extra data to send through protocol
"""
super(Player, self).msg(text=text, from_obj=from_obj, sessid=sessid, **kwargs)
super(DefaultPlayer, self).msg(text=text, from_obj=from_obj, sessid=sessid, **kwargs)
def swap_character(self, new_character, delete_old_character=False):
"""
@ -135,7 +135,7 @@ class Player(PlayerDB):
Returns: True/False depending on if swap suceeded or not.
"""
return super(Player, self).swap_character(new_character, delete_old_character=delete_old_character)
return super(DefaultPlayer, self).swap_character(new_character, delete_old_character=delete_old_character)
def execute_cmd(self, raw_string, sessid=None, **kwargs):
"""
@ -163,7 +163,7 @@ class Player(PlayerDB):
be useful for coders intending to implement some sort of nested
command structure.
"""
return super(Player, self).execute_cmd(raw_string, sessid=sessid, **kwargs)
return super(DefaultPlayer, self).execute_cmd(raw_string, sessid=sessid, **kwargs)
def search(self, searchdata, return_puppet=False, **kwargs):
"""
@ -183,7 +183,7 @@ class Player(PlayerDB):
# handle wrapping of common terms
if searchdata.lower() in ("me", "*me", "self", "*self",):
return self
return super(Player, self).search(searchdata, return_puppet=return_puppet, **kwargs)
return super(DefaultPlayer, self).search(searchdata, return_puppet=return_puppet, **kwargs)
def is_typeclass(self, typeclass, exact=False):
"""
@ -200,7 +200,7 @@ class Player(PlayerDB):
Returns: Boolean
"""
return super(Player, self).is_typeclass(typeclass, exact=exact)
return super(DefaultPlayer, self).is_typeclass(typeclass, exact=exact)
def swap_typeclass(self, new_typeclass, clean_attributes=False, no_default=True):
"""
@ -235,7 +235,7 @@ class Player(PlayerDB):
boolean True/False depending on if the swap worked or not.
"""
super(Player, self).swap_typeclass(new_typeclass,
super(DefaultPlayer, self).swap_typeclass(new_typeclass,
clean_attributes=clean_attributes, no_default=no_default)
def access(self, accessing_obj, access_type='read', default=False, **kwargs):
@ -248,7 +248,7 @@ class Player(PlayerDB):
default (bool) - what to return if no lock of access_type was found
**kwargs - passed to the at_access hook along with the result.
"""
result = super(Player, self).access(accessing_obj, access_type=access_type, default=default)
result = super(DefaultPlayer, self).access(accessing_obj, access_type=access_type, default=default)
self.at_access(result, accessing_obj, access_type, **kwargs)
return result
@ -261,7 +261,7 @@ class Player(PlayerDB):
on the object. (example: 'Builders')
Note that this method does -not- call the at_access hook.
"""
return super(Player, self).check_permstring(permstring)
return super(DefaultPlayer, self).check_permstring(permstring)
## player hooks
@ -431,7 +431,7 @@ class Player(PlayerDB):
"""
pass
class Guest(Player):
class Guest(DefaultPlayer):
"""
This class is used for guest logins. Unlike Players, Guests and their
characters are deleted after disconnection.

View file

@ -7,7 +7,9 @@ Also, the initiated object manager is available as src.scripts.manager.
"""
from src.scripts.scripts import *
# Note - we MUST NOT import src.scripts.scripts here, or
# proxy models will fall under Django migrations.
#from src.scripts.scripts import *
from src.scripts.models import ScriptDB
manager = ScriptDB.objects

View file

@ -345,7 +345,6 @@ class ScriptBase(ScriptDB):
"called when typeclass re-caches. Usually not used for scripts."
pass
#
# Base Script - inherit from this
#

View file

@ -288,17 +288,17 @@ PLAYER_TYPECLASS_PATHS = ["game.gamesrc.objects", "contrib"]
CHANNEL_TYPECLASS_PATHS = ["game.gamesrc.conf", "contrib"]
# Typeclass for player objects (linked to a character) (fallback)
BASE_PLAYER_TYPECLASS = "src.players.player.Player"
BASE_PLAYER_TYPECLASS = "src.players.player.DefaultPlayer"
# Typeclass and base for all objects (fallback)
BASE_OBJECT_TYPECLASS = "src.objects.objects.Object"
BASE_OBJECT_TYPECLASS = "src.objects.objects.DefaultObject"
# Typeclass for character objects linked to a player (fallback)
BASE_CHARACTER_TYPECLASS = "src.objects.objects.Character"
BASE_CHARACTER_TYPECLASS = "src.objects.objects.DefaultCharacter"
# Typeclass for rooms (fallback)
BASE_ROOM_TYPECLASS = "src.objects.objects.Room"
BASE_ROOM_TYPECLASS = "src.objects.objects.DefaultRoom"
# Typeclass for Exit objects (fallback).
BASE_EXIT_TYPECLASS = "src.objects.objects.Exit"
BASE_EXIT_TYPECLASS = "src.objects.objects.DefaultExit"
# Typeclass for Channel (fallback).
BASE_CHANNEL_TYPECLASS = "src.comms.comms.Channel"
BASE_CHANNEL_TYPECLASS = "src.comms.comms.DefaultChannel"
# Typeclass for Scripts (fallback). You usually don't need to change this
# but create custom variations of scripts on a per-case basis instead.
BASE_SCRIPT_TYPECLASS = "src.scripts.scripts.DoNothing"

View file

@ -780,7 +780,6 @@ class TypeclassBase(SharedMemoryModelBase):
proxy = True
attrs["Meta"] = Meta
attrs["Meta"].proxy = True
attrs["Meta"].app_label = attrs["path"]
# patch start - django multi-inheritance
# this is a copy of django.db.models.base.__new__
@ -1086,7 +1085,10 @@ class TypedObject(SharedMemoryModel):
def _import_class(self, path):
path, clsname = path.rsplit(".", 1)
mod = import_module(path)
return getattr(mod, clsname)
try:
return getattr(mod, clsname)
except AttributeError:
raise AttributeError("module '%s' has no attribute '%s'" % (path, clsname))
def __init__(self, *args, **kwargs):
typeclass_path = kwargs.pop("typeclass", None)