From d58a41da69d9052a0861d4455c95ae150ce46ef1 Mon Sep 17 00:00:00 2001 From: Joel Klimont Date: Fri, 1 Oct 2021 02:40:16 +0200 Subject: [PATCH] fixed missing api calls and documentation --- build_deb.sh | 2 +- compLib/Api.py | 29 ++++++++++++---- compLib/__init__.py | 2 +- docs/source/conf.py | 2 +- docs/source/lib/Api.rst | 75 ++++++++++++++++++++++++++++++----------- setup.py | 2 +- 6 files changed, 82 insertions(+), 30 deletions(-) diff --git a/build_deb.sh b/build_deb.sh index fd8e6a9..0784496 100755 --- a/build_deb.sh +++ b/build_deb.sh @@ -34,7 +34,7 @@ fpm -s python --python-bin python3 --python-pip pip3 --python-package-name-prefi -d "python3-pigpio" \ -d "python3-numpy" \ -d "ffmpeg" \ - -v 0.2.2-0 -t deb setup.py + -v 0.2.3-0 -t deb setup.py # --deb-changelog changelog \ # --deb-upstream-changelog changelog \ diff --git a/compLib/Api.py b/compLib/Api.py index 1ad8a8a..ca6b5f1 100644 --- a/compLib/Api.py +++ b/compLib/Api.py @@ -75,7 +75,7 @@ class Seeding: return result, res.status_code @staticmethod - def getCargo(color: str) -> Tuple[Dict, int]: + def get_cargo(color: str) -> Tuple[Dict, int]: """Makes the /api/listCargo call to the api. :param color: Color parameter which specifies which cargo should be taken. (A string which is either "green", "red", "yellow" or "blue" @@ -110,7 +110,7 @@ class DoubleElim: @staticmethod def get_position() -> Tuple[Position, int]: - """Get position of the robot + """Makes the /api/getPos call to the api. :return: A Position object with robot position :rtype: Tuple[Position, int] @@ -127,7 +127,7 @@ class DoubleElim: @staticmethod def get_opponent() -> Tuple[Position, int]: - """Get position of the opponents robot + """Makes the /api/getOp call to the api. :return: A Position object with opponents robot position :rtype: Tuple[Position, int] @@ -144,7 +144,7 @@ class DoubleElim: @staticmethod def get_goal() -> Tuple[Position, int]: - """Get position of the goal + """Makes the /api/getGoal call to the api. :return: A Position object with x and y coordinates of the goal, rotation is always -1 :rtype: Tuple[Position, int] @@ -161,7 +161,7 @@ class DoubleElim: @staticmethod def get_items() -> Tuple[List[Dict], int]: - """Get a list with all current items + """Makes the /api/getItems call to the api. :return: A list will all items currently on the game field. Items are dictionaries that look like: {"id": 0, "x": 0, "y": 0} :rtype: Tuple[List[Dict], int] @@ -178,7 +178,7 @@ class DoubleElim: @staticmethod def get_scores() -> Tuple[Dict, int]: - """Get the current scores + """Makes the /api/getScores call to the api. :return: A dictionary with all scores included like: {"self":2,"opponent":0} :rtype: Tuple[Dict, int] @@ -192,3 +192,20 @@ class DoubleElim: response = json.loads(res.content) Logging.get_logger().debug(f"DoubleElim.get_scores = {response}, status code = {res.status_code}") return response, res.status_code + + @staticmethod + def get_meteoroid() -> Tuple[Dict, int]: + """Makes the /api/getMeteoroid call to the api. + + :return: A dictionary with all scores included like: {"self":2,"opponent":0} + :rtype: Tuple[Dict, int] + """ + res = requests.get(API_URL_GET_METEOROID) + if res.status_code == 408: + Logging.get_logger().error(f"DoubleElim.get_meteoroid timeout!") + time.sleep(0.01) + return DoubleElim.get_scores() + + response = json.loads(res.content) + Logging.get_logger().debug(f"DoubleElim.get_meteoroid = {response}, status code = {res.status_code}") + return response, res.status_code \ No newline at end of file diff --git a/compLib/__init__.py b/compLib/__init__.py index 064d50e..26296c5 100644 --- a/compLib/__init__.py +++ b/compLib/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.2.2-0" +__version__ = "0.2.3-0" import importlib import compLib.LogstashLogging diff --git a/docs/source/conf.py b/docs/source/conf.py index 60cd842..26d8294 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -23,7 +23,7 @@ copyright = '2021, robo4you' author = 'robo4you' # The full version, including alpha/beta/rc tags -release = '0.0.2' +release = '0.2.3' # -- General configuration --------------------------------------------------- diff --git a/docs/source/lib/Api.rst b/docs/source/lib/Api.rst index 18605ae..59ad2d6 100644 --- a/docs/source/lib/Api.rst +++ b/docs/source/lib/Api.rst @@ -32,31 +32,31 @@ Calling Seeding API from compLib.Api import Seeding - park, code = Seeding.get_park() + zones, code = Seeding.get_delivery() if code == 403: print(f"I am not in the correct zone to make that request!") else: - park = park["id"] - print(f"I should move to parking position: {park}") + print(f"First we need to go to zone {zone[0]}") + # put code here to follow line and drive to the zone + print(f"Now we need to go to zone {zone[1]}") + # put code here to follow line and drive to the next zone + print(f"Now we need to go to zone {zone[2]}") + # put code here to follow line and drive to the last zone + print(f"We delivered all packages, hopefully we scored some points!") - if park == 0: - print(f"I can't move to this position yet :(") - elif park == 1: - print(f"Moving to position 1!") - # drive to parking position using Motors module... - print(f"Now hopefully at position 1") - # drive back using Motors module... - elif park == 2: - # do something similar to park == 1.. - elif park == 3: - # do something similar to park == 1.. +.. code-block:: python - success = Seeding.pay_park() - # check which code the api returned - if success == 204: - print(f"We scored some points!") - else: - print(f"We failed :(") + from compLib.Api import Seeding + + package, code = Seeding.get_cargo("yellow") + if code == 403: + print(f"I am not in the correct zone to make that request!") + elif code == 404: + print(f"I am in the correct zone, but there is no yellow package here.") + elif code == 413: + print(f"I am in the correct zone, but I already have two packages loaded.") + else code == 200: + print(f"The {package['color']} has been picked up!") Calling Double Elimination API ---------------------------------- @@ -70,3 +70,38 @@ Calling Double Elimination API goal, status = DoubleElim.get_goal() print(f"Goal is at: x={goal.x}, y={goal.y}, the server responded with status code: {status}") + +.. code-block:: python + + from compLib.Api import DoubleElim + import time + + # function which waits for the game to be started (you should include this in your double elimination program) + def wait_for_start(): + _, status = DoubleElim.get_position() + while status == 503: + time.sleep(0.1) + _, status = DoubleElim.get_position() + + wait_for_start() + print(f"Game has started, lets score some points!!") + + position, status = DoubleElim.get_position() + print(f"Position of my robot is: x={position.x}, y={position.y} and rotation is: {position.degrees}, the server responded with status code: {status}") + + opponent_position, status = DoubleElim.get_opponent() + print(f"Position of the opponents robot is: x={opponent_position.x}, y={opponent_position.y} and rotation is: {opponent_position.degrees}, the server responded with status code: {status}") + + goal, status = DoubleElim.get_goal() + print(f"Goal is at: x={goal.x}, y={goal.y}, the server responded with status code: {status}") + + items, status = DoubleElim.get_items() + print(f"There are currently {len(items)} on the gameboard: {items}, the server responded with status code: {status}") + + score, status = DoubleElim.get_score() + print(f"The current score of the game is {score}, the server responded with status code: {status}") + + meteoroids, status = DoubleElim.get_meteoroid() + print(f"The current meteoroids in the game are {meteoroids}, the server responded with status code: {status}") + +In this second example we wait until the game is started by the judges and then make all possible requests once. You should use the wait_for_start function in your double elimination program. If your robot starts too soon your run will not count! diff --git a/setup.py b/setup.py index 38d1587..b0cece3 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ else: setuptools.setup( name="complib", - version="0.2.2-0", + version="0.2.3-0", author="F-WuTs", author_email="--", description="",