[TxMt] Re: Creating a global variable via bundle command (using Python)

Michele Pasin michele.pasin at gmail.com
Wed Sep 16 18:03:32 UTC 2015


Hi Allan,

apologies for resurrecting this very old thread, but I'm kind of stuck
again.

In short, I'm developing a bundle for sending messages to the Extempore
compiler (http://extempore.moso.com.au/;
http://benswift.me/2012/09/26/interacting-with-the-extempore-compiler/)
which should happen via a TCP socket connection.

Ideally, I'd like to create the following commands:

a) start the server  [done, see
https://github.com/lambdamusic/extempore-bundle]
b) set up a reusable socket connection object
c) evaluate expressions by sending them to the server using the connection
object

I've set up environment variables in Textmate to hold my connection
settings; also, I've created a variable called EXTEMPORE_CONNECTION which
in theory should keep the pickled version of my server socket.

Here's my Python command:

>>>>>>
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, socket
import pickle

xtm_host = str(os.environ.get('EXTEMPORE_HOST', "127.0.0.1"))
xtm_port = int(os.environ.get('EXTEMPORE_PORT', 7099))

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

HOST = xtm_host
PORT = xtm_port

sock.connect((HOST, PORT))
data = sock.recv(1024)
print(data)  # welcome message, works.

os.environ['EXTEMPORE_CONNECTION'] = pickle.dumps(sock, -1)  # *fails*

>>>>>>>

The problem is, Python's pickle doesn't support all kinds of objects, and
sockets are among those (see
http://stackoverflow.com/questions/2204155/why-am-i-getting-an-error-about-my-class-defining-slots-when-trying-to-pickl
)

So I wonder if there's another way of approaching the problem; or, if by
any chance, the same approach done via another language (eg Ruby) would not
encounter any limitation..

Thanks in advance for the help,

Michele









--------
Michele Pasin
Email: michele.pasin at gmail.com
Web:   www.michelepasin.org
--------

On 14 August 2013 at 09:55, Allan Odgaard <mailinglist at textmate.org> wrote:

> On 14 Aug 2013, at 2:41, Michele Pasin wrote:
>
> […] when I do this
>> os.environ['TM_PROJECT_UUID'] = someobject
>> I get an error […]
>>
>
> You can’t assign to environment variables. The variable is to be used as a
> key into a database, in the simplest case something like:
>
>     uuid = os.environ['TM_PROJECT_UUID'] # Same when window is the same
>     file = os.path.join(tempfile.gettempdir(), "tm_«your_command»_" + uuid
> + ".pickle")
>     pickle.dump(someobject, file)
>
> For each invocation of your command, ‘uuid’ will be the same, as long as
> it’s called for the same (project) window.
>
> Your command would start by testing if ‘file’ already exists, and if so,
> read ‘someobj’ by unpickling it.
>
>
> _______________________________________________
> textmate mailing list
> textmate at lists.macromates.com
> http://lists.macromates.com/listinfo/textmate
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macromates.com/textmate/attachments/20150916/93f02d99/attachment.html>


More information about the textmate mailing list