-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmope_client.py
100 lines (85 loc) · 2.55 KB
/
mope_client.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
import sublime
import json
import webbrowser
import urllib.request as request
from .logger import *
from .http_utils import *
class MopeClient:
def __init__(self):
self.interface = ""
self.port = 0
self.connected = False
def baseUrl(self):
return "%s:%d/mope"%(self.interface, self.port)
def projectUrl(self):
return self.baseUrl()+"/project/"+str(self.projectId)
def connect(self, interface, port, projectJson):
log.debug("Client#connect called with %s %d %s" % (interface, port, projectJson))
self.interface = "http://"+interface
self.port = port
self.connected = True
sResp = json_request(self.baseUrl()+"/connect", projectJson)
self.projectId = int(sResp.content)
log.debug("proj id: "+str(self.projectId))
def disconnect(self):
if self.isConnected():
self.connected = False
requ = request.Request(self.projectUrl()+"/disconnect", method="POST")
resp = request.urlopen(requ)
log.info("disconnecting returned: {}".format(resp.getcode()))
def isConnected(self):
return self.connected
def compile(self, file):
if self.isConnected():
jsData = json.dumps({"path": file})
sResp = json_request(self.projectUrl()+"/compile", jsData)
return sResp.content_as_map()
def getCompletions(self, file, line, column, word):
if self.isConnected():
dataMap = {
"file": file,
"position": {
"line": line,
"column": column
},
"word": word
}
jsData = json.dumps(dataMap)
log.debug("get completions for "+jsData)
sResp = json_request(self.projectUrl()+"/completion", jsData)
return sResp.content_as_map()
def openDocumentation(self, model):
if self.isConnected():
uri = self.projectUrl()+"/doc?class=%s"%(model)
log.info("documentation for "+model+" at "+uri)
webbrowser.open(uri)
def checkModel(self, file):
if self.isConnected():
jsData = json.dumps({"path": file})
sResp = json_request(self.projectUrl()+"/checkModel", jsData)
return sResp.content
def sourceOf(self, file, line, column, word):
if self.isConnected():
dataMap = {
"file": file,
"position": {
"line": line,
"column": column
},
"word": word
}
jsData = json.dumps(dataMap)
sResp = json_request(self.projectUrl()+"/declaration", jsData)
return sResp.content_as_map()
def typeOf(self, file, line, column, word):
if self.isConnected():
dataMap = {
"file": file,
"position": {
"line": line,
"column": column
},
"word": word
}
log.debug("src of "+str(dataMap))
return json_request(self.projectUrl()+"/typeOf", json.dumps(dataMap)).content_as_map()