Esempio n. 1
0
    def receive(self):
        response = None

        try:
            buf = [self.sock.recv(sniff_len)]
            if not buf[0]:
                raise Unavailable('empty watchman response')

            elen = bser.pdu_len(buf[0])
            rlen = len(buf[0])

            while elen > rlen:
                buf.append(self.sock.recv(elen - rlen))
                rlen += len(buf[-1])

            response = ''.join(buf)
        except socket.timeout:
            raise Unavailable('timed out waiting for response')

        result = None

        try:
            result = bser.loads(response)
        except ValueError, e:
            raise Unavailable('watchman response decode error: %s' % e)
Esempio n. 2
0
    def query(self, *args):
        cmd = bser.dumps(args)
        response = None
        result = None

        sock = self._connect()

        try:
            sock.sendall(cmd)
            buf = [sock.recv(sniff_len)]
            if not buf[0]:
                raise Unavailable('empty watchman response')

            elen = bser.pdu_len(buf[0])
            rlen = len(buf[0])

            while elen > rlen:
                buf.append(sock.recv(elen - rlen))
                rlen += len(buf[-1])

            response = ''.join(buf)
        except socket.timeout:
            raise Unavailable('timed out waiting for response')

        try:
            result = bser.loads(response)
        except ValueError, e:
            raise Unavailable('watchman response decode error: %s' % e)
Esempio n. 3
0
    def _resolvesockname(self):
        # if invoked via a trigger, watchman will set this env var; we
        # should use it unless explicitly set otherwise
        path = os.getenv('WATCHMAN_SOCK')
        if path:
            return path

        cmd = ['watchman', '--output-encoding=bser', 'get-sockname']
        try:
            p = subprocess.Popen(cmd,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 close_fds=True)
        except OSError:
            raise Unavailable('"watchman" executable not in PATH')

        stdout, stderr = p.communicate()
        exitcode = p.poll()

        if exitcode:
            raise Unavailable("watchman exited with code %d" % exitcode)

        result = bser.loads(stdout)
        if 'error' in result:
            raise Unavailable('get-sockname error: %s' % result['error'])

        return result['sockname']
Esempio n. 4
0
    def _resolvesockname(self):
        # if invoked via a trigger, watchman will set this env var; we
        # should use it unless explicitly set otherwise
        path = os.getenv('WATCHMAN_SOCK')
        if path:
            return path

        cmd = ['watchman', '--output-encoding=bser', 'get-sockname']
        try:
            p = subprocess.Popen(cmd,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 close_fds=os.name != 'nt')
        except OSError as e:
            raise WatchmanError('"watchman" executable not in PATH (%s)', e)

        stdout, stderr = p.communicate()
        exitcode = p.poll()

        if exitcode:
            raise WatchmanError("watchman exited with code %d" % exitcode)

        result = bser.loads(stdout)
        if 'error' in result:
            raise WatchmanError('get-sockname error: %s' % result['error'])

        return result['sockname']
Esempio n. 5
0
    def receive(self):
        response = None

        try:
            buf = [self.sock.recv(sniff_len)]
            if not buf[0]:
                raise Unavailable('empty watchman response')

            elen = bser.pdu_len(buf[0])
            rlen = len(buf[0])

            while elen > rlen:
                buf.append(self.sock.recv(elen - rlen))
                rlen += len(buf[-1])

            response = ''.join(buf)
        except socket.timeout:
            raise Unavailable('timed out waiting for response')

        result = None

        try:
            result = bser.loads(response)
        except ValueError, e:
            raise Unavailable('watchman response decode error: %s' % e)
Esempio n. 6
0
    def query(self, *args):
        cmd = bser.dumps(args)
        response = None
        result = None

        sock = self._connect()

        try:
            sock.sendall(cmd)
            buf = [sock.recv(8192)]
            if not buf[0]:
                raise Unavailable('empty watchman response')

            elen = bser.pdu_len(buf[0])
            rlen = len(buf[0])

            while elen > rlen:
                buf.append(sock.recv(elen - rlen))
                rlen += len(buf[-1])

            response = ''.join(buf)
        except socket.timeout:
            raise Unavailable('timed out waiting for response')

        try:
            result = bser.loads(response)
        except ValueError, e:
            raise Unavailable('watchman response decode error: %s' % e)
Esempio n. 7
0
 def munged(self, val, munged):
     enc = bser.dumps(val)
     if isinstance(val, unicode):
         print "# %s  -->  %s" % (val.encode('utf-8'), enc.encode('hex'))
     else:
         print "# %s  -->  %s" % (val, enc.encode('hex'))
     dec = bser.loads(enc)
     self.assertEquals(munged, dec)
Esempio n. 8
0
 def munged(self, val, munged):
     enc = bser.dumps(val)
     if isinstance(val, unicode):
         print "# %s  -->  %s" % (val.encode('utf-8'), enc.encode('hex'))
     else:
         print "# %s  -->  %s" % (val, enc.encode('hex'))
     dec = bser.loads(enc)
     self.assertEquals(munged, dec)
Esempio n. 9
0
 def test_template(self):
     # since we can't generate the template bser output, here's a
     # a blob from the C test suite in watchman
     templ = "\x00\x01\x03\x28" + \
             "\x0b\x00\x03\x02\x02\x03\x04\x6e\x61\x6d\x65\x02" + \
             "\x03\x03\x61\x67\x65\x03\x03\x02\x03\x04\x66\x72" + \
             "\x65\x64\x03\x14\x02\x03\x04\x70\x65\x74\x65\x03" + \
             "\x1e\x0c\x03\x19"
     dec = bser.loads(templ)
     exp = [
         {"name": "fred", "age": 20},
         {"name": "pete", "age": 30},
         {"age": 25}
     ]
     self.assertEquals(exp, dec)
Esempio n. 10
0
    def receive(self):
        buf = [self.transport.readBytes(sniff_len)]
        if not buf[0]:
            raise WatchmanError('empty watchman response')

        elen = bser.pdu_len(buf[0])

        rlen = len(buf[0])
        while elen > rlen:
            buf.append(self.transport.readBytes(elen - rlen))
            rlen += len(buf[-1])

        response = ''.join(buf)
        try:
            res = bser.loads(response)
            return res
        except ValueError as e:
            raise WatchmanError('watchman response decode error: %s' % e)
Esempio n. 11
0
    def receive(self):

        buf = [self.transport.readBytes(sniff_len)]
        if not buf[0]:
            raise WatchmanError('empty watchman response')

        elen = bser.pdu_len(buf[0])
        rlen = len(buf[0])

        while elen > rlen:
            buf.append(self.transport.readBytes(elen - rlen))
            rlen += len(buf[-1])

        response = ''.join(buf)
        try:
            return bser.loads(response)
        except ValueError as e:
            raise WatchmanError('watchman response decode error: %s' % e)
Esempio n. 12
0
 def test_template(self):
     # since we can't generate the template bser output, here's a
     # a blob from the C test suite in watchman
     templ = "\x00\x01\x03\x28" + \
             "\x0b\x00\x03\x02\x02\x03\x04\x6e\x61\x6d\x65\x02" + \
             "\x03\x03\x61\x67\x65\x03\x03\x02\x03\x04\x66\x72" + \
             "\x65\x64\x03\x14\x02\x03\x04\x70\x65\x74\x65\x03" + \
             "\x1e\x0c\x03\x19"
     dec = bser.loads(templ)
     exp = [{
         "name": "fred",
         "age": 20
     }, {
         "name": "pete",
         "age": 30
     }, {
         "age": 25
     }]
     self.assertEquals(exp, dec)
Esempio n. 13
0
 def _loads(self, response):
     return bser.loads(response, False)
Esempio n. 14
0
 def _loads(self, response):
     return bser.loads(response, False)
Esempio n. 15
0
 def roundtrip(self, val):
     enc = bser.dumps(val)
     print "# %s  -->  %s" % (val, enc.encode('hex'))
     dec = bser.loads(enc)
     self.assertEquals(val, dec)
Esempio n. 16
0
 def roundtrip(self, val):
     enc = bser.dumps(val)
     print "# %s  -->  %s" % (val, enc.encode('hex'))
     dec = bser.loads(enc)
     self.assertEquals(val, dec)