Skip to content

Commit

Permalink
- update for new MarGo rpc interface
Browse files Browse the repository at this point in the history
  • Loading branch information
DisposaBoy committed Feb 25, 2012
1 parent 6df1961 commit a40f0b7
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 26 deletions.
2 changes: 1 addition & 1 deletion gscomplete.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def on_query_completions(self, view, prefix, locations):
# afaik we must return something in order to disable st2's word completion

comps = []
impaths, _ = margo.request('/import-paths', {}, [])
impaths, _ = margo.do({'call': 'import_paths'}, [])
for nm in impaths:
comps.append(('%s\t %s' % (nm, gs.CLASS_PREFIXES.get('package', '')), nm))
return comps
Expand Down
3 changes: 2 additions & 1 deletion gspalette.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ def act_jump_to(self, loc):
def act_list_declarations(self, _=None):
view = gs.active_valid_go_view(self.window)
if view:
decls, err = margo.request('/declarations', {
decls, err = margo.do({
'call': 'declarations',
'filename': view.file_name(),
'src': view.substr(sublime.Region(0, view.size()))
}, [])
Expand Down
59 changes: 35 additions & 24 deletions margo.py
Original file line number Diff line number Diff line change
@@ -1,48 +1,59 @@
import subprocess, httplib, urllib, json, traceback
import subprocess, socket, json, traceback
import gscommon as gs

def isinst(v, base):
return isinstance(v, type(base))

def sendreq(margo_addr, path, a, h):
conn = httplib.HTTPConnection(margo_addr)
conn.request("POST", path, a, h)
return conn

def request(path, args, default):
if not gs.setting('margo_enabled', False):
return (default, '')

margo_cmd = list(gs.setting('margo_cmd', []))
margo_addr = gs.setting('margo_addr')

if not margo_cmd or not margo_addr:
err = 'Missing `margo_cmd` or `margo_addr`'
gs.notice("MarGo", err)
return (default, err)
def send(sck_addr, a):
sck = socket.socket()
sck.connect(sck_addr)
sf = sck.makefile()
json.dump(a, sf)
sf.flush()
return json.load(sf)

def do(a, default):
resp = None
try:
args = urllib.urlencode(args)
h = {'Content-type': 'application/x-www-form-urlencoded'}
if not gs.setting('margo_enabled', False):
return (default, '')

margo_cmd = list(gs.setting('margo_cmd', []))
if not margo_cmd:
err = 'Missing `margo_cmd`'
gs.notice("MarGo", err)
return (default, err)

margo_addr = gs.setting('margo_addr')
if not margo_addr:
err = 'Missing `margo_addr`'
gs.notice("MarGo", err)
return (default, err)

sck_addr = margo_addr.split(':')
if len(sck_addr) != 2:
err = 'Invalid `margo_addr`... must be in the format: `host:port`'
gs.notice("MarGo", err)
return (default, err)
sck_addr = (sck_addr[0], int(sck_addr[1]))

try:
conn = sendreq(margo_addr, path, args, h)
resp = send(sck_addr, a)
except:
margo_cmd.extend(["-d", "-http", margo_addr])
margo_cmd.extend(["-d", "-addr", margo_addr])
gs.notice('MarGo', 'Attempting to start MarGo: `%s`' % ' '.join(margo_cmd))
_, err = gs.runcmd(margo_cmd)
if err:
gs.notice('MarGo', err)
conn = sendreq(margo_addr, path, args, h)
resp = json.load(conn.getresponse())
resp = send(sck_addr, a)
except:
err = traceback.format_exc()
gs.notice("MarGo", err)
return (default, err)

if not isinst(resp, {}):
resp = {}
if not isinst(resp.get("error"), ""):
if not isinst(resp.get("error"), u""):
resp["error"] = "Invalid Response"
if not isinst(resp.get("data"), default):
resp["data"] = default
Expand Down

0 comments on commit a40f0b7

Please sign in to comment.