From b744385a23fae24a0a4354090f1d205258347a41 Mon Sep 17 00:00:00 2001 From: Joey Hines Date: Sat, 2 Feb 2019 09:34:49 -0600 Subject: [PATCH] Added add_owner command +add_owner can add additional owners to a location +added tests for add_owner +updated some help messages --- api/commands.py | 39 +++++++++++++++++++++++++++++++++++---- test/test_commands.py | 9 +++++++++ 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/api/commands.py b/api/commands.py index 02fc2b9..190779c 100644 --- a/api/commands.py +++ b/api/commands.py @@ -46,9 +46,12 @@ def command(type): def parse_help(func): - match = re.search(".*:help:.*", func.__doc__) + try: + match = re.search(".*:help:.*", func.__doc__) - return match.group(0).partition(":help: ")[-1] + return match.group(0).partition(":help: ")[-1] + except: + return '' def get_player(discord_uuid=None, mc_uuid=None): @@ -135,7 +138,7 @@ def add_base(x_pos, z_pos, name=None, discord_uuid=None, mc_uuid=None): :param mc_uuid: Minecraft UUID :return: JSON representation of the new base :raises: EntryNameNotUniqueError, PlayerNotFound, LocationLookupError - :help: Adds your base to the database. The base name is optional if this is your first base + :help: Adds your base to the database. ''' return add_location(x_pos, z_pos, name=name, discord_uuid=discord_uuid, mc_uuid=mc_uuid, loc_type=Base) @@ -169,7 +172,7 @@ def add_tunnel(tunnel_direction, tunnel_number, location_name=None, discord_uuid :param mc_uuid: Minecraft UUID :return: JSON Representation of the Tunnel :raises: PlayerNotFound, LocationHasTunnelError, EntryNameNotUniqueError, NoLocationsInDatabase, InvalidTunnelError - :help: Adds your tunnel to the database. If you only have one location, you do not need to specify a location name + :help: Adds your tunnel to the database. ''' player = get_player(discord_uuid, mc_uuid) if location_name is None: @@ -228,6 +231,7 @@ def delete(name, discord_uuid=None, mc_uuid=None): return name + @command("GET") def find_around(x_pos, z_pos, radius=200): ''' @@ -515,3 +519,30 @@ def restock(item_name, shop_name=None, discord_uuid=None, mc_uuid=None): item.save() return objects_list_to_json(items) + + +@command("POST") +def add_owner(new_owner_name, location_name, discord_uuid=None, mc_uuid=None): + ''' + :request: POST + :param new_owner_name: The MC username of the new owner + :param location_name: The name of the location to add them to + :param discord_uuid: Discord UUID of the current owner + :param mc_uuid: MC UUID of the current owner + :return: Updated Location + :raises: PlayerNotFound, LocationLookupError + ''' + owner = get_player(discord_uuid, mc_uuid) + + try: + new_owner = Player.objects.get(name__iexact=new_owner_name) + except Player.DoesNotExist: + raise PlayerNotFound("New Owner Not in DB") + + location = get_location(owner, location_name, Location) + + location.owner.add(new_owner) + + location.save() + + return location.json diff --git a/test/test_commands.py b/test/test_commands.py index 3a1fd16..1296af0 100644 --- a/test/test_commands.py +++ b/test/test_commands.py @@ -157,3 +157,12 @@ class CommandsAPITestCase(TestCase): old_item = ItemListing.objects.get(item_name="sed") self.assertGreater(old_item.date_restocked, new_item.date_restocked) + + def test_add_owner(self): + self.populate() + new_owner = Player.objects.create(name="Vakky", mc_uuid="5", discord_uuid="5") + add_owner(new_owner.name, self.shop.name, discord_uuid=DISCORD_UUID) + + shop = Shop.objects.get(owner__name__icontains="Vakky") + + self.assertEquals(shop.id, self.shop.id)