예제 #1
0
              (set(emails.keys()) - set(groups.keys())))
        print("In Groups but not Users: %r" %
              (set(groups.keys()) - set(emails.keys())))
        raise Exception("Different username sets")
    for username in emails.keys():
        groups[username].update(emails[username])
    return groups


def print_groups_and_emails(session):
    by_group = {}
    users = fetch_groups_and_emails(session)
    for user in users.values():
        groups = [name for name, group_id in user['groups']]
        for group in groups or ['no group']:
            by_group.setdefault(group, []).append(user)
    for group_name in sorted(by_group.keys()):
        print("%s:\n" % group_name)
        group_users = by_group[group_name]
        group_users = sorted(group_users,
                             key=lambda u:
                             (u['role'], u['first_name'], u['last_name']))
        for user in group_users:
            print("\"%s %s\" <%s>," %
                  (user['first_name'], user['last_name'], user['email']))
        print('')


if __name__ == "__main__":
    blackboard.wrapper(print_groups_and_emails)
예제 #2
0
파일: forum.py 프로젝트: johanbay/bbfetch
    return [row[title_col] for row in rows]


def get_thread_ids(session, forum_id):
    url = ('https://bb.au.dk/webapps/discussionboard/do/forum' +
           '?action=list_threads&nav=discussion_board' +
           '&course_id=%s' % session.course_id +
           '&conf_id=%s&forum_id=%s' % forum_id + '&showAll=true')
    r = session.get(url)
    document = html5lib.parse(r.content, encoding=r.encoding)
    return parse_thread_ids(document)


def parse_thread_ids(document):
    form = document.find('.//h:form[@name="forumForm"]', NS)

    # Seemingly used by BB to cache requests/prevent spam
    nonce_field = form.find(
        './/h:input[@name="blackboard.platform.security.NonceUtil.nonce"]', NS)
    nonce = nonce_field.get('value')

    thread_fields = form.findall('.//h:input[@name="formCBs"]', NS)
    threads = []
    for f in thread_fields:
        threads.append((f.get('value'), f.get('title')))
    return nonce, threads


if __name__ == "__main__":
    blackboard.wrapper(print_forum_posts)
예제 #3
0
파일: forum.py 프로젝트: kse/bbfetch
def get_thread_ids(session, forum_id):
    url = (
        'https://bb.au.dk/webapps/discussionboard/do/forum' +
        '?action=list_threads&nav=discussion_board' +
        '&course_id=%s' % session.course_id +
        '&conf_id=%s&forum_id=%s' % forum_id +
        '&showAll=true'
    )
    r = session.get(url)
    document = html5lib.parse(r.content, encoding=r.encoding)
    return parse_thread_ids(document)


def parse_thread_ids(document):
    form = document.find('.//h:form[@name="forumForm"]', NS)

    # Seemingly used by BB to cache requests/prevent spam
    nonce_field = form.find(
        './/h:input[@name="blackboard.platform.security.NonceUtil.nonce"]', NS)
    nonce = nonce_field.get('value')

    thread_fields = form.findall('.//h:input[@name="formCBs"]', NS)
    threads = []
    for f in thread_fields:
        threads.append((f.get('value'), f.get('title')))
    return nonce, threads


if __name__ == "__main__":
    blackboard.wrapper(print_forum_posts)
예제 #4
0
    url = (
        'https://blackboard.au.dk/webapps/blackboard/execute/userManager' +
        '?context=userPicker&course_id=_13158_1&enrollTypeString=UnEnrolled' +
        '&sortCol=userFirstName&sortDir=ASCENDING' +
        '&userInfoSearchKeyString=UserName' +
        '&userInfoSearchOperatorString=Contains&userInfoSearchText=a')
    response, keys, rows = fetch_datatable(session, url, 'get_all_users.csv')
    with open('all_users.html', 'wb') as fp:
        fp.write(url.encode('ascii') + b'\n')
        for r in list(response.history) + [response]:
            fp.write(('%s %s\n' % (r.status_code, r.url)).encode('ascii'))
        fp.write(response.content)
    return parse_all_users(keys, rows)


def parse_all_users(keys, rows):
    first_name = keys.index('userFirstName')
    last_name = keys.index('userLastName')
    username = keys.index('username')
    email_address = keys.index('userEmailAddress')
    return [{
        'first': row[first_name],
        'last': row[last_name],
        'id': row[username],
        'email': row[email_address]
    } for row in rows]


if __name__ == "__main__":
    blackboard.wrapper(get_all_users)
예제 #5
0
파일: emails.py 프로젝트: Mortal/bbfetch
def fetch_groups_and_emails(session):
    emails = fetch_users(session)
    groups = fetch_groups(session)
    if emails.keys() != groups.keys():
        print("In Users but not Groups: %r" % (set(emails.keys()) - set(groups.keys())))
        print("In Groups but not Users: %r" % (set(groups.keys()) - set(emails.keys())))
        raise Exception("Different username sets")
    for username in emails.keys():
        groups[username].update(emails[username])
    return groups


def print_groups_and_emails(session):
    by_group = {}
    users = fetch_groups_and_emails(session)
    for user in users.values():
        groups = [name for name, group_id in user['groups']]
        for group in groups or ['no group']:
            by_group.setdefault(group, []).append(user)
    for group_name in sorted(by_group.keys()):
        print("%s:\n" % group_name)
        group_users = by_group[group_name]
        group_users = sorted(group_users, key=lambda u: (u['role'], u['first_name'], u['last_name']))
        for user in group_users:
            print("\"%s %s\" <%s>," % (user['first_name'], user['last_name'], user['email']))
        print('')


if __name__ == "__main__":
    blackboard.wrapper(print_groups_and_emails)
예제 #6
0
파일: groups.py 프로젝트: Mortal/bbfetch
import blackboard
from blackboard.backend import fetch_groups


def print_groups(session):
    users = fetch_groups(session)
    for user in users:
        print("%s %s (%s, %s) is in %s" %
              (user['first_name'], user['last_name'],
               user['username'], user['role'], user['groups']))


if __name__ == "__main__":
    blackboard.wrapper(print_groups)
예제 #7
0
import blackboard
from blackboard.datatable import fetch_datatable


def get_visit_stats(session):
    url = (
        'https://bb.au.dk/webapps/blackboard/content/manageDashboard.jsp' +
        '?course_id=%s' % session.course_id +
        '&sortCol=LastLoginCol&sortDir=D')
    response, keys, rows = fetch_datatable(session, url)
    # for r in list(response.history) + [response]:
    #     print("%s %s" % (r.status_code, r.url))
    return parse_visit_stats(keys, rows)


def parse_visit_stats(keys, rows):
    first = keys.index('FirstNameCol')
    last = keys.index('LastNameCol')
    time = keys.index('LastLoginCol')
    data = [('%s %s' % (r[first], r[last]), r[time]) for r in rows]
    return data


def print_visit_stats(session):
    for name, time in get_visit_stats(session):
        print("%s %s" % (time, name))


if __name__ == "__main__":
    blackboard.wrapper(print_visit_stats)
예제 #8
0
import blackboard
from blackboard.datatable import fetch_datatable


def get_visit_stats(session):
    url = ('https://bb.au.dk/webapps/blackboard/content/manageDashboard.jsp' +
           '?course_id=%s' % session.course_id +
           '&sortCol=LastLoginCol&sortDir=D')
    response, keys, rows = fetch_datatable(session, url)
    # for r in list(response.history) + [response]:
    #     print("%s %s" % (r.status_code, r.url))
    return parse_visit_stats(keys, rows)


def parse_visit_stats(keys, rows):
    first = keys.index('FirstNameCol')
    last = keys.index('LastNameCol')
    time = keys.index('LastLoginCol')
    data = [('%s %s' % (r[first], r[last]), r[time]) for r in rows]
    return data


def print_visit_stats(session):
    for name, time in get_visit_stats(session):
        print("%s %s" % (time, name))


if __name__ == "__main__":
    blackboard.wrapper(print_visit_stats)
예제 #9
0
import blackboard
from blackboard.backend import fetch_groups


def print_groups(session):
    users = fetch_groups(session)
    for user in users.values():
        print("%s %s (%s, %s) is in %s" %
              (user['first_name'], user['last_name'], user['username'],
               user['role'], user['groups']))


if __name__ == "__main__":
    blackboard.wrapper(print_groups)
예제 #10
0
파일: all_users.py 프로젝트: Mortal/bbfetch
        'https://bb.au.dk/webapps/blackboard/execute/userManager' +
        '?context=userPicker&course_id=_13158_1&enrollTypeString=UnEnrolled' +
        '&sortCol=userFirstName&sortDir=ASCENDING' +
        '&userInfoSearchKeyString=UserName' +
        '&userInfoSearchOperatorString=Contains&userInfoSearchText=a')
    response, keys, rows = fetch_datatable(session, url, 'get_all_users.csv')
    with open('all_users.html', 'wb') as fp:
        fp.write(url.encode('ascii') + b'\n')
        for r in list(response.history) + [response]:
            fp.write(('%s %s\n' % (r.status_code, r.url)).encode('ascii'))
        fp.write(response.content)
    return parse_all_users(keys, rows)


def parse_all_users(keys, rows):
    first_name = keys.index('userFirstName')
    last_name = keys.index('userLastName')
    username = keys.index('username')
    email_address = keys.index('userEmailAddress')
    return [
        {'first': row[first_name],
         'last': row[last_name],
         'id': row[username],
         'email': row[email_address]}
        for row in rows
    ]


if __name__ == "__main__":
    blackboard.wrapper(get_all_users)