/
cherrySD.py
117 lines (88 loc) · 3.42 KB
/
cherrySD.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Universidade Federal de Sao Carlos - Campus Sorocaba
# Trabalho de Sistemas Distribuidos
# Nome Rafael Danilo dos Santos
# Nome Mateus Gomes Barbieri
#webservice
import cherrypy
from cherrypy.lib import static
#template
from jinja2 import Environment, FileSystemLoader
#aws
import boto
import uuid
#dynamo
import boto.dynamodb2
from boto.dynamodb2.fields import HashKey
from boto.dynamodb2.table import Table
from boto.s3.key import Key
#o. system
import os
import random
localDir = os.path.dirname(__file__)
absDir = os.path.join(os.getcwd(), localDir)
env = Environment(loader=FileSystemLoader('templates'))
class WebService(object):
def __init__(self):
self.s3 = boto.connect_s3()
self.bucket_name = "sdbucket-f1fc915f-718d-4a55-bc70-74f7276a24eb"
if(self.s3.lookup(self.bucket_name) == None):
print "Creating new bucket with name: " + self.bucket_name
self.bucket = self.s3.create_bucket(self.bucket_name)
else:
print "Opening bucket with name: " + self.bucket_name
self.bucket = self.s3.get_bucket(self.bucket_name)
self.k = Key(self.bucket)
self.videos = Table('video')
def index(self):
tmpl = env.get_template('index.html')
result_set = self.videos.scan()
self.lista = []
self.keydic = {}
for item in result_set:
self.lista.append(item['key'])
self.keydic[item['key']] = item['id']
# print '\n\n\n'+item['id']+'\n\n\n'
return tmpl.render(lista=self.lista)
index.exposed = True
def download(self,mydownload):
self.k.key = mydownload
DownloadFile = self.k.get_contents_as_string()
# test = self.videos.get_item(id=str(self.id))
# test.delete()
return static.serve_fileobj(DownloadFile,disposition='attachment',content_type=mydownload,name=mydownload)
download.exposed = True
def upload(self, myFile,name,description):
tmpl = env.get_template('upload.html')
self.upname = myFile.filename
self.k.key = self.upname
self.id = random.randint(0, 999999)
self.videos.put_item(data={'id': str(self.id),'name': name,'description': description,'key':myFile.filename,})
print "Uploading some data to " + self.bucket_name + " with key: " + self.k.key
self.k.set_contents_from_file(myFile.file)
size = 0
while True:
data = myFile.file.read(8192)
if not data:
break
size += len(data)
return tmpl.render(tam=size, filename=myFile.filename, type=myFile.content_type)
upload.exposed = True
def description(self,mydownload):
tmpl = env.get_template('description.html')
item = self.videos.get_item(id=self.keydic[mydownload] )
return tmpl.render(mydownload=mydownload,id=item['id'],name=item['name'],description=item['description'],filename=item['key'])
description.exposed = True
def delete(self,mydelete):
tmpl = env.get_template('delete.html')
item = self.videos.get_item(id=self.keydic[mydelete] )
item.delete()
self.k.key = mydelete
self.k.delete()
return tmpl.render()
delete.exposed = True
import os.path
myconf = os.path.join(os.path.dirname(__file__), 'local.conf')
if __name__ == '__main__':
cherrypy.quickstart(WebService(), config=myconf)
else:
cherrypy.tree.mount(WebService(), config=myconf)