예제 #1
0
def create_item(item):
    """
    Accepts a dictionary with the following keys:
    course_number, title, year, term, fullname
    """

    data = ITEM_METADATA

    # create database session
    session = get_session(EARL)

    prefix = "UG"
    if item["term"][0] == "G":
        prefix = "GR"
    cat = "{}{}".format(prefix, item["year"][-2:])
    c = session.query(AbstractRecord).\
        filter_by(crs_no = item["course_number"]).\
        filter_by(cat = cat).first()
    if c and c.abstr:
        abstr = c.abstr.split('\n')
        if len(abstr) > 1:
            try:
                abstr = abstr[2].decode("cp1252", "ignore")
            except:
                abstr = c.abstr.decode("cp1252", "ignore")
        else:
            abstr = c.abstr.decode("cp1252", "ignore")
    else:
        abstr = ""

    dept = item["course_number"].split(" ")[0]
    collection_id = DEPARTMENTS[dept]
    # author
    data['metadata'][0]['value'] = item["fullname"]
    # description
    data['metadata'][1]['value'] = abstr
    # title
    data['metadata'][2]['value'] = item["title"]
    # title alternative
    data['metadata'][3]['value'] = item["title_alt"]
    # subject: year
    data['metadata'][4]['value'] = item["year"]
    # subject: term
    data['metadata'][5]['value'] = TERM_LIST[item["term"]]
    uri = "collections/{}/items".format(collection_id)

    #print "data = {}".format(data)
    #print "uri = {}".format(uri)

    manager = Manager()
    new_item = manager.request(uri, "post", data)
    #print "new_item={}".format(new_item)
    #print "id={}".format(new_item['id'])
    return new_item
def main():
    """
    Using the DSpace REST API, delete an item based on ID
    """

    manager = Manager()

    jason = manager.request(
        "items/{}".format(item), "delete"
    )

    print jason
def main():

    uri="items/{}/bitstreams/".format(iid)

    manager = Manager()
    if not test:
        jason = manager.request(
            uri, "post",
            "Rosa_Luxemburg_Huelga_masas_23.pdf",
            phile=phile
        )
        print jason
    else:
        print phile
예제 #4
0
def find_file(phile):
    """
    Using the DSpace REST API, execute a search for a file name
    contained in the dc.title.alternative metadata field.

    Accepts as a argument a file name.
    Returns a json object
    """

    req_dict = {
        "key": "dc.title.alternative",
        "value": "{}".format(phile),
        "language": "en_US"
    }

    manager = Manager()

    jason = manager.request(
        "items/find-by-metadata-field", "post", req_dict
    )

    return jason
예제 #5
0
def home(request, dept=None):
    SESS = get_session_term()
    # current user
    user = request.user
    uid = user.id
    # administrative users
    admin = False
    # division dean or department chair
    dean_chair = None
    # UI display for division deans
    division_name = None
    # code for path for downloads
    division_code = None
    # faculty ID, name, courses
    fid = None
    pfid = None # post faculty ID
    faculty_name = None
    courses = None
    # fetch our departments
    if uid in settings.ADMINISTRATORS:
        admin = True

        sql = '{} ORDER BY dept_table.txt'.format(ACADEMIC_DEPARTMENTS)
        objs = do_esql(sql)
        depts = OrderedDict()
        for o in objs:
            depts[o.dept_code] = {
                'dept_name':o.dept_name, 'dept_code':o.dept_code,
                'div_name': o.div_name, 'div_code': o.div_code
            }
        depts = {'depts':depts}
    else:
        depts, dean_chair, division_name, division_code = chair_departments(uid)
    dept_list = []
    if admin or depts.get('depts'):
        for c,d in depts['depts'].iteritems():
            faculty = department_faculty(c, YEAR)
            dept_list.append({
                'dept_name':d['dept_name'],
                'dept_code':d['dept_code'],
                'div_name':d['div_name'],
                'div_code':d['div_code'],
                'faculty':faculty
            })

    # obtain the courses for department or faculty
    if dept:
        # all faculty courses for department
        courses = sections(code=dept,year=YEAR,sess=SESS)
        dept = academic_department(dept)
        if dept:
            dept = dept[0]
    elif request.method == 'POST' and not request.FILES:
        substr = 'dept_faculty'
        for key,val in request.POST.iteritems():
            if substr in key and val:
                pfid = int(val)
        if pfid:
            fid = pfid

    # this could be a faculty who is deptartment chair but has
    # courses in other department e.g. renaud
    if not fid and not courses:
        fid = uid
    # faculty courses
    if not courses:
        courses = sections(year=YEAR,sess=SESS,fid=fid)
        if courses:
            faculty_name = courses[0][11]

    secciones = []
    if courses:
        for course in courses:
            phile = syllabus_name(course)
            obj = {}
            for n,v in course.items():
                if n in ['crs_title','firstname','lastname']:
                    try:
                        v = u'{}'.format(v.decode('cp1252'))
                    except:
                        pass
                obj[n] = v
            secciones.append({'obj':obj,'phile':phile})

    # file upload
    phile = None
    if request.method=='POST' and request.FILES:
        # complete path to directory in which we will store the file
        syllabi = request.FILES.getlist('syllabi[]')
        # POST does not include empty file fields in [] so we use this
        # hidden field and javascript event to track
        syllabih = request.POST.getlist('syllabih[]')
        h = len(syllabi)
        for i in range (0,len(syllabih)):
            if syllabih[i] == 'True':
                year = request.POST.getlist('year[]')[i]
                sess = request.POST.getlist('sess[]')[i]
                crs_no = request.POST.getlist('crs_no[]')[i]
                code = crs_no.split(' ')[0]
                # chapuza for now until we can figure out what to do
                # with department codes that do not translate to actual
                # departments
                if DEPARTMENT_EXCEPTIONS.get(code):
                    code = DEPARTMENT_EXCEPTIONS.get(code)
                dept = academic_department(code)
                sendero = join(
                    settings.UPLOADS_DIR, year, sess, dept.div_code,
                    dept.dept_code
                )
                # for display at UI level
                dept = None
                syllabus = syllabi[len(syllabi)-h]
                # must be after the above
                h -= 1
                crs_title = request.POST.getlist('crs_title[]')[i]
                filename = request.POST.getlist('phile[]')[i]
                fullname = request.POST.getlist('fullname[]')[i]
                # create our DSpace manager
                manager = Manager()
                # remove existing file if it exists so we can replace it
                # with the current upload
                s =  Search()
                jason = s.file('{}.pdf'.format(filename), TITLE_ALT)
                if jason and jason[0].get('id'):
                    uri='items/{}/'.format(jason[0].get('id'))
                    response = manager.request(
                        uri, 'delete'
                    )
                phile = handle_uploaded_file(
                    syllabus, sendero, filename
                )
                if phile:
                    upload = '{}/{}'.format(sendero, phile)
                    # verify file type is PDF
                    mime = magic.from_file(upload, mime=True)
                    if mime == 'application/pdf' or mime == 'application/octet-stream':
                        # create a new parent item that will contain
                        # the uploaded file
                        item = {
                            'course_number': crs_no,
                            'title': crs_title,
                            'title_alt': phile,
                            'year': year,
                            'term': sess,
                            'fullname': fullname
                        }
                        new_item = create_item(item)
                        # send file to DSpace
                        uri='items/{}/bitstreams/'.format(new_item['id'])
                        response = manager.request(
                            uri, 'post', phile, phile=upload
                        )
                        messages.add_message(
                            request, messages.SUCCESS,
                            'The file was uploaded successfully.',
                            extra_tags='success'
                        )
                    else:
                        messages.add_message(
                            request, messages.ERROR,
                            '''
                                Files must be in PDF format. Please convert
                                your file to PDF and try again.
                            ''',
                            extra_tags='danger'
                        )
                else:
                    messages.add_message(
                        request, messages.ERROR,
                        '''
                            Something has gone awry with the upload.
                            Please try again.
                        ''',
                        extra_tags='danger'
                    )

    return render(
        request, 'home.html', {
            'depts':dept_list,'courses':secciones,'department':dept,
            'faculty_name':faculty_name,'fid':fid,'year':YEAR,
            'sess':TERM_LIST[SESS[0]],'phile':phile,'dean_chair':dean_chair,
            'division':{'name':division_name,'code':division_code},
            'admin':admin
        }
    )