Skip to content

Instantly share code, notes, and snippets.

@TonsOfFun
Created May 14, 2018 17:30
Show Gist options
  • Select an option

  • Save TonsOfFun/070b6adde7ecc2c8c1e0430db33c1a23 to your computer and use it in GitHub Desktop.

Select an option

Save TonsOfFun/070b6adde7ecc2c8c1e0430db33c1a23 to your computer and use it in GitHub Desktop.
Crypto Smart Camera: Uploading motion captures
import json
import re
import requests
class Note(object):
def __init__(self,
host=None,
title='',
body='',
profile='',
frame=BytesIO(),
frames=BytesIO(),
user_email=None,
user_token=None):
self.profile = profile
self.host = host
self.title = title
self.body = body
self.frame = frame
self.frames = frames
self.user_email = user_email
self.user_token = user_token
# http://picamera.readthedocs.io/en/release-1.12/recipes2.html#custom-outputs
def write(self, stream):
self.frames += stream
def flush(self):
self.create_note()
def get_presigned_post(self):
get_presigned_post_url = self.host +
'/notes/new.json?user_email=' + self.user_email +
'&user_token=' + self.user_token
response = requests.get(get_presigned_post_url)
presigned_post_json = json.loads(response.text)
form_data = presigned_post_json['s3']['form-data']
url = presigned_post_json['s3']['url']
return url, form_data
def form_object_files(self):
file_data = self.frame.getvalue()
if(len(frame) > 0):
filename = 'test.jpg'
mime_type = 'image/jpeg'
else:
file_data = self.frames.getvalue()
filename = 'test.mp4'
mime_type = 'video/mp4'
{ 'file': (filename, file_data, mime_type) }
def post_file(self, url, form_data):
response = requests.post(url, files=self.form_object_files(), data=form_data)
url_re = 'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
return re.findall(url_re, response.text)[0].split('<')[0]
def create_note(self, file_url=None, profile=''):
print("[INFO] getting presigned request...")
url, form_data = self.get_presigned_post()
print("[INFO] uploading file...")
file_url = self.post_file(url, form_data)
form_data = {
'note[title]': self.title,
'note[body]': self.body + ' ' + profile,
'note[file_url]': file_url,
'user_email': self.user_email,
'user_token': self.user_token
}
print("[INFO] creating note...")
response = requests.post(self.host + '/notes', data=form_data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment