Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagecell
Path: blob/master/timing/test_scripts/simple_upload_modify_download.py
447 views
1
2
from urllib2 import urlopen
3
from urllib import urlencode
4
import json
5
from random import random
6
from time import sleep, time
7
import sys
8
import numpy
9
from multiprocessing import Pool
10
import contextlib
11
import traceback
12
13
from timing_util import timing, json, json_request
14
15
from sagecell import Session
16
17
code="""
18
print('beginning...')
19
with open('test.txt','r+') as f:
20
s = f.read()
21
f.seek(0)
22
f.write(s.replace('test','finished'))
23
print('ending...')
24
"""
25
26
FILE_CONTENTS = 'This is a test file'
27
FILE_RESULT_CONTENTS = FILE_CONTENTS.replace('test','finished')
28
29
class Transaction(object):
30
def __init__(self, **kwargs):
31
self.custom_timers={}
32
self.BASE_URL=kwargs.get('base_url', 'http://localhost:8080/')
33
self.POLL_INTERVAL=kwargs.get('poll_interval', 0.1)
34
with open('test.txt', 'w') as f:
35
f.write(FILE_CONTENTS)
36
37
def run(self):
38
"""
39
Upload a file, change it, and then download it again
40
"""
41
computation_times=[]
42
response_times=[]
43
44
s=Session(self.BASE_URL)
45
request=s.prepare_execution_request(code,files=['test.txt'])
46
sequence=0
47
with timing(computation_times):
48
with timing(response_times):
49
s.send_execution_request(request)
50
51
done=False
52
while not done:
53
sleep(self.POLL_INTERVAL)
54
with timing(response_times):
55
r=s.output_poll(sequence)
56
if len(r)==0 or 'content' not in r:
57
continue
58
for m in r['content']:
59
sequence+=1
60
if (m['msg_type']=="extension"
61
and m['content']['msg_type']=="files"):
62
returned_file=m['content']['content']['files'][0]
63
if returned_file!='test.txt':
64
print("RETURNED FILENAME NOT CORRECT")
65
raise ValueError("Returned filename not correct: %s"%returned_file)
66
with timing(response_times):
67
f=s.get_file(returned_file)
68
if f!=FILE_RESULT_CONTENTS:
69
print("RETURNED FILE CONTENTS NOT CORRECT")
70
raise ValueError("Returned file contents not correct: %s"%f)
71
# if we've made it this far, we're done
72
done=True
73
break
74
75
self.custom_timers['Computation']=computation_times
76
self.custom_timers['Response']=response_times
77
78
__all__=['Transaction']
79
80
if __name__ == '__main__':
81
trans = Transaction()
82
trans.run()
83
print(trans.custom_timers)
84
85