def download_export(project_id,entry_id,export_type): project = Project() project.get(project_id) metadata = project.get_exported_file(entry_id,export_type) file_ = project.get_datafile(str(metadata['file_id'])) response = make_response(file_.read()) response.headers['Content-Description'] = 'Uploaded File' response.headers['Content-Type'] = 'application/%s' % file_.content_type response.headers['Content-Length'] = file_.length response.headers['Content-Disposition'] = 'attachment; filename=%s' % file_.filename return response
def export_single(project_id, entry_id, export_type): project = Project() project.get(project_id) exporter_list = {"json": JSONExporter, "csv": FlatCSVExporter} if export_type == "json": exporter = JSONExporter(project) elif export_type == "csv": exporter = FlatCSVExporter(project) else: raise "bad exporter" exporter.export(entry_id)
def get_data_upload(project_id,entry_id,file_id): # this will allow download of the file. project = Project() project.get(project_id) metadata = project.get_datafile_metadata(entry_id,file_id) response = make_response(project.get_datafile(file_id).read()) response.headers['Content-Description'] = 'Uploaded File' response.headers['Content-Type'] = 'application/%s' % metadata['filename'].split('.')[-1] response.headers['Content-Length'] = metadata['size'] response.headers['Content-Disposition'] = 'attachment; filename=%s' % metadata['filename'] return response
def delete_data_upload(project_id,entry_id,file_id): project = Project() project.get(project_id) try: project.delete_datafile(entry_id,file_id) status = {'status':'Success','message':'completed'} except: status = {'status':'Failed','message':'error deleting file'} return jsonify([status])
def add_entry(project_id): form = EntryForm(csrf_enabled=False) if form.validate_on_submit(): project = Project() project.get(project_id) name = form.name.data description = form.description.data short_name = form.description.data source = form.description.data project.add_entry(name,description,source) return redirect('/project/%s' % project_id) return render_template('entry_create.html',form=form)
def get(self, project_id, entry, entry_id): project = Project() project.get(project_id) model = project.get_entry_collection(entry) if entry_id: id = objectid.ObjectId(str(entry_id)) result = model.query({"_id": id}) else: result = model.all() data = json.dumps(result, default=bson.json_util.default) resp = Response(data, status=200, mimetype="application/json") resp.headers["Link"] = "http://localhost:5000" return resp
def get_entry(project_id,entry): form = EntryUpdateForm() edit = False # entry should be short_name if form.validate_on_submit(): project = Project() description = form.description.data source = form.source.data project.get(project_id) project.update_entry(entry,description,source) return redirect('/entry/%s/%s/' % (project_id,entry)) project = Project() project.find(project_name) return render_template('entry_view.html',project=project,entry=entry, edit=edit,form=form)
def project_entry_create(project_id): form = EntryForm(csrf_enabled=False) edit = False project = Project() project.get(project_id) permission = EditProjectPermission(project_id) if not permission.can(): abort(403) if form.validate_on_submit(): name = form.name.data description = form.description.data source = form.source.data entry_id = project.add_entry(name,description,source) return redirect('/project/%s/' % (project_id)) return render_template('entry_create.html',form=form)
def delete(self, project_id, entry, entry_id): api_key = request.args.get("api_key") if not authorized(api_key, project_id): return jsonify({"status": False}) # if project not in user.user.project: # return jsonify({'status':False}) id = objectid.ObjectId(str(entry_id)) project = Project() project.get(project_id) model = project.get_entry_collection(entry) model.delete({"_id": id}) project.entry_updated() return jsonify({"status": True})
def project_view(project_id): form = ProjectUpdateForm(csrf_enabled=False) project = Project() print project_id project.get(project_id) permission = EditProjectPermission(project_id) edit = False if request.method == 'POST': edit = True if not permission.can(): abort(403) if form.validate_on_submit(): # name is not edited because it bind to the database name project.project.description = form.description.data project.save() return render_template('project_view.html',project=project,form=form,edit=edit,permission=permission)
def post(self, project_id, entry): api_key = request.args.get("api_key") if not authorized(api_key, project_id): return jsonify({"status": False, "message": "user is not authenticated"}) # Lets disable it for now. Until flask-principal is implemented # if project not in user.user.project: # return jsonify({'status':False,'message':'user don nott have access to project'}) project = Project() project.get(project_id) model = project.get_entry_collection(entry) model.insert(request.json) project.entry_updated() return jsonify({"status": True})
def project_entry_detail(project_id,entry_id): # add entry should be a new form, remove from old form permission = EditProjectPermission(project_id) form = EntryUpdateForm(csrf_enabled=False) # we also will need upload form FYI project = Project() project.get(project_id) edit = False print project.project.entry.keys() entry = project.get_entry(entry_id) if form.validate_on_submit(): if not permission.can(): abort(403) description = form.description.data source = form.source.data project.update_entry(entry_id,description,source) edit = True # not to mention we will need a project detail return render_template('entry_view.html',project=project,form=form,edit=edit,entry_id=entry_id,permission=permission)
def export_worker(msg): project = Project() project.get(msg['project_id']) completed = project.export_completed(msg['entry_id'],msg['format']) file_id = '' if completed: print 'task completed, making sure file need to regenerated' metadata = project.get_exported_file(msg['entry_id'],msg['format']) if metadata['file_id']: f = project.get_datafile(metadata['file_id']) uploaded_date = f.upload_date last_updated = project.get_entry_updated() print uploaded_date print last_updated if last_updated > uploaded_date: print 'file need regen' task = export_single.delay(msg['project_id'],msg['entry_id'],msg['format']) print task project.set_exporter_task(msg['entry_id'],msg['format'],task.id) completed = project.export_completed(msg['entry_id'],msg['format']) else: task = export_single.delay(msg['project_id'],msg['entry_id'],msg['format']) project.set_exporter_task(msg['entry_id'],msg['format'],task.id) completed = project.export_completed(msg['entry_id'],msg['format']) while not completed: completed = project.export_completed(msg['entry_id'],msg['format']) yield {'completed':False,'file_id':file_id,'format':msg['format'], 'project_id':msg['project_id'],'entry_id':msg['entry_id']} time.sleep(1) project.get(msg['project_id']) metadata = project.get_exported_file(msg['entry_id'],msg['format']) print metadata['file_id'] f = project.get_datafile(metadata['file_id']) file_id = metadata['file_id'] yield {'completed':True,'file_id':file_id,'format':msg['format'], 'project_id':msg['project_id'],'entry_id':msg['entry_id']}
def loader_task(project_id,entry,file_id): project = Project() project.get(project_id) project.load_datafile(entry,file_id)
def load_data_upload(project_id,entry_id): # This should return json # look at jquery-upload print "getting upload" uploads = request.files.getlist('files[]') print "file length: %d" % len(uploads) project = Project() project.get(project_id) # project add_datafile should return file_id uploaded_all = [] # first what if it is a invalid file, # second what if it failed for uploaded in uploads: print 'filename being uploaded %s' % uploaded.filename try: file_id = project.add_datafile(entry_id,uploaded) except: data = { 'filename':uploaded.filename, 'name':uploaded.filename.replace('.','_'), 'content-type':uploaded.content_type, 'msg':'Invalid File Type, only CSV/Json are supported', 'success':False } uploaded_all.append(data) continue try: task_id = loader_task.delay(project_id,entry_id,file_id) project.set_load_worker(entry_id,file_id,task_id.id) except: data = { 'name':uploaded.filename.replace('.','_'), 'filename':uploaded.filename, 'content-type':uploaded.content_type, 'msg':'Problem processing file', 'success':False, } uploaded_all.append(data) continue test_file = project.get_datafile(file_id) get_url = '/download/%s/%s/' % (project_id,entry_id) delete_url = '/delete/%s/%s/' % (project_id,entry_id) data = { 'success':True, 'msg':'', 'file_id':file_id, 'length':test_file.length, 'name':test_file.name.replace('.','_'), 'filename':test_file.name, 'content-type':test_file.content_type, 'url':get_url, 'delete':delete_url } uploaded_all.append(data) data = json.dumps(uploaded_all) resp = Response(data,status=200,mimetype='application/json') resp.headers['Link'] = 'http://localhost:5000' return resp