evennia.scripts.manager

The custom manager for Scripts.

class evennia.scripts.manager.ScriptManager(*args, **kwargs)[source]

Bases: ScriptDBManager, TypeclassManager

class evennia.scripts.manager.ScriptDBManager(*args, **kwargs)[source]

Bases: TypedObjectManager

This Scriptmanager implements methods for searching and manipulating Scripts directly from the database.

Evennia-specific search methods (will return Typeclasses or lists of Typeclasses, whereas Django-general methods will return Querysets or database objects).

dbref (converter) dbref_search get_dbref_range object_totals typeclass_search get_all_scripts_on_obj get_all_scripts delete_script remove_non_persistent validate script_search (equivalent to evennia.search_script) copy_script

get_all_scripts_on_obj(obj, key=None)[source]

Find all Scripts related to a particular object.

Parameters:
  • obj (Object) – Object whose Scripts we are looking for.

  • key (str, optional) – Script identifier - can be given as a dbref or name string. If given, only scripts matching the key on the object will be returned.

Returns:

matches (list) – Matching scripts.

get_all_scripts(key=None)[source]

Get all scripts in the database.

Parameters:

key (str or int, optional) – Restrict result to only those with matching key or dbref.

Returns:

scripts (list) – All scripts found, or those matching key.

delete_script(dbref)[source]

This stops and deletes a specific script directly from the script database.

Parameters:

dbref (int) – Database unique id.

Notes

This might be needed for global scripts not tied to a specific game object

update_scripts_after_server_start()[source]

Update/sync/restart/delete scripts after server shutdown/restart.

search_script(ostring, obj=None, only_timed=False, typeclass=None)[source]

Search for a particular script.

Parameters:
  • ostring (str) – Search criterion - a script dbef or key.

  • obj (Object, optional) – Limit search to scripts defined on this object

  • only_timed (bool) – Limit search only to scripts that run on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

Returns:

Queryset – An iterable with 0, 1 or more results.

Search for a particular script.

Parameters:
  • ostring (str) – Search criterion - a script dbef or key.

  • obj (Object, optional) – Limit search to scripts defined on this object

  • only_timed (bool) – Limit search only to scripts that run on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

Returns:

Queryset – An iterable with 0, 1 or more results.

copy_script(original_script, new_key=None, new_obj=None, new_locks=None)[source]

Make an identical copy of the original_script.

Parameters:
  • original_script (Script) – The Script to copy.

  • new_key (str, optional) – Rename the copy.

  • new_obj (Object, optional) – Place copy on different Object.

  • new_locks (str, optional) – Give copy different locks from the original.

Returns:

script_copy (Script)

A new Script instance, copied from

the original.

create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)[source]

Create a new script. All scripts are a combination of a database object that communicates with the database, and an typeclass that ‘decorates’ the database object into being different types of scripts. It’s behaviour is similar to the game objects except scripts has a time component and are more limited in scope.

Keyword Arguments:
  • typeclass (class or str) – Class or python path to a typeclass.

  • key (str) – Name of the new object. If not set, a name of #dbref will be set.

  • obj (Object) – The entity on which this Script sits. If this is None, we are creating a “global” script.

  • account (Account) – The account on which this Script sits. It is exclusiv to obj.

  • locks (str) – one or more lockstrings, separated by semicolons.

  • interval (int) – The triggering interval for this Script, in seconds. If unset, the Script will not have a timing component.

  • start_delay (bool) – If True, will wait interval seconds before triggering the first time.

  • repeats (int) – The number of times to trigger before stopping. If unset, will repeat indefinitely.

  • persistent (bool) – If this Script survives a server shutdown or not (all Scripts will survive a reload).

  • autostart (bool) – If this Script will start immediately when created or if the start method must be called explicitly.

  • report_to (Object) – The object to return error messages to.

  • desc (str) – Optional description of script

  • tags (list) – List of tags or tuples (tag, category).

  • attributes (list) – List if tuples (key, value) or (key, value, category) (key, value, lockstring) or (key, value, lockstring, default_access).

Returns:

script (obj) – An instance of the script created

See evennia.scripts.manager for methods to manipulate existing scripts in the database.

class evennia.scripts.manager.Q(*args, _connector=None, _negated=False, **kwargs)[source]

Bases: Node

Encapsulate filters as objects that can then be combined logically (using & and |).

AND = 'AND'
OR = 'OR'
XOR = 'XOR'
__init__(*args, _connector=None, _negated=False, **kwargs)[source]

Construct a new Node. If no connector is given, use the default.

check(against, using='default')[source]

Do a database query to check if the expressions of the Q instance matches against the expressions.

conditional = True
deconstruct()[source]
default = 'AND'
flatten()[source]

Recursively yield this Q object and all subexpressions, in depth-first order.

identity
referenced_base_fields

Retrieve all base fields referenced directly or through F expressions excluding any fields referenced through joins.

replace_expressions(replacements)[source]
resolve_expression(query=None, allow_joins=True, reuse=None, summarize=False, for_save=False)[source]
class evennia.scripts.manager.TypeclassManager(*args, **kwargs)[source]

Bases: TypedObjectManager

Manager for the typeclasses. The main purpose of this manager is to limit database queries to the given typeclass despite all typeclasses technically being defined in the same core database model.

all()[source]

Overload method to return all matches, filtering for typeclass.

Returns:

objects (queryset) – The objects found.

all_family()[source]

Return all matches, allowing matches from all subclasses of the typeclass.

Returns:

objects (list) – The objects found.

annotate(*args, **kwargs)[source]

Overload annotate method to filter on typeclass before annotating. :param *args: Positional arguments passed along to queryset annotate method. :type *args: any :param **kwargs: Keyword arguments passed along to queryset annotate method. :type **kwargs: any

Returns:

Annotated queryset.

count()[source]

Overload method to return number of matches, filtering for typeclass.

Returns:

integer – Number of objects found.

filter(*args, **kwargs)[source]

Overload of the standard filter function. This filter will limit itself to only the current typeclass.

Parameters:

args (any) – These are passed on as arguments to the default django filter method.

Keyword Arguments:

kwargs (any) – These are passed on as normal arguments to the default django filter method.

Returns:

objects (queryset) – The objects found.

filter_family(*args, **kwargs)[source]

Variation of filter that allows results both from typeclass and from subclasses of typeclass

Parameters:

args (any) – These are passed on as arguments to the default django filter method.

Keyword Arguments:

kwargs (any) – These are passed on as normal arguments to the default django filter method.

Returns:

objects (list) – The objects found.

first()[source]

Overload method to return first match, filtering for typeclass.

Returns:

object (object) – The object found.

Raises:

ObjectNotFound – The exact name of this exception depends on the model base used.

get(*args, **kwargs)[source]

Overload the standard get. This will limit itself to only return the current typeclass.

Parameters:

args (any) – These are passed on as arguments to the default django get method.

Keyword Arguments:

kwargs (any) – These are passed on as normal arguments to the default django get method

Returns:

object (object) – The object found.

Raises:

ObjectNotFound – The exact name of this exception depends on the model base used.

get_family(*args, **kwargs)[source]

Variation of get that not only returns the current typeclass but also all subclasses of that typeclass.

Keyword Arguments:

kwargs (any) – These are passed on as normal arguments to the default django get method.

Returns:

objects (list) – The objects found.

Raises:

ObjectNotFound – The exact name of this exception depends on the model base used.

last()[source]

Overload method to return last match, filtering for typeclass.

Returns:

object (object) – The object found.

Raises:

ObjectNotFound – The exact name of this exception depends on the model base used.

Search by supplying a string with optional extra search criteria to aid the query.

Parameters:
  • query (All three can be combined in the same) – A search criteria that accepts extra search criteria on the following

  • forms – [key|alias|#dbref…] [tag==<tagstr>[:category]…] [attr==<key>:<value>:category…]

  • query

  • spaces. (separated by)

Returns:

matches (queryset)

A queryset result matching all queries exactly. If wanting to use

spaces or ==, != in tags or attributes, enclose them in quotes.

Example

house = smart_search(“key=foo alias=bar tag=house:building tag=magic attr=color:red”)

Note

The flexibility of this method is limited by the input line format. Tag/attribute matching only works for matching primitives. For even more complex queries, such as ‘in’ operations or object field matching, use the full django query language.

values(*args, **kwargs)[source]

Overload values method to filter on typeclass first. :param *args: Positional arguments passed along to values method. :type *args: any :param **kwargs: Keyword arguments passed along to values method. :type **kwargs: any

Returns:

Queryset of values dictionaries, just filtered by typeclass first.

values_list(*args, **kwargs)[source]

Overload values method to filter on typeclass first. :param *args: Positional arguments passed along to values_list method. :type *args: any :param **kwargs: Keyword arguments passed along to values_list method. :type **kwargs: any

Returns:

Queryset of value_list tuples, just filtered by typeclass first.

class evennia.scripts.manager.TypedObjectManager(*args, **kwargs)[source]

Bases: SharedMemoryManager

Common ObjectManager for all dbobjects.

create_tag(key=None, category=None, data=None, tagtype=None)[source]

Create a new Tag of the base type associated with this object. This makes sure to create case-insensitive tags. If the exact same tag configuration (key+category+tagtype+dbmodel) exists on the model, a new tag will not be created, but an old one returned.

Parameters:
  • key (str, optional) – Tag key. Not case sensitive.

  • category (str, optional) – Tag category. Not case sensitive.

  • data (str, optional) – Extra information about the tag.

  • tagtype (str or None, optional) – ‘type’ of Tag, by default this is either None (a normal Tag), alias or permission.

Notes

The data field is not part of the uniqueness of the tag: Setting data on an existing tag will overwrite the old data field. It is intended only as a way to carry information about the tag (like a help text), not to carry any information about the tagged objects themselves.

dbref(dbref, reqhash=True)[source]

Determing if input is a valid dbref.

Parameters:
  • dbref (str or int) – A possible dbref.

  • reqhash (bool, optional) – If the “#” is required for this to be considered a valid hash.

Returns:

dbref (int or None) – The integer part of the dbref.

Notes

Valid forms of dbref (database reference number) are either a string ‘#N’ or an integer N.

Alias to get_id.

Parameters:

dbref (str or int) – The id to search for.

Returns:

Queryset – Queryset with 0 or 1 match.

get_alias(key=None, category=None, obj=None)[source]

Get an alias from the database.

Parameters:
  • key (str, optional) – The permission’s identifier.

  • category (str, optional) – The permission’s category.

  • obj (object, optional) – The object on which this Tag is set.

Returns:

alias (list) – Alias objects.

get_attribute(key=None, category=None, value=None, strvalue=None, obj=None, attrtype=None, **kwargs)[source]

Return Attribute objects by key, by category, by value, by strvalue, by object (it is stored on) or with a combination of those criteria.

Parameters:
  • key (str, optional) – The attribute’s key to search for

  • category (str, optional) – The category of the attribute(s) to search for.

  • value (str, optional) – The attribute value to search for. Note that this is not a very efficient operation since it will query for a pickled entity. Mutually exclusive to strvalue.

  • strvalue (str, optional) – The str-value to search for. Most Attributes will not have strvalue set. This is mutually exclusive to the value keyword and will take precedence if given.

  • obj (Object, optional) – On which object the Attribute to search for is.

  • attrype (str, optional) – An attribute-type to search for. By default this is either None (normal Attributes) or “nick”.

  • **kwargs (any) – Currently unused. Reserved for future use.

Returns:

list – The matching Attributes.

get_by_alias(key=None, category=None)[source]

Return objects having aliases with a given key or category or combination of the two.

Parameters:
  • key (str, optional) – Alias key. Not case sensitive.

  • category (str, optional) – Alias category. Not case sensitive.

Returns:

objects (list) – Objects with matching alias.

get_by_attribute(key=None, category=None, value=None, strvalue=None, attrtype=None, **kwargs)[source]

Return objects having attributes with the given key, category, value, strvalue or combination of those criteria.

Parameters:
  • key (str, optional) – The attribute’s key to search for

  • category (str, optional) – The category of the attribute to search for.

  • value (str, optional) – The attribute value to search for. Note that this is not a very efficient operation since it will query for a pickled entity. Mutually exclusive to strvalue.

  • strvalue (str, optional) – The str-value to search for. Most Attributes will not have strvalue set. This is mutually exclusive to the value keyword and will take precedence if given.

  • attrype (str, optional) – An attribute-type to search for. By default this is either None (normal Attributes) or “nick”.

  • kwargs (any) – Currently unused. Reserved for future use.

Returns:

obj (list) – Objects having the matching Attributes.

get_by_nick(key=None, nick=None, category='inputline')[source]

Get object based on its key or nick.

Parameters:
  • key (str, optional) – The attribute’s key to search for

  • nick (str, optional) – The nickname to search for

  • category (str, optional) – The category of the nick to search for.

Returns:

obj (list) – Objects having the matching Nicks.

get_by_permission(key=None, category=None)[source]

Return objects having permissions with a given key or category or combination of the two.

Parameters:
  • key (str, optional) – Permissions key. Not case sensitive.

  • category (str, optional) – Permission category. Not case sensitive.

Returns:

objects (list) – Objects with matching permission.

get_by_tag(key=None, category=None, tagtype=None, **kwargs)[source]

Return objects having tags with a given key or category or combination of the two. Also accepts multiple tags/category/tagtype

Parameters:
  • key (str or list, optional) – Tag key or list of keys. Not case sensitive.

  • category (str or list, optional) – Tag category. Not case sensitive. If key is a list, a single category can either apply to all keys in that list or this must be a list matching the key list element by element. If no key is given, all objects with tags of this category are returned.

  • tagtype (str, optional) – ‘type’ of Tag, by default this is either None (a normal Tag), alias or permission. This always apply to all queried tags.

Keyword Arguments:

match (str) – “all” (default) or “any”; determines whether the target object must be tagged with ALL of the provided tags/categories or ANY single one. ANY will perform a weighted sort, so objects with more tag matches will outrank those with fewer tag matches.

Returns:

objects (list) – Objects with matching tag.

Raises:

IndexError – If key and category are both lists and category is shorter than key.

get_dbref_range(min_dbref=None, max_dbref=None)[source]

Get objects within a certain range of dbrefs.

Parameters:
  • min_dbref (int) – Start of dbref range.

  • max_dbref (int) – End of dbref range (inclusive)

Returns:

objects (list)

TypedObjects with dbrefs within

the given dbref ranges.

get_id(dbref)[source]

Find object with given dbref.

Parameters:

dbref (str or int) – The id to search for.

Returns:

object (TypedObject) – The matched object.

get_nick(key=None, category=None, value=None, strvalue=None, obj=None)[source]

Get a nick, in parallel to get_attribute.

Parameters:
  • key (str, optional) – The nicks’s key to search for

  • category (str, optional) – The category of the nicks(s) to search for.

  • value (str, optional) – The attribute value to search for. Note that this is not a very efficient operation since it will query for a pickled entity. Mutually exclusive to strvalue.

  • strvalue (str, optional) – The str-value to search for. Most Attributes will not have strvalue set. This is mutually exclusive to the value keyword and will take precedence if given.

  • obj (Object, optional) – On which object the Attribute to search for is.

Returns:

nicks (list) – The matching Nicks.

get_permission(key=None, category=None, obj=None)[source]

Get a permission from the database.

Parameters:
  • key (str, optional) – The permission’s identifier.

  • category (str, optional) – The permission’s category.

  • obj (object, optional) – The object on which this Tag is set.

Returns:

permission (list) – Permission objects.

get_tag(key=None, category=None, obj=None, tagtype=None, global_search=False)[source]

Return Tag objects by key, by category, by object (it is stored on) or with a combination of those criteria.

Parameters:
  • key (str, optional) – The Tag’s key to search for

  • category (str, optional) – The Tag of the attribute(s) to search for.

  • obj (Object, optional) – On which object the Tag to search for is.

  • tagtype (str, optional) – One of None (normal tags), “alias” or “permission”

  • global_search (bool, optional) – Include all possible tags, not just tags on this object

Returns:

tag (list) – The matching Tags.

get_typeclass_totals(*args, **kwargs) object[source]

Returns a queryset of typeclass composition statistics.

Returns:

qs (Queryset)

A queryset of dicts containing the typeclass (name),

the count of objects with that typeclass and a float representing the percentage of objects associated with the typeclass.

object_totals()[source]

Get info about database statistics.

Returns:

census (dict)

A dictionary {typeclass_path: number, …} with

all the typeclasses active in-game as well as the number of such objects defined (i.e. the number of database object having that typeclass set on themselves).

search_dbref(dbref)

Alias to get_id.

Parameters:

dbref (str or int) – The id to search for.

Returns:

Queryset – Queryset with 0 or 1 match.

Searches through all objects returning those which are of the specified typeclass.

Parameters:
  • typeclass (str or class) – A typeclass class or a python path to a typeclass.

  • include_children (bool, optional) – Return objects with given typeclass and all children inheriting from this typeclass. Mutually exclusive to include_parents.

  • include_parents (bool, optional) – Return objects with given typeclass and all parents to this typeclass. Mutually exclusive to include_children.

Returns:

objects (list) – The objects found with the given typeclasses.

Raises:

ImportError – If the provided typeclass is not a valid typeclass or the path to an existing typeclass.

evennia.scripts.manager.class_from_module(path, defaultpaths=None, fallback=None)[source]

Return a class from a module, given the class’ full python path. This is primarily used to convert db_typeclass_path:s to classes.

Parameters:
  • path (str) – Full Python dot-path to module.

  • defaultpaths (iterable, optional) – If a direct import from path fails, try subsequent imports by prepending those paths to path.

  • fallback (str) – If all other attempts fail, use this path as a fallback. This is intended as a last-resort. In the example of Evennia loading, this would be a path to a default parent class in the evennia repo itself.

Returns:

class (Class) – An uninstantiated class recovered from path.

Raises:

ImportError – If all loading failed.

evennia.scripts.manager.dbid_to_obj(inp, objclass, raise_errors=True)

Convert a #dbref to a valid object.

Parameters:
  • inp (str or int) – A valid #dbref.

  • objclass (class) – A valid django model to filter against.

  • raise_errors (bool, optional) – Whether to raise errors or return None on errors.

Returns:

obj (Object or None) – An entity loaded from the dbref.

Raises:

Exception – If raise_errors is True and objclass.objects.get(id=dbref) did not return a valid object.

evennia.scripts.manager.make_iter(obj)[source]

Makes sure that the object is always iterable.

Parameters:

obj (any) – Object to make iterable.

Returns:

iterable (list or iterable)

The same object

passed-through or made iterable.