Changeset fffabad for protocols/skype


Ignore:
Timestamp:
2013-01-13T11:41:21Z (8 years ago)
Author:
Miklos Vajna <vmiklos@…>
Branches:
master
Children:
9ec6b36
Parents:
4cb21b7
Message:

skyped: add mock mode

Location:
protocols/skype
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • protocols/skype/skyped.py

    r4cb21b7 rfffabad  
    33#   skyped.py
    44
    5 #   Copyright (c) 2007, 2008, 2009, 2010, 2011 by Miklos Vajna <vmiklos@frugalware.org>
     5#   Copyright (c) 2007-2013 by Miklos Vajna <vmiklos@frugalware.org>
    66#
    77#   This program is free software; you can redistribute it and/or modify
     
    276276                sock.close()
    277277
     278class MockedSkype:
     279        """Mock class for Skype4Py.Skype(), in case the -m option is used."""
     280        def __init__(self, mock):
     281                sock = open(mock)
     282                self.lines = sock.readlines()
     283       
     284        def SendCommand(self, c):
     285                pass
     286
     287        def Command(self, msg, Block):
     288                if msg == "PING":
     289                        return ["PONG"]
     290                line = self.lines[0].strip()
     291                if not line.startswith(">> "):
     292                        raise Exception("Corrupted mock input")
     293                line = line[3:]
     294                if line != msg:
     295                        raise Exception("'%s' != '%s'" % (line, msg))
     296                self.lines = self.lines[1:] # drop the expected incoming line
     297                ret = []
     298                while True:
     299                        # and now send back all the following lines, up to the next expected incoming line
     300                        if len(self.lines) == 0:
     301                                break
     302                        if self.lines[0].startswith(">> "):
     303                                break
     304                        if not self.lines[0].startswith("<< "):
     305                                raise Exception("Corrupted mock input")
     306                        ret.append(self.lines[0][3:].strip())
     307                        self.lines = self.lines[1:]
     308                return ret
     309
    278310class SkypeApi:
    279         def __init__(self):
    280                 self.skype = Skype4Py.Skype()
    281                 self.skype.OnNotify = self.recv
    282                 self.skype.Client.Start()
     311        def __init__(self, mock):
     312                if not mock:
     313                        self.skype = Skype4Py.Skype()
     314                        self.skype.OnNotify = self.recv
     315                        self.skype.Client.Start()
     316                else:
     317                        self.skype = MockedSkype(mock)
    283318
    284319        def recv(self, msg_text):
     
    335370                        c = self.skype.Command(e, Block=True)
    336371                        self.skype.SendCommand(c)
    337                         self.recv(c.Reply)
     372                        if hasattr(c, "Reply"):
     373                                self.recv(c.Reply) # Skype4Py answer
     374                        else:
     375                                for i in c: # mock may return multiple iterable answers
     376                                        self.recv(i)
    338377                except Skype4Py.SkypeError:
    339378                        pass
     
    360399                # this will be read first by the input handler
    361400                self.buf = None
     401                self.mock = None
    362402
    363403
     
    422462        options = Options()
    423463        try:
    424                 opts, args = getopt.getopt(sys.argv[1:], "c:dhH:l:np:v", ["config=", "debug", "help", "host=", "log=", "nofork", "port=", "version"])
     464                opts, args = getopt.getopt(sys.argv[1:], "c:dhH:l:m:np:v", ["config=", "debug", "help", "host=", "log=", "mock=", "nofork", "port=", "version"])
    425465        except getopt.GetoptError:
    426466                options.usage(1)
     
    436476                elif opt in ("-l", "--log"):
    437477                        options.log = arg
     478                elif opt in ("-m", "--mock"):
     479                        options.mock = arg
    438480                elif opt in ("-n", "--nofork"):
    439481                        options.daemon = False
     
    486528                server(options.host, options.port)
    487529        try:
    488                 skype = SkypeApi()
     530                skype = SkypeApi(options.mock)
    489531        except Skype4Py.SkypeAPIError, s:
    490532                sys.exit("%s. Are you sure you have started Skype?" % s)
  • protocols/skype/skyped.txt

    r4cb21b7 rfffabad  
    3939        Set the log file in background mode (default: none)
    4040
     41-m, --mock=<file>::
     42        Mock mode: replay session from file, instead of connecting to Skype.
     43
    4144-n, --nofork::
    4245        Don't run as daemon in the background
Note: See TracChangeset for help on using the changeset viewer.