From 6187faf20384b0c5a4966343b2d4ca47f8b11e45 Mon Sep 17 00:00:00 2001 From: Philip Paquette Date: Wed, 26 Sep 2018 07:48:55 -0400 Subject: Release v1.0.0 - Diplomacy Game Engine - AGPL v3+ License --- diplomacy/utils/strings.py | 236 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 diplomacy/utils/strings.py (limited to 'diplomacy/utils/strings.py') diff --git a/diplomacy/utils/strings.py b/diplomacy/utils/strings.py new file mode 100644 index 0000000..2a74a03 --- /dev/null +++ b/diplomacy/utils/strings.py @@ -0,0 +1,236 @@ +# ============================================================================== +# Copyright (C) 2019 - Philip Paquette, Steven Bocco +# +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU Affero General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. +# +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . +# ============================================================================== +""" Some strings frequently used (to help prevent typos). """ + +ABBREV = 'abbrev' +ACTIVE = 'active' +ADJUST = 'adjust' +ADMIN = 'admin' +ADMINISTRATORS = 'administrators' +ALL_POSSIBLE_ORDERS = 'all_possible_orders' +ALLOCATE_COUNTRIES_RANDOMLY = 'allocate_countries_randomly' +ALLOW_MULTIPLE_COUNTRIES_PER_PLAYER = 'allow_multiple_countries_per_player' +ALLOW_NEW_PLAYERS_AFTER_START = 'allow_new_players_after_start' +ALLOW_OBSERVATIONS = 'allow_observations' +ALLOW_REGISTRATIONS = 'allow_registrations' +ALLOWED_VOTERS = 'allowed_voters' +ALWAYS_OMNISCIENT = 'always_omniscient' +AUTHENTICATION_TYPE = 'authentication_type' +AVAILABLE_MAPS = 'available_maps' +BACKUP_DELAY_SECONDS = 'backup_delay_seconds' +BODY = 'body' +BUFFER_SIZE = 'buffer_size' +CANCELED = 'canceled' +CENTERS = 'centers' +CHANNEL = 'channel' +CIVIL_DISORDER = 'civil_disorder' +CLEAR_INVALID_STATE_HISTORY = 'clear_invalid_state_history' +COMPLETED = 'completed' +CONTENT = 'content' +CONTROLLED_POWERS = 'controlled_powers' +CONTROLLER = 'controller' +COUNT_EXPECTED = 'count_expected' +COUNT_VOTED = 'count_voted' +CREATE_USER = 'create_user' +CURRENT_ORDER = 'current_order' +CURRENT_PHASE = 'current_phase' +CURRENT_PHASE_DATA = 'current_phase_data' +CURRENT_STATE = 'current_state' +CURRENT_TURN = 'current_turn' +DATA = 'data' +DEADLINE = 'deadline' +DEMOTE = 'demote' +DESC = 'desc' +DESIRED_COUNTRIES = 'desired_countries' +DUMMY = 'dummy' +DUMMY_PLAYER = 'dummy_player' +DUMMY_POWERS = 'dummy_powers' +ERROR = 'error' +FOR_OMNISCIENCE = 'for_omniscience' +FORCED = 'forced' +FORCED_ORDERS = 'forced_orders' +FORCED_WAIT_FLAG = 'forced_wait_flag' +FORMING = 'forming' +FROM_PHASE = 'from_phase' +FROM_TIMESTAMP = 'from_timestamp' +GAME = 'game' +GAME_ID = 'game_id' +GAME_PHASE = 'game_phase' +GAME_ROLE = 'game_role' +GAME_STARTED = 'game_started' +GAMES = 'games' +GLOBAL_MESSAGE_HISTORY = 'global_message_history' +GRADE = 'grade' +GRADE_UPDATE = 'grade_update' +HASHED = 'hashed' +HOMES = 'homes' +INCLUDE_PROTECTED = 'include_protected' +INFLUENCE = 'influence' +INITIAL_STATE = 'initial_state' +IS_DUMMY = 'is_dummy' +KICK_PLAYER = 'kick_player' +MAP_NAME = 'map_name' +MAP_POWERS = 'map_powers' +MAPS = 'maps' +MAPS_MTIME = 'maps_mtime' +MASTER_TYPE = 'master_type' +MAX_GAMES = 'max_games' +MESSAGE = 'message' +MESSAGE_HISTORY = 'message_history' +MESSAGES = 'messages' +META_RULES = 'meta_rules' +MODERATOR = 'moderator' +MODERATOR_USERNAMES = 'moderator_usernames' +MODERATORS = 'moderators' +N_CONTROLS = 'n_controls' +N_PLAYERS = 'n_players' +NAME = 'name' +NEUTRAL = 'neutral' +NO = 'no' +NO_RULES = 'no_rules' +NO_WAIT = 'no_wait' +NOTE = 'note' +NOTIFICATION = 'notification' +NOTIFICATION_ID = 'notification_id' +OBSERVER = 'observer' +OBSERVER_LEVEL = 'observer_level' +OBSERVER_NAME = 'observer_name' +OBSERVER_TYPE = 'observer_type' +OK = 'ok' +OMNISCIENT = 'omniscient' +OMNISCIENT_TYPE = 'omniscient_type' +OMNISCIENT_USERNAMES = 'omniscient_usernames' +ORDER = 'order' +ORDER_HISTORY = 'order_history' +ORDER_IS_SET = 'order_is_set' +ORDER_STATUS = 'order_status' +ORDERABLE_LOCATIONS = 'orderable_locations' +ORDERS = 'orders' +ORDERS_FINALIZED = 'orders_finalized' +ORDERS_STATUSES = 'orders_statuses' +OTHER_PLAYERS = 'other_players' +OUTCOME = 'outcome' +PARAMETERS = 'parameters' +PASSWORD = 'password' +PASSWORD_HASH = 'password_hash' +PAUSED = 'paused' +PHASE = 'phase' +PHASE_ABBR = 'phase_abbr' +PHASE_DATA = 'phase_data' +PHASE_DATA_TYPE = 'phase_data_type' +PING_SECONDS = 'ping_seconds' +PLAYER_ID = 'player_id' +PLAYERS = 'players' +POSSIBLE_ORDERS = 'possible_orders' +POWER = 'power' +POWER_FROM = 'power_from' +POWER_MESSAGE_HISTORY = 'power_message_history' +POWER_NAME = 'power_name' +POWER_NAMES = 'power_names' +POWER_NAMES_AGAINST = 'power_names_against' +POWER_NAMES_IN_FAVOUR = 'power_names_in_favour' +POWER_NAMES_NEUTRAL = 'power_names_neutral' +POWER_TO = 'power_to' +POWERS = 'powers' +POWERS_KICKED = 'powers_kicked' +PREVIOUS_PHASE = 'previous_phase' +PREVIOUS_PHASE_DATA = 'previous_phase_data' +PREVIOUS_STATE = 'previous_state' +PROMOTE = 'promote' +PROPOSAL = 'proposal' +RE_SENT = 're_sent' +REASON = 'reason' +RECIPIENT = 'recipient' +RECIPIENT_TOKEN = 'recipient_token' +REGISTER = 'register' +REGISTRATION_PASSWORD = 'registration_password' +REMOVE_CANCELED_GAMES = 'remove_canceled_games' +REMOVE_ENDED_GAMES = 'remove_ended_games' +REQUEST_ID = 'request_id' +RESULT = 'result' +RESULT_HISTORY = 'result_history' +RESULTS = 'results' +RETREATS = 'retreats' +ROLE = 'role' +RULES = 'rules' +SENDER = 'sender' +SERVER_TYPE = 'server_type' +SET_ORDER = 'set_order' +SETTINGS = 'settings' +START_AUTO = 'start_auto' +START_MASTER = 'start_master' +START_MODE = 'start_mode' +STATE = 'state' +STATE_HISTORY = 'state_history' +STATE_TYPE = 'state_type' +STATES = 'states' +STATUS = 'status' +SUPPLY_CENTERS = 'supply_centers' +TIME_SENT = 'time_sent' +TIMESTAMP = 'timestamp' +TIMESTAMP_CREATED = 'timestamp_created' +TIMESTAMP_SAVED = 'timestamp_saved' +TIMESTAMP_SYNC = 'timestamp_sync' +TIMESTAMPS = 'timestamps' +TO_PHASE = 'to_phase' +TO_TIMESTAMP = 'to_timestamp' +TOKEN = 'token' +TOKEN_TIMESTAMP = 'token_timestamp' +TOKEN_TO_USERNAME = 'token_to_username' +TOKENS = 'tokens' +TURN = 'turn' +TURN_HISTORY = 'turn_history' +UNDECIDED_PLAYER_MODE = 'undecided_player_mode' +UNITS = 'units' +USERNAME = 'username' +USERNAME_TO_TOKENS = 'username_to_tokens' +USERS = 'users' +VICTORY = 'victory' +VOTE = 'vote' +VOTE_ID = 'vote_id' +VOTE_IS_FORCED = 'vote_is_forced' +VOTES = 'votes' +WAIT = 'wait' +WIN = 'win' +WINNERS = 'winners' +WINTER_UNDECIDED_PLAYER_MODE = 'winter_undecided_player_mode' +YES = 'yes' +ZOBRIST_HASH = 'zobrist_hash' + +# Special name sets. +ALL_GAME_STATUSES = (FORMING, ACTIVE, PAUSED, COMPLETED, CANCELED) +ALL_GRADE_UPDATES = {PROMOTE, DEMOTE} +ALL_GRADES = {OMNISCIENT, ADMIN, MODERATOR} +ALL_COMM_LEVELS = {CHANNEL, GAME} +ALL_VOTE_DECISIONS = {YES, NO, NEUTRAL} +ALL_ROLE_TYPES = {OBSERVER_TYPE, OMNISCIENT_TYPE, SERVER_TYPE} +ALL_STATE_TYPES = {STATE_HISTORY, STATE, PHASE} + +def role_is_special(role): + """ Return True if role is a special role (observer or omniscient). """ + return role in {OBSERVER_TYPE, OMNISCIENT_TYPE} + +def switch_special_role(role): + """ Return opposite special role of given special role: + - observer role if omniscient role is given + - omniscient role if observer role is given + """ + if role == OBSERVER_TYPE: + return OMNISCIENT_TYPE + if role == OMNISCIENT_TYPE: + return OBSERVER_TYPE + raise ValueError('Unknown special role %s' % role) -- cgit v1.2.3