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
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
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 } )