aboutsummaryrefslogtreecommitdiff
path: root/diplomacy/utils/strings.py
diff options
context:
space:
mode:
Diffstat (limited to 'diplomacy/utils/strings.py')
-rw-r--r--diplomacy/utils/strings.py236
1 files changed, 236 insertions, 0 deletions
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 <https://www.gnu.org/licenses/>.
+# ==============================================================================
+""" 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)