Implement lexicon-create
This commit is contained in:
parent
01c5df1e5d
commit
3122379da1
@ -1,16 +1,27 @@
|
||||
from cli.helpers import add_argument, no_argument, requires
|
||||
from cli.helpers import (
|
||||
add_argument, no_argument, requires,
|
||||
config_get, config_set, CONFIG_GET_ROOT_VALUE)
|
||||
|
||||
#
|
||||
# CRUD commands
|
||||
#
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@add_argument("--name", required=True, help="Name of the lexicon")
|
||||
@add_argument("--editor", required=True, help="Name of the user who will be editor")
|
||||
def command_create(args):
|
||||
"""
|
||||
Create a lexicon
|
||||
|
||||
A newly created lexicon is not open for joining and requires additional
|
||||
configuration before it is playable. The editor should ensure that all
|
||||
settings are as desired before opening the lexicon for player joins.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
from lexicon.manage import create_lexicon
|
||||
import user
|
||||
# TODO verify args
|
||||
uid = user.uid_from_username(args.editor)
|
||||
u = user.user_from_uid(uid)
|
||||
create_lexicon(args.name, u)
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@ -18,14 +29,14 @@ def command_delete(args):
|
||||
"""
|
||||
Delete a lexicon and all its data
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
@no_argument
|
||||
def command_list(args):
|
||||
"""
|
||||
List all lexicons and their statuses
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@ -33,7 +44,7 @@ def command_config(args):
|
||||
"""
|
||||
Interact with a lexicon's config
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
#
|
||||
# Player/character commands
|
||||
@ -45,7 +56,7 @@ def command_player_add(args):
|
||||
"""
|
||||
Add a player to a lexicon
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@ -56,7 +67,7 @@ def command_player_remove(args):
|
||||
Removing a player dissociates them from any characters
|
||||
they control but does not delete any character data.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@ -64,7 +75,7 @@ def command_player_list(args):
|
||||
"""
|
||||
List all players in a lexicon
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@ -72,7 +83,7 @@ def command_char_create(args):
|
||||
"""
|
||||
Create a character for a lexicon
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@ -83,7 +94,7 @@ def command_char_delete(args):
|
||||
Deleting a character dissociates them from any content
|
||||
they have contributed rather than deleting it.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
@no_argument
|
||||
@requires("lexicon")
|
||||
@ -91,7 +102,7 @@ def command_char_list(args):
|
||||
"""
|
||||
List all characters in a lexicon
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
||||
|
||||
#
|
||||
# Procedural commands
|
||||
@ -106,4 +117,4 @@ def command_publish_turn(args):
|
||||
Ability to publish is checked against the lexicon's
|
||||
turn publish policy unless --force is specified.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError() # TODO
|
38
amanuensis/lexicon/manage.py
Normal file
38
amanuensis/lexicon/manage.py
Normal file
@ -0,0 +1,38 @@
|
||||
import os
|
||||
import time
|
||||
import uuid
|
||||
|
||||
import config
|
||||
import lexicon
|
||||
import resources
|
||||
|
||||
def create_lexicon(name, editor):
|
||||
"""
|
||||
"""
|
||||
# Create the lexicon directory and initialize it with a blank lexicon
|
||||
lid = uuid.uuid4().hex
|
||||
lex_dir = config.prepend("lexicon", lid)
|
||||
os.mkdir(lex_dir)
|
||||
with resources.get_stream("lexicon.json") as s:
|
||||
with open(config.prepend(lex_dir, 'config.json'), 'wb') as f:
|
||||
f.write(s.read())
|
||||
|
||||
# Fill out the new lexicon
|
||||
with config.json_rw(lex_dir, 'config.json') as cfg:
|
||||
cfg['lid'] = lid
|
||||
cfg['name'] = name
|
||||
cfg['editor'] = editor.uid
|
||||
cfg['time']['created'] = int(time.time())
|
||||
|
||||
# Update the index with the new lexicon
|
||||
with config.json_rw('lexicon', 'index.json') as index:
|
||||
index[name] = lid
|
||||
|
||||
# Load the Lexicon and log creation
|
||||
l = lexicon.LexiconModel(lid)
|
||||
l.log("Lexicon created")
|
||||
|
||||
config.logger.info("Created Lexicon {0.name}, ed. {1.displayname} ({0.id})".format(
|
||||
l, editor))
|
||||
|
||||
return l
|
Loading…
Reference in New Issue
Block a user