From bb37389a5dfff7da9fea94b40df2ffdd81ae781f Mon Sep 17 00:00:00 2001 From: williamforbrigd <hansw0701@gmail.com> Date: Tue, 8 Mar 2022 15:42:26 +0100 Subject: [PATCH] made some utils classes --- bbcli/__init__.py | 1 + bbcli/cli.py | 18 ++-------- bbcli/endpoints.py | 87 ++++++++++++++++++++++++---------------------- bbcli/utils.py | 33 ++++++++++++++++++ 4 files changed, 81 insertions(+), 58 deletions(-) create mode 100644 bbcli/utils.py diff --git a/bbcli/__init__.py b/bbcli/__init__.py index c6993c6..18edbd4 100644 --- a/bbcli/__init__.py +++ b/bbcli/__init__.py @@ -6,6 +6,7 @@ __version__ = "0.1.0" # from .endpoints import * from .Node import * from .login import * +from .utils import * ( SUCCESS, diff --git a/bbcli/cli.py b/bbcli/cli.py index bc5aae4..1023fea 100644 --- a/bbcli/cli.py +++ b/bbcli/cli.py @@ -8,8 +8,7 @@ import typer from bbcli import __app_name__, __version__, endpoints import os from dotenv import load_dotenv -from datetime import datetime -from bbcli import login +from bbcli import login, check_valid_date app = typer.Typer() @@ -19,19 +18,6 @@ load_dotenv() cookies = {'BbRouter' : os.getenv("BB_ROUTER")} headers = {'X-Blackboard-XSRF': os.getenv('XSRF')} -def check_valid_date() -> bool: - tmp = cookies['BbRouter'] - start = int(tmp.find('expires')) + len('expires') + 1 - end = int(tmp.find(',')) - timestmp = int(tmp[start : end]) - print(timestmp) - expires = datetime.fromtimestamp(timestmp) - now = datetime.now() - if expires >= now: - return True - else: - return False - def _version_callback(value: bool) -> None: if value: typer.echo(f"{__app_name__} v{__version__}") @@ -48,7 +34,7 @@ def main( is_eager=True, ) ) -> None: - if check_valid_date() == False: + if check_valid_date(cookies) == False: login() # load_dotenv() # cookies['BbRouter'] = os.getenv("BB_ROUTER") diff --git a/bbcli/endpoints.py b/bbcli/endpoints.py index e20865d..52e66d0 100644 --- a/bbcli/endpoints.py +++ b/bbcli/endpoints.py @@ -5,7 +5,7 @@ import requests import typer import bbcli.cli as cli app = typer.Typer() - +from bbcli import check_response base_url = 'https://ntnu.blackboard.com/learn/api/public/v1/' @@ -19,18 +19,20 @@ def get_user(user_name: str = typer.Argument('', help='Name of the user'))-> Non if user_name == '': user_name = typer.prompt("What is your user name?") url = f'{base_url}users?userName={user_name}' - x = requests.get( + response = requests.get( url, cookies=cli.cookies ) + if check_response(response) == False: + return + else: + data = x.json()['results'][0] + fn = data['name']['given'] + sn = data['name']['family'] + id = data['studentId'] - data = x.json()['results'][0] - fn = data['name']['given'] - sn = data['name']['family'] - id = data['studentId'] - - typer.echo(f'Name of the student: {fn} {sn}') - typer.echo(f'The student id: {id}') + typer.echo(f'Name of the student: {fn} {sn}') + typer.echo(f'The student id: {id}') @app.command(name='get-course') @@ -41,14 +43,17 @@ def get_course(course_id: str = typer.Argument('', help='Id of the course')): if course_id == '': course_id = typer.prompt("What is the course id?") url = f'{base_url}courses?courseId={course_id}' - x = requests.get( + response = requests.get( url, cookies=cli.cookies) - data = x.json()['results'][0] - name = data['name'] - course_url = data['externalAccessUrl'] - typer.echo(name) - typer.echo(f'URL for the course: {course_url}') + if check_response(response) == False: + return + else: + data = x.json()['results'][0] + name = data['name'] + course_url = data['externalAccessUrl'] + typer.echo(name) + typer.echo(f'URL for the course: {course_url}') @app.command(name='get-course-contents') def get_course_contents(course_id: str = '_27251_1'): @@ -57,23 +62,22 @@ def get_course_contents(course_id: str = '_27251_1'): ''' url = f'{base_url}courses/{course_id}/contents' typer.echo(url) - x = requests.get(url, cookies=cli.cookies) - data = x.json()['results'] - typer.echo('Mapper:') - map = dict() - for i in range(len(data)): - title = data[i]['title'] - map[i+1] = data[i]['id'] - typer.echo(f'{i+1} {title}') - # idx = typer.prompt("Open a folder by pressing a number: ") - typer.echo(map) - # for d in data: - # typer.echo(d['title']) + response = requests.get(url, cookies=cli.cookies) + if check_response(response) == False: + return + else: + data = response.json()['results'] + typer.echo('Mapper:') + map = dict() + for i in range(len(data)): + title = data[i]['title'] + map[i+1] = data[i]['id'] + typer.echo(f'{i+1} {title}') + typer.echo(map) def get_children(worklist, url, acc, count: int = 0): count = count + 1 typer.echo(f'kommer hit: {count}') - # print("The acc is: ", acc) key = 'hasChildren' if len(worklist) == 0: return acc @@ -81,11 +85,8 @@ def get_children(worklist, url, acc, count: int = 0): data = worklist.pop() id = data['id'] old = f'{url}/{id}/children' - # typer.echo(url) response = requests.get(old, cookies = cli.cookies) - if response.status_code == 403 or response.status_code == 404: - typer.echo(response.json()['status']) - typer.echo(response.json()['message']) + if check_response(response) == False: return acc else: child = response.json()['results'] @@ -94,7 +95,6 @@ def get_children(worklist, url, acc, count: int = 0): worklist.append(child[i]) else: acc.append(child[i]) - # parent = worklist.pop() return get_children(worklist, url, acc, count) @@ -105,15 +105,18 @@ def get_assignments(course_id: str = typer.Argument('_27251_1', help='The course Get the assignments ''' url = f'{base_url}courses/{course_id}/contents' - x = requests.get(url, cookies=cli.cookies) - data = x.json()['results'] - root = data[8] - # root = Node(data[8]) - worklist = [root] - res = get_children(worklist, url, []) - - for i in res: - print(i['title']) + response = requests.get(url, cookies=cli.cookies) + if check_response(response) == False: + return + else: + data = response.json()['results'] + root = data[8] + # root = Node(data[8]) + worklist = [root] + res = get_children(worklist, url, []) + + for i in res: + print(i['title']) diff --git a/bbcli/utils.py b/bbcli/utils.py new file mode 100644 index 0000000..1f58f83 --- /dev/null +++ b/bbcli/utils.py @@ -0,0 +1,33 @@ +from datetime import datetime + +def check_valid_key(obj, key) -> bool: + # print("the keys are", obj.keys()) + if key not in obj.keys(): + print(f'The key: \"{key}\" is not in the object') + return False + else: + return True + +def check_response(response) -> bool: + invalid_statuscodes = [401, 403, 404] + if response.status_code in invalid_statuscodes: + print(response.json()['status']) + print(response.json()['message']) + return False + else: + return True + +def check_valid_date(cookies) -> bool: + tmp = cookies['BbRouter'] + start = int(tmp.find('expires')) + len('expires') + 1 + end = int(tmp.find(',')) + timestmp = int(tmp[start : end]) + print(timestmp) + expires = datetime.fromtimestamp(timestmp) + now = datetime.now() + if expires >= now: + return True + else: + return False + + -- GitLab