Skip to content
Snippets Groups Projects
Commit 0be62b35 authored by magnus2142's avatar magnus2142
Browse files

Created announcement service and fixed some names on folders and folders

parent 72f7cfc7
No related branches found
No related tags found
No related merge requests found
from .AuthorizationService import *
\ No newline at end of file
...@@ -5,8 +5,8 @@ __app_name__ = "bbcli" ...@@ -5,8 +5,8 @@ __app_name__ = "bbcli"
__version__ = "0.1.0" __version__ = "0.1.0"
# from .endpoints import * # from .endpoints import *
from .Node import * from .Node import *
from .Utils.utils import * from .utils.utils import *
from .Services import login from .services import login
# from endpoints import get_user, get_course, get_assignments, get_course_contents # from endpoints import get_user, get_course, get_assignments, get_course_contents
( (
......
...@@ -9,13 +9,21 @@ from dotenv import load_dotenv ...@@ -9,13 +9,21 @@ from dotenv import load_dotenv
from bbcli import check_valid_date, check_response from bbcli import check_valid_date, check_response
import click import click
from bbcli.Services import AuthorizationService from bbcli.services import authorization_service
from bbcli.services import announcement_service
@click.group() @click.group()
def entry_point(): def entry_point():
authorize_user() authorize_user()
pass pass
@click.command(name='announcements')
def get_announcements():
response = announcement_service.update_announcement(cookies, headers, '_33050_1', '_385022_1')
click.echo(response)
entry_point.add_command(get_announcements)
entry_point.add_command(get_user) entry_point.add_command(get_user)
entry_point.add_command(get_course_contents) entry_point.add_command(get_course_contents)
entry_point.add_command(get_assignments) entry_point.add_command(get_assignments)
...@@ -28,4 +36,4 @@ headers = {'X-Blackboard-XSRF': os.getenv('XSRF')} ...@@ -28,4 +36,4 @@ headers = {'X-Blackboard-XSRF': os.getenv('XSRF')}
# @app.command(name='login', help='Authorize the user.') # @app.command(name='login', help='Authorize the user.')
def authorize_user(): def authorize_user():
if check_valid_date(cookies) == False: if check_valid_date(cookies) == False:
AuthorizationService.login() authorization_service.login()
File moved
File moved
File moved
from .authorization_service import *
\ No newline at end of file
import json
from subprocess import call
from typing import Dict, Any
import requests
from bbcli.services.course_service import list_courses
import click
def list_announcements(cookies: Dict, user_name: str):
courses = list_courses(cookies=cookies, user_name=user_name)
session = requests.Session()
announcements = []
for course in courses:
course_announcements = session.get('https://ntnu.blackboard.com/learn/api/public/v1/courses/{}/announcements'.format(course['id']), cookies=cookies)
course_announcements = json.loads(course_announcements.text)
# Adds the course name to each course announcement list to make it easier to display which course the announcement comes from
if 'results' in course_announcements:
announcements.append({
'course_name': course['name'],
'course_announcements': course_announcements['results']
})
return announcements
def list_course_announcements(cookies: Dict, course_id: str):
course_announcements = requests.get('https://ntnu.blackboard.com/learn/api/public/v1/courses/{}/announcements'.format(course_id), cookies=cookies)
course_announcements = json.loads(course_announcements.text)['results']
return course_announcements
def list_announcement(cookies: Dict, course_id: str, announcement_id: str):
announcement = requests.get('https://ntnu.blackboard.com/learn/api/public/v1/courses/{}/announcements/{}'.format(course_id, announcement_id), cookies=cookies)
announcement = json.loads(announcement.text)
return announcement
# TODO: Add compatibility for flags and options to make a more detailed announcement
def create_announcement(cookies: Dict, headers: Dict, course_id: str, title: str):
MARKER = '# Everything below is ignored\n'
body = click.edit('\n\n' + MARKER)
if body is not None:
body = body.split(MARKER, 1)[0].rstrip('\n')
data = {
'title': title,
'body': body
}
data = json.dumps(data)
headers['Content-Type'] = 'application/json'
response = requests.post('https://ntnu.blackboard.com/learn/api/public/v1/courses/{}/announcements'.format(course_id), cookies=cookies, headers=headers, data=data)
return response.text
def delete_announcement(cookies: Dict, headers: Dict, course_id: str, announcement_id: str):
response = requests.delete('https://ntnu.blackboard.com/learn/api/public/v1/courses/{}/announcements/{}'.format(course_id, announcement_id), cookies=cookies, headers=headers)
if response.text == '':
return 'Sucessfully deleted announcement!'
else:
return response.text
def update_announcement(cookies: Dict, headers: Dict, course_id: str, announcement_id: str):
announcement = list_announcement(cookies=cookies, course_id=course_id, announcement_id=announcement_id)
MARKER = '# Everything below is ignored\n'
editable_data = {
'title': announcement['title'],
'body': announcement['body'],
'created': announcement['created'],
'availability': announcement['availability'],
'draft': announcement['draft']
}
announcement = json.dumps(editable_data, indent=2)
new_data = click.edit(announcement + '\n\n' + MARKER)
headers['Content-Type'] = 'application/json'
response = requests.patch('https://ntnu.blackboard.com/learn/api/public/v1/courses/{}/announcements/{}'.format(course_id, announcement_id), cookies=cookies, headers=headers, data=new_data)
return response.text
\ No newline at end of file
from urllib import request from urllib import request
import os import os
from dotenv import load_dotenv from dotenv import load_dotenv
from bbcli.Entities.RequestData import RequestData from bbcli.entities.RequestData import RequestData
import requests import requests
import json import json
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
......
File moved
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment