reservation plugin - unbound request (unclean
[unfold.git] / portal / unboundreservationview_b.py
1 from .                          import forms
2 from django.shortcuts           import render, render_to_response
3 from django.template            import RequestContext
4 from django.template.loader     import render_to_string
5 from django.views.generic       import View
6 from django.core.mail           import send_mail
7 from myslice.configengine       import ConfigEngine
8 from unfold.loginrequired       import FreeAccessView
9 from ui.topmenu                 import topmenu_items, the_user
10 from myslice.theme              import ThemeView
11 from django.contrib.staticfiles.urls import staticfiles_urlpatterns
12 #from portal.forms               import ReputationForm
13 import json, ast
14 from pprint                     import pprint
15 from manifold.core.query        import Query
16 from manifoldapi.manifoldapi    import execute_query,execute_admin_query
17 from portal.actions             import is_pi, create_slice, create_pending_slice, clear_user_creds
18 from django.utils               import simplejson
19 from django.http                import *
20 import numpy
21 import json
22 import logging
23 import StringIO
24 import pycurl
25 from apgl.graph import *
26 from apgl.generator.ErdosRenyiGenerator import ErdosRenyiGenerator
27 from django.views.decorators.csrf import csrf_exempt
28 import time
29 import datetime
30 import calendar
31 # splitting the 2 functions done here
32 # GET is for displaying the empty form
33 # POST is to process it once filled - or show the form again if anything is missing
34 def create_post(request):
35     print(request.user)
36     if request.method == 'POST':
37         post_text = request.POST.get('the_post')
38         response_data = {}
39
40         post = Post(text=post_text, author=request.user)
41         post.save()
42
43         response_data['result'] = 'Create post successful!'
44        
45
46     return HttpResponse(
47            json.dumps(response_data),
48            content_type="application/json"
49            )
50                                                
51
52 def response_mimetype(request):
53     
54     
55     if "application/json" in request.META['HTTP_ACCEPT']:
56         return "application/json"
57     else:
58         return "text/plain"
59
60 def connected_graph(vert,possib):
61     
62     ################################################
63     # Connected graph calculation 
64     #
65     #    Requirements for ErdosRenyiGenerator python function
66     #
67     #    apt-get install gfortran libopenblas-dev liblapack-dev
68     #    pip install numpy
69     #    pip install scipy
70     #    pip install apgl
71     ################################################## 
72         p = possib
73         vertices= vert
74 #graph = SparseGraph(VertexList(vertices, 1))
75 #generator = ErdosRenyiGenerator(p, selfEdges=False)
76
77 #for i in range(0,10):
78         found = False;
79
80         time_start = time.time()
81         iter_time = 20
82         while not found and time.time()-time_start < iter_time:
83                 graph = SparseGraph(VertexList(vertices, 1))
84                 generator = ErdosRenyiGenerator(p, selfEdges=False)
85                 graph = generator.generate2(graph)
86                 #print 'getAllEdges'
87                 #print graph.getAllEdges()
88                 #print '-----------'
89
90                 connected_list=[]
91                 #print graph.findConnectedComponents()
92                 for list in graph.findConnectedComponents():
93                     if len(list)==vertices:
94                         connected_list=list
95                         break
96                 if len(connected_list)==vertices:
97                     links = {}
98                     edge_lst =  graph.getAllEdges()
99                     for item in range(0, len(edge_lst)):
100                         links[item]=str(edge_lst[item][0]), str(edge_lst[item][1])
101                     break
102         if len(connected_list)==vertices:
103             return links
104         else:
105             return ("not_found")
106         #print graph.getAllEdges()
107         #print connected_list
108         return links
109
110
111 class UnboundReservationView (FreeAccessView, ThemeView):
112         def my_view(request):
113
114             preset_form = forms.PresetListForm()
115
116             return render_to_response('services.html', {'array': json.dumps(data, cls=SpecialEncoder),'preset_form': preset_form,
117         })
118         def create_post(request):
119             print(request.user) 
120             if request.method == 'POST':
121                 print("mlsllslssll,sls*************")
122                 post_text = request.POST.get('the_post')
123                 response_data = {}
124
125                 post = Post(text=post_text, author=request.user)
126                 post.save()
127
128                 response_data['result'] = 'Create post successful!'
129        
130
131                 return HttpResponse(
132                 json.dumps(response_data),
133                 content_type="application/json"
134                                                )
135             else:
136                 return HttpResponse(
137                 json.dumps({"nothing to see": "this isn't happening"}),
138                 content_type="application/json"
139         )
140     
141         def quiz_guess(request, fact_id):   
142             message = {"fact_type": "", "fact_note": ""}
143             if request.is_ajax():
144                 fact = get_object_or_404(Fact, id=fact_id)
145                 message['fact_type'] = fact.type
146                 message['fact_note'] = fact.note
147             else:
148                 message = "You're the lying type, I can just tell."
149                 json = simplejson.dumps(message)
150                 return HttpResponse(json, mimetype='application/json')
151         def default_env (self):
152             return { 
153                     'MANIFOLD_URL':ConfigEngine().manifold_url(),
154                     }       
155         def post (self, request):
156                 env = self.default_env()
157                 print(request.user)
158                 print(request.POST["b"])
159                 
160                 body1= request.POST["mitsos"]
161                 user_urn= request.POST["name"]
162                 user_urn=str(user_urn)
163                 print(user_urn)
164                 buffer = StringIO.StringIO()
165                 json_data=open('/home/coyiotis/test.json').read()
166                 data1 = json.loads(json_data)
167                 data=json.dumps(body1)
168                 data2=str(unicode(data))
169                 json_data_1 = json.loads(body1)
170                 json_data_1=json.dumps(json_data_1)
171                 json_data_1 =str(unicode(json_data_1))
172                 #print(data)       
173                 print('*******************************nikos')   
174                 #print(json_data_1)
175                 #print(json_data_1['data'])
176                 if request.POST["b"]=="1":
177                     c = pycurl.Curl()
178                     c.setopt(pycurl.URL, 'https://194.177.207.2:8001/mapper/')
179                     c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json','Accept: application/json'])
180                     c.setopt(pycurl.POST, 1)
181                     c.setopt(pycurl.SSL_VERIFYPEER, False)
182                     c.setopt(pycurl.SSL_VERIFYHOST, False)        
183                     c.setopt(pycurl.POSTFIELDS, body1)
184                     c.setopt(pycurl.WRITEDATA, buffer)
185                     c.perform()
186                     c.close()
187                     global body
188                     body = buffer.getvalue()
189                         # Body is a string in some encoding.
190                         # In Python 2, we can print it without knowing what the encoding is.
191                 #print(body)    
192                     env['responsejson'] =  json.dumps(body)
193                 
194                     body = body.replace('\n', '')
195                 #body = body.replace(' ', '')
196                 #print(json.dumps(body))
197                     print(body)
198                 #j = json.loads(body)
199                 ##print json_string
200                 #parent =  j["resource_response"]
201                 #for item in parent:
202                   #  print item["name"]
203                   #  print item["type"]
204
205                     global decoded
206                     decoded = json.loads(body)
207  
208                 # pretty printing of json-formatted string
209                     print json.dumps(decoded, sort_keys=True, indent=4)
210  
211                     print "JSON parsing example: ", decoded['resource_response']
212                 #print len(item_dict['result'][0]['run'])
213                 else:
214                     leases_list=[]
215                     slice_params={}
216                     resources=[]
217                     final_params={}
218                 
219                     for x in xrange(0, len(decoded['resource_response']['resources'])):
220                         end_time=decoded['resource_response']['resources'][x]['valid_until']
221                         start_time=decoded['resource_response']['resources'][x]['valid_from']
222                     #s = "01/12/2011"
223                         start_time=int(time.mktime(datetime.datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S %Z").timetuple()))
224                         end_time=int(time.mktime(datetime.datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S %Z").timetuple()))
225                         print(start_time)
226                         print(end_time)
227                     #print(calendar.timegm(start_time.utctimetuple()))
228                    
229                         urn=decoded['resource_response']['resources'][x]['urn']
230                         slice_params = {
231                                     'resource'         : urn,
232                                     'start_time'       : start_time,
233                                     'end_time'         : end_time
234                         }
235                         leases_list.append(slice_params)
236                         resources.append(urn)
237                    
238                     print("chrysaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") 
239                     for keys,values in slice_params.items():
240                         print(keys)
241                         print(values)
242  
243                         final_params = {
244                         'resource'        : resources,
245                         'lease'        : leases_list
246                     }    
247                     #final_params=str(final_params)
248                 #final_params=[{'resource': resources, 'leases':leases_list}]
249                 #print(final_params)
250                 
251                     print(user_urn)             
252                     final_params= ast.literal_eval(json.dumps(final_params))
253                     query = Query.update('slice').filter_by('slice_hrn', '==', user_urn).set(final_params).select('slice_hrn')
254                 #query = Query.update('myslice:slice').filter_by('slice_hrn', '==', user_urn).set(slice_params).select('slice_hrn')
255                     results = execute_query(request,query)
256                     print("________________________________________________________________________________")
257                     print(results)
258                     print('________________________________________________________________________________')
259                     print(query)
260                 return HttpResponse(json.dumps(body), mimetype='application/json')
261                 #return render_to_response('workflow.html', env, context_instance=RequestContext(request))
262                 #return render(request, 'workflow.html', {"variable_int" : 12})
263         def get (self, request):
264                 buffer = StringIO.StringIO()
265                 print("mlsllslssll,sls*************3")
266                 #message = {"fact_type": "", "fact_note": ""}
267                 childs = []
268                 
269                 
270                                 
271                    
272                     
273                 if request.is_ajax():
274                     print("mlsllslssll,sls*************4")
275                         #fact = get_object_or_404(Fact, id=fact_id)
276                     #    message['fact_type'] = fact.type
277                     #    message['fact_note'] = fact.note
278                 #else:
279                 #       message = "You're the lying type, I can just tell."
280                 #       json = simplejson.dumps(message)            
281                 if request.GET.has_key('node-num2'):
282                         child1=""
283                         child="{\"type\":\"Node\",\"valid_form\":"+request.GET['fromdate']+",\"valid_until\":"+request.GET['todate']+",\"exclusive\": true}"
284                         for index in range(int(request.GET['node-num'])):
285                                             childs.append(child)
286                                             if index>1:
287                                                         child1=child1+",{\"type\":\"Node\",\"valid_form\":"+"\""+request.GET['fromdate']+"\""+",\"valid_until\":"+"\""+request.GET['todate']+"\""+",\"exclusive\":true}"
288                                             if index==0:
289                                                         child1="{\"type\":\"Node\",\"valid_form\":"+"\""+request.GET['fromdate']+"\""+",\"valid_until\":"+"\""+request.GET['todate']+"\""+",\"exclusive\":true}"
290                         
291                         
292                         
293                         response_dict={}
294                         jchilds="{\"resources\":["+child1+"]\"\"}"
295                         #print(request.GET['jsondata'])
296                         c = pycurl.Curl()
297                         c.setopt(pycurl.URL, 'https://194.177.207.2:8001/mapper/')
298                         c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json','Accept: application/json'])
299                         c.setopt(pycurl.POST, 1)
300                         c.setopt(pycurl.SSL_VERIFYPEER, False)
301                         c.setopt(pycurl.SSL_VERIFYHOST, False)        
302                         c.setopt(pycurl.POSTFIELDS, request.GET['jsondata'])
303                         c.setopt(pycurl.WRITEDATA, buffer)
304                         c.perform()
305                         c.close()
306                                                 
307                         body = buffer.getvalue()
308                         
309                         #return HttpResponse(json.dumps(body), mimetype='application/json')
310                         #response_dict = {'1':request.GET['node-
311                         #jnum'], '2':request.GET['node-num2']}
312                         #links = connected_graph(int(request.GET['node-num']),float(request.GET['node-num2'])/100)
313             #===================================================================
314                 #for item in range(0,len(links)):
315                 #child[item]=links[item]
316             #=====  =============================================================
317                         #print response_dict
318                         jsonchilds=json.dumps(childs)
319                         links=0
320                         json_stuff = simplejson.dumps({'links': links, 'body': body})
321                         print '**********************************BP 1 *********************************'+request.GET['jsondata']
322                         print '**********************************BP 2 *********************************'+body
323                         if links == 'not_found':
324                         #return HttpResponse(simplejson.dumps(['false']), content_type = response_mimetype(self.request))
325                                 return HttpResponse(content='false', mimetype=DEFAULT_CONTENT_TYPE)
326                         else:
327                                 return HttpResponse(json_stuff, content_type = response_mimetype(self.request))
328                 #return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript')
329                 #return HttpResponse(json, mimetype='application/json')
330                 return self._display (request)
331         
332         def _display (self, request):
333                 return render(request, 'workflow_b.html', {
334                 'topmenu_items': topmenu_items('Unbound Request', request),
335                 'username': the_user (request)
336                 })
337  
338         
339
340
341