Remove more dead code
This commit is contained in:
parent
c14959e6e6
commit
23d9b1b221
|
@ -1,32 +0,0 @@
|
|||
from .admin import (
|
||||
valid_name,
|
||||
create_lexicon,
|
||||
load_all_lexicons)
|
||||
from .gameloop import (
|
||||
get_player_characters,
|
||||
get_player_drafts,
|
||||
get_draft,
|
||||
title_constraint_analysis,
|
||||
content_constraint_analysis,
|
||||
sort_by_index_spec,
|
||||
attempt_publish)
|
||||
from .setup import (
|
||||
player_can_join_lexicon,
|
||||
add_player_to_lexicon,
|
||||
create_character_in_lexicon)
|
||||
|
||||
__all__ = [member.__name__ for member in [
|
||||
valid_name,
|
||||
create_lexicon,
|
||||
load_all_lexicons,
|
||||
get_player_characters,
|
||||
get_player_drafts,
|
||||
get_draft,
|
||||
title_constraint_analysis,
|
||||
content_constraint_analysis,
|
||||
sort_by_index_spec,
|
||||
attempt_publish,
|
||||
player_can_join_lexicon,
|
||||
add_player_to_lexicon,
|
||||
create_character_in_lexicon,
|
||||
]]
|
|
@ -99,54 +99,6 @@ class HtmlRenderer(RenderableVisitor):
|
|||
return f'<a href="{link}"{link_class}>{"".join(span.recurse(self))}</a>'
|
||||
|
||||
|
||||
def get_player_characters(
|
||||
lexicon: LexiconModel,
|
||||
uid: str) -> Iterable[ReadOnlyOrderedDict]:
|
||||
"""
|
||||
Returns each character in the lexicon owned by the given player
|
||||
"""
|
||||
for character in lexicon.cfg.character.values():
|
||||
if character.player == uid:
|
||||
yield character
|
||||
|
||||
|
||||
def get_player_drafts(
|
||||
lexicon: LexiconModel,
|
||||
uid: str) -> Iterable[ReadOnlyOrderedDict]:
|
||||
"""
|
||||
Returns each draft in the lexicon by a character owned by the
|
||||
given player.
|
||||
"""
|
||||
characters = list(get_player_characters(lexicon, uid))
|
||||
drafts: List[Any] = []
|
||||
for filename in lexicon.ctx.draft.ls():
|
||||
for character in characters:
|
||||
if filename.startswith(character.cid):
|
||||
drafts.append(filename)
|
||||
break
|
||||
for i in range(len(drafts)):
|
||||
with lexicon.ctx.draft.read(drafts[i]) as draft:
|
||||
drafts[i] = draft
|
||||
return drafts
|
||||
|
||||
|
||||
def get_draft(
|
||||
lexicon: LexiconModel,
|
||||
aid: str) -> Optional[ReadOnlyOrderedDict]:
|
||||
"""
|
||||
Loads an article from its id
|
||||
"""
|
||||
article_fn = None
|
||||
for filename in lexicon.ctx.draft.ls():
|
||||
if filename.endswith(f'{aid}.json'):
|
||||
article_fn = filename
|
||||
break
|
||||
if not article_fn:
|
||||
return None
|
||||
with lexicon.ctx.draft.read(article_fn) as article:
|
||||
return article
|
||||
|
||||
|
||||
def title_constraint_analysis(
|
||||
lexicon: LexiconModel,
|
||||
player: UserModel,
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
# """
|
||||
# Functions for managing lexicons, primarily within the context of the
|
||||
# Amanuensis config directory.
|
||||
# """
|
||||
# import json
|
||||
# import os
|
||||
# import re
|
||||
# import shutil
|
||||
# import time
|
||||
# import uuid
|
||||
|
||||
# from amanuensis.config import prepend, json_rw, json_ro, logger
|
||||
# from amanuensis.config.loader import AttrOrderedDict
|
||||
# from amanuensis.errors import ArgumentError
|
||||
# from amanuensis.lexicon import LexiconModel
|
||||
# from amanuensis.parser import parse_raw_markdown, filesafe_title, titlesort
|
||||
# from amanuensis.resources import get_stream
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# def delete_lexicon(lex, purge=False):
|
||||
# """
|
||||
# Deletes the given lexicon from the internal configuration
|
||||
|
||||
# Does not delete the lexicon from the data folder unless purge=True.
|
||||
# """
|
||||
# # Verify arguments
|
||||
# if lex is None:
|
||||
# raise ArgumentError("Invalid lexicon: '{}'".format(lex))
|
||||
|
||||
# # Delete the lexicon from the index
|
||||
# with json_rw('lexicon', 'index.json') as index:
|
||||
# if lex.name in index:
|
||||
# del index[lex.name]
|
||||
|
||||
# # Delete the lexicon data folder if purging
|
||||
# if purge:
|
||||
# raise NotImplementedError()
|
||||
|
||||
# # Delete the lexicon config
|
||||
# lex_path = prepend('lexicon', lex.id)
|
||||
# shutil.rmtree(lex_path)
|
||||
|
||||
|
||||
# def get_user_lexicons(user):
|
||||
# """
|
||||
# Loads each lexicon that the given user is a player in
|
||||
# """
|
||||
# return [
|
||||
# lexicon
|
||||
# for lexicon in get_all_lexicons()
|
||||
# if user.in_lexicon(lexicon)]
|
||||
|
||||
|
||||
# def remove_player(lex, player):
|
||||
# """
|
||||
# Remove a player from a lexicon
|
||||
# """
|
||||
# # Verify arguments
|
||||
# if lex is None:
|
||||
# raise ArgumentError("Invalid lexicon: '{}'".format(lex))
|
||||
# if player is None:
|
||||
# raise ArgumentError("Invalid player: '{}'".format(player))
|
||||
# if lex.editor == player.id:
|
||||
# raise ArgumentError(
|
||||
# "Can't remove the editor '{}' from lexicon '{}'".format(
|
||||
# player.username, lex.name))
|
||||
|
||||
# # Idempotently remove player
|
||||
# with json_rw(lex.config_path) as cfg:
|
||||
# if player.id in cfg.join.joined:
|
||||
# cfg.join.joined.remove(player.id)
|
||||
|
||||
# # TODO Reassign the player's characters to the editor
|
||||
|
||||
|
||||
# def delete_character(lex, charname):
|
||||
# """
|
||||
# Delete a character from a lexicon
|
||||
# """
|
||||
# # Verify arguments
|
||||
# if lex is None:
|
||||
# raise ArgumentError("Invalid lexicon: '{}'".format(lex))
|
||||
# if charname is None:
|
||||
# raise ArgumentError("Invalid character name: '{}'".format(charname))
|
||||
|
||||
# # Find character in this lexicon
|
||||
# matches = [
|
||||
# char for cid, char in lex.character.items()
|
||||
# if char.name == charname]
|
||||
# if len(matches) != 1:
|
||||
# raise ArgumentError(matches)
|
||||
# char = matches[0]
|
||||
|
||||
# # Remove character from character list
|
||||
# with json_rw(lex.config_path) as cfg:
|
||||
# del cfg.character[char.cid]
|
|
@ -1,81 +0,0 @@
|
|||
"""
|
||||
Submodule of functions for managing lexicon games during the setup and
|
||||
joining part of the game lifecycle.
|
||||
"""
|
||||
import json
|
||||
import uuid
|
||||
|
||||
from amanuensis.config import AttrOrderedDict
|
||||
from amanuensis.errors import ArgumentError
|
||||
from amanuensis.models import LexiconModel, UserModel
|
||||
from amanuensis.resources import get_stream
|
||||
|
||||
|
||||
def player_can_create_character(
|
||||
player: UserModel,
|
||||
lexicon: LexiconModel,
|
||||
name: str) -> bool:
|
||||
"""
|
||||
Checks whether a player can create a character with the given name
|
||||
"""
|
||||
# Trivial failures
|
||||
if not player or not lexicon or not name:
|
||||
return False
|
||||
# User needs to be a player
|
||||
if player.uid not in lexicon.cfg.join.joined:
|
||||
return False
|
||||
# Character can't be a dupe
|
||||
if any([
|
||||
char.name for char in lexicon.cfg.character.values()
|
||||
if char.name == name]):
|
||||
return False
|
||||
# Player can't add more characters than the limit
|
||||
if len([
|
||||
char for char in lexicon.cfg.character.values()
|
||||
if char.player == player.uid]) > lexicon.cfg.join.chars_per_player:
|
||||
return False
|
||||
# Players can't add characters after the game has started
|
||||
if lexicon.cfg.turn.current:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def create_character_in_lexicon(
|
||||
player: UserModel,
|
||||
lexicon: LexiconModel,
|
||||
name: str) -> str:
|
||||
"""
|
||||
Unconditionally creates a character for a player
|
||||
"""
|
||||
# Verify arguments
|
||||
if lexicon is None:
|
||||
raise ArgumentError(f'Invalid lexicon: {lexicon}')
|
||||
if player is None:
|
||||
raise ArgumentError(f'Invalid player: {player}')
|
||||
if player.uid not in lexicon.cfg.join.joined:
|
||||
raise ArgumentError(f'Player {player} not in lexicon {lexicon}')
|
||||
if not name:
|
||||
raise ArgumentError(f'Invalid character name: "{name}"')
|
||||
if any([
|
||||
char.name for char in lexicon.cfg.character.values()
|
||||
if char.name == name]):
|
||||
raise ArgumentError(f'Duplicate character name: "{name}"')
|
||||
|
||||
# Load the character template
|
||||
with get_stream('character.json') as template:
|
||||
character = json.load(template, object_pairs_hook=AttrOrderedDict)
|
||||
|
||||
# Fill out the character's information
|
||||
character.cid = uuid.uuid4().hex
|
||||
character.name = name
|
||||
character.player = player.uid
|
||||
character.signature = "~" + character.name
|
||||
|
||||
# Add the character to the lexicon
|
||||
with lexicon.ctx.edit_config() as cfg:
|
||||
cfg.character.new(character.cid, character)
|
||||
|
||||
# Log addition
|
||||
lexicon.log(f'Character "{name}" created ({character.cid})')
|
||||
|
||||
return character.cid
|
|
@ -1,33 +0,0 @@
|
|||
from flask import current_app
|
||||
from wtforms.validators import ValidationError
|
||||
|
||||
from amanuensis.config import RootConfigDirectoryContext
|
||||
|
||||
|
||||
# Custom validators
|
||||
def User(should_exist: bool = True):
|
||||
template: str = 'User "{{}}" {}'.format(
|
||||
"not found" if should_exist else "already exists")
|
||||
should_exist_copy: bool = bool(should_exist)
|
||||
|
||||
def validate_user(form, field):
|
||||
root: RootConfigDirectoryContext = current_app.config['root']
|
||||
with root.user.read_index() as index:
|
||||
if (field.data in index.keys()) != should_exist_copy:
|
||||
raise ValidationError(template.format(field.data))
|
||||
|
||||
return validate_user
|
||||
|
||||
|
||||
def Lexicon(should_exist: bool = True):
|
||||
template: str = 'Lexicon "{{}}" {}'.format(
|
||||
"not found" if should_exist else "already exists")
|
||||
should_exist_copy: bool = bool(should_exist)
|
||||
|
||||
def validate_lexicon(form, field):
|
||||
root: RootConfigDirectoryContext = current_app.config['root']
|
||||
with root.lexicon.read_index() as index:
|
||||
if (field.data in index.keys()) != should_exist_copy:
|
||||
raise ValidationError(template.format(field.data))
|
||||
|
||||
return validate_lexicon
|
|
@ -6,25 +6,6 @@ from wtforms.validators import DataRequired
|
|||
from .settings import ConfigFormBase
|
||||
|
||||
|
||||
class LexiconCharacterForm(FlaskForm):
|
||||
"""/lexicon/<name>/session/character/"""
|
||||
characterName = StringField(
|
||||
'Character name',
|
||||
validators=[DataRequired()])
|
||||
defaultSignature = TextAreaField('Default signature')
|
||||
submit = SubmitField('Submit')
|
||||
|
||||
def for_new(self):
|
||||
self.characterName.data = ""
|
||||
self.defaultSignature.data = "~"
|
||||
return self
|
||||
|
||||
def for_character(self, character):
|
||||
self.characterName.data = character.name
|
||||
self.defaultSignature.data = character.signature
|
||||
return self
|
||||
|
||||
|
||||
class LexiconReviewForm(FlaskForm):
|
||||
"""/lexicon/<name>/session/review/"""
|
||||
APPROVED = 'Y'
|
||||
|
|
Loading…
Reference in New Issue