Exemplo n.º 1
0
Arquivo: stop.py Projeto: eslof/cmgame
 def run(event, user_id, valid_data):
     list_id = valid_data[UserAttr.LIST_ID]
     if not MatchHelper.delete(list_id):
         end("Unable to delete match listing.")
     if not UserUtils.update(user_id, UserAttr.LIST_ID, ""):
         end("Unable to clear user listing id.")
     return True
Exemplo n.º 2
0
 def validate(event, user_id) -> Dict[str, str]:
     HomeHelper.validate_grid_request(event, "Item Clear API (GRID SLOT)")
     if event[RequestField.Home.GRID] == Constants.Home.MATCH_GRID_SLOT:
         end("Cannot clear reserved home grid slot.")
     user_data = UserUtils.get(user_id, UserAttr.CURRENT_HOME)
     if not user_data:
         end("Unable to retrieve current home for user.")
     return user_data
Exemplo n.º 3
0
 def run(event, user_id, valid_data) -> bool:
     home_index = event[RequestField.User.HOME] - 1
     home_id = valid_data[UserAttr.HOMES][home_index]
     if not HomeHelper.delete(home_id):
         end("Unable to delete requested home.")
     # todo: do we need an extra if :value in #name condition here to catch misuse?
     if not UserUtils.update(user_id, UserAttr.HOMES, home_index,
                             "REMOVE #name :value"):
         end("Unable to remove deleted home from user.")
     return True
Exemplo n.º 4
0
 def validate(event, user_id) -> Dict[str, str]:
     user_data = UserUtils.get(user_id, UserAttr.CURRENT_HOME)
     if not user_data:
         end("Unable to retrieve current home for user.")
     validate_meta(
         target=event,
         field=RequestField.Home.META,
         max_size=Config.HOME_META_LIMIT,
         message="Home Save API (META)",
     )
     return user_data
Exemplo n.º 5
0
    def validate(event, user_id):
        user_data = UserUtils.get(user_id,
                                  f"{UserAttr.LIST_ID}, {UserAttr.MATCH_ID}")
        if not user_data:
            end("Unable to retrieve match and listing for user.")
        if user_data[UserAttr.LIST_ID]:
            seconds_old = MatchHelper.get_age(user_data[UserAttr.LIST_ID])
            if seconds_old < 2.5:  # todo: Config.ENLIST_DELAY
                end("Attempting to refresh listing too early.")

        return user_data
Exemplo n.º 6
0
 def validate(event, user_id) -> Dict[str, Any]:
     user_data = UserUtils.get(user_id, UserAttr.HOMES)
     if not user_data:
         end("Unable to retrieve homes list for user.")
     validate_choice(
         target=event,
         field=RequestField.User.HOME,
         max=len(user_data[UserAttr.HOMES]),
         message="Home Delete API (CHOICE).",
     )
     return user_data
Exemplo n.º 7
0
    def validate(event, user_id) -> Dict[str, Union[List[str], int]]:
        user_data = UserUtils.get(
            user_id=user_id,
            attributes=f"{UserAttr.KEY_COUNT}, {UserAttr.KEY_USED_COUNT}",
        )
        if not user_data:
            end("Unable to retrieve key and used key count for user.")
        if user_data[UserAttr.KEY_COUNT] <= 0:
            end(f"Insufficient keys: {user_data[UserAttr.KEY_COUNT]}")

        return user_data
Exemplo n.º 8
0
 def run(event, user_id, valid_data) -> bool:
     request = SaveRequest(event[RequestField.User.SAVE])
     attribute, value = None, None
     if request == SaveRequest.NAME:
         attribute, value = UserAttr.NAME, RequestField.User.NAME
     elif request == SaveRequest.FLAG:
         attribute, value = UserAttr.FLAG, RequestField.User.FLAG
     elif request == SaveRequest.META:
         attribute, value = UserAttr.META, RequestField.User.META
     if not UserUtils.update(user_id, attribute, value):
         end("Unable to save user data.")
     return True
Exemplo n.º 9
0
 def validate(event, user_id) -> Dict[str, str]:
     HomeHelper.validate_grid_request(
         target=event, message="Item Update API (GRID SLOT)"
     )
     validate_meta(
         target=event,
         field=RequestField.Item.META,
         max_size=Config.GRID_META_LIMIT,
         message="Item Update API (META)",
     )
     user_data = UserUtils.get(user_id, UserAttr.CURRENT_HOME)
     if not user_data:
         end("Unable to retrieve current home for user.")
     return user_data
Exemplo n.º 10
0
    def run(event, user_id, valid_data) -> Union[bool, str]:
        match_id = valid_data[UserAttr.MATCH_ID]
        if match_id and MatchHelper.get_age(
                match_id) < 10:  # todo: put in config
            return web_socket_endpoint()["address"]
        list_id = valid_data[UserAttr.LIST_ID]
        if not list_id:
            new_id = MatchHelper.generate_id(user_id)
            if not MatchHelper.new(new_id, user_id):
                end("Unable to create match listing.")
            if not UserUtils.update(user_id, UserAttr.LIST_ID, new_id):
                end("Unable to update user listing id.")
            return True

        new_id = MatchHelper.generate_id(user_id)
        results = MatchHelper.upsert_return(list_id, new_id)
        if not results:
            end("Unable to refresh listing.")
        if MatchAttr.FINDER_ID in results.get("Attributes", {}):
            return True
        if not UserUtils.update(user_id, UserAttr.MATCH_ID, new_id):
            end("Unable to update user with claimed match.")
        return web_socket_endpoint()["address"]
Exemplo n.º 11
0
 def run(event, user_id, valid_data) -> Dict[str, Any]:
     home_index = event[RequestField.User.HOME] - 1
     home_id = valid_data[UserAttr.HOMES][home_index]
     response = table.get_item(
         Key={TableKey.PARTITION: TablePartition.HOME, TableKey.SORT: home_id},
         ProjectionExpression="#grid, #meta",
         ExpressionAttributeNames={
             "#id": TableKey.SORT,
             "#grid": HomeAttr.GRID,
             "#meta": HomeAttr.META,
         },
     )
     if not (response and "Item" in response and response["Item"]):
         end("Unable to get home data for requested home.")
     if not UserUtils.update(user_id, UserAttr.CURRENT_HOME, home_id):
         end("Unable to set user current home to requested home.")
     return response["Item"]
Exemplo n.º 12
0
def _handler(
    routes: ROUTES_TYPE,
    request_enum: EnumMeta,
    event: Dict[str, Any],
) -> str:
    # req: Enum = validate_request(event, request_enum)
    # _route: Route = routes[req]
    # user_id: Optional[str] = User.validate_id(event) if _route.require_id else None
    # valid_data: Any = _route.handler.validate(event, user_id)
    # output: Any = _route.handler.run(event, user_id, valid_data or None)
    # return _route.output(output)
    _route: Route = routes[validate_request(event, request_enum)]
    user_id: Optional[str] = UserUtils.validate_id(
        event) if _route.require_id else None
    return _route.output(
        _route.handler.run(event, user_id,
                           _route.handler.validate(event, user_id)))
Exemplo n.º 13
0
 def validate(event, user_id) -> Dict[str, int]:
     user_data = UserUtils.get(user_id, UserAttr.HOME_COUNT)
     if not user_data:
         end("Unable to retrieve home count for user.")
     if user_data[UserAttr.HOME_COUNT] >= Config.HOME_COUNT_MAX:
         end("Maximum homes reached.")
     validate_name(
         target=event,
         field=RequestField.Home.NAME,
         max_length=Constants.Home.NAME_MAX_LENGTH,
         message="Home Create API (NAME)",
     )
     validate_choice(
         target=event,
         field=RequestField.Home.BIODOME,
         max=Config.BIODOME_COUNT,
         message="Home Create API (BIODOME)",
     )
     return user_data
Exemplo n.º 14
0
 def validate(event, user_id) -> Dict[str, Union[int, str]]:
     HomeHelper.validate_grid_request(event, "Item Place API (GRID SLOT)")
     if event[RequestField.Home.GRID] == Constants.Home.MATCH_GRID_SLOT:
         end("Cannot place reserved home grid slot.")
     validate_meta(
         target=event,
         field=RequestField.Item.META,
         max_size=Config.GRID_META_LIMIT,
         message="Item Place API (META)",
     )
     user_data = UserUtils.get(
         user_id,
         f"{UserAttr.INVENTORY_COUNT}, {UserAttr.CURRENT_HOME}",
     )
     if not user_data:
         end("Unable to retrieve inventory and current home for user.")
     validate_choice(
         target=event,
         field=RequestField.User.ITEM,
         max=user_data[UserAttr.INVENTORY_COUNT],
         message="Item Place API (ITEM CHOICE)",
     )
     return user_data
Exemplo n.º 15
0
Arquivo: find.py Projeto: eslof/cmgame
    def run(event, user_id, valid_data: Dict[str, str]) -> Union[str, bool]:
        match_id = valid_data[UserAttr.MATCH_ID]
        # todo: Config.MATCH_COOLDOWN
        if match_id and MatchHelper.get_age(match_id) < 10:
            return web_socket_endpoint()["address"]
        scan_items = MatchHelper.find_available(user_id)
        if not scan_items:
            return False
        scan_match_id = scan_items[0]["id"]

        seconds_old = MatchHelper.get_age(scan_match_id)
        # todo: Config.MATCH_TIMEOUT
        if seconds_old > 15:
            MatchHelper.delete(scan_match_id)
            return False

        if not MatchHelper.claim(scan_match_id, user_id):
            return False

        if not UserUtils.update(user_id, UserAttr.MATCH_ID, scan_match_id):
            end("Unable to update user match id.")
        # todo: send match id to chat server to expect lister_id and finder_id
        return web_socket_endpoint()["address"]
Exemplo n.º 16
0
 def validate(event: Dict[str, Any], user_id: Optional[str]) -> Dict[str, Any]:
     user_data = UserUtils.get(user_id, UserHelper.data_attributes())
     if not user_data:
         end("Unable to get data attributes for user.")
     return user_data
Exemplo n.º 17
0
Arquivo: stop.py Projeto: eslof/cmgame
 def validate(event, user_id):
     user_data = UserUtils.get(user_id, UserAttr.LIST_ID)
     if not (user_data and user_data[UserAttr.LIST_ID]):
         end("User not listed.")
     return user_data
Exemplo n.º 18
0
Arquivo: find.py Projeto: eslof/cmgame
 def validate(event, user_id) -> Dict[str, str]:
     user_data = UserUtils.get(user_id, UserAttr.MATCH_ID)
     return user_data