# DO NOT EDIT.
# generated by smc (http://smc.sourceforge.net/)
# from file : apirequest.sm

import statemap


class ApiRequestState(statemap.State):

    def Entry(self, fsm):
        pass

    def Exit(self, fsm):
        pass

    def ApiResponse(self, fsm):
        self.Default(fsm)

    def BlankLine(self, fsm):
        self.Default(fsm)

    def ContentFinished(self, fsm):
        self.Default(fsm)

    def ContentLength(self, fsm):
        self.Default(fsm)

    def ProcessLine(self, fsm, line):
        self.Default(fsm)

    def Default(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write('TRANSITION   : Default\n')
        msg = "\n\tState: %s\n\tTransition: %s" % (
            fsm.getState().getName(), fsm.getTransition())
        raise statemap.TransitionUndefinedException, msg

class MainMap_Default(ApiRequestState):

    def BlankLine(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.BlankLine()\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting blank line")
        finally:
            fsm.setState(endState)

    def ContentFinished(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.ContentFinished()\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting content to be finished")
        finally:
            fsm.setState(endState)

    def ContentLength(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.ContentLength()\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting content-length header")
        finally:
            fsm.setState(endState)

    def ApiResponse(self, fsm):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.ApiResponse()\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting api response")
        finally:
            fsm.setState(endState)

    def ProcessLine(self, fsm, line):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Default.ProcessLine(line)\n")

        endState = fsm.getState()
        fsm.clearState()
        try:
            ctxt.setRequestFinished()
            ctxt.errbackDeferred("Protocol failure - was not expecting needing to process a line")
        finally:
            fsm.setState(endState)

class MainMap_Startup(MainMap_Default):

    def ApiResponse(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.Startup.ApiResponse()\n")

        fsm.getState().Exit(fsm)
        fsm.setState(MainMap.ApiResponseStarted)
        fsm.getState().Entry(fsm)

class MainMap_ApiResponseStarted(MainMap_Default):

    def ContentLength(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.ApiResponseStarted.ContentLength()\n")

        fsm.getState().Exit(fsm)
        fsm.setState(MainMap.ContentPreStarted)
        fsm.getState().Entry(fsm)

class MainMap_ContentPreStarted(MainMap_Default):

    def BlankLine(self, fsm):
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.ContentPreStarted.BlankLine()\n")

        fsm.getState().Exit(fsm)
        fsm.setState(MainMap.ContentStarted)
        fsm.getState().Entry(fsm)

class MainMap_ContentStarted(MainMap_Default):

    def ProcessLine(self, fsm, line):
        ctxt = fsm.getOwner()
        if fsm.getDebugFlag() == True:
            fsm.getDebugStream().write("TRANSITION   : MainMap.ContentStarted.ProcessLine(line)\n")

        if ctxt.add_content(line) == True :
            fsm.getState().Exit(fsm)
            fsm.clearState()
            try:
                ctxt.setRequestFinished()
                ctxt.callbackDeferred(ctxt.getResponse())
            finally:
                fsm.setState(MainMap.Startup)
                fsm.getState().Entry(fsm)
        else:
            endState = fsm.getState()
            fsm.clearState()
            try:
                ctxt.doNothing()
            finally:
                fsm.setState(endState)


class MainMap:

    Startup = MainMap_Startup('MainMap.Startup', 0)
    ApiResponseStarted = MainMap_ApiResponseStarted('MainMap.ApiResponseStarted', 1)
    ContentPreStarted = MainMap_ContentPreStarted('MainMap.ContentPreStarted', 2)
    ContentStarted = MainMap_ContentStarted('MainMap.ContentStarted', 3)
    Default = MainMap_Default('MainMap.Default', -1)

class ApiRequest_sm(statemap.FSMContext):

    def __init__(self, owner):
        statemap.FSMContext.__init__(self)
        self._owner = owner
        self.setState(MainMap.Startup)
        MainMap.Startup.Entry(self)

    def ApiResponse(self):
        self._transition = 'ApiResponse'
        self.getState().ApiResponse(self)
        self._transition = None

    def BlankLine(self):
        self._transition = 'BlankLine'
        self.getState().BlankLine(self)
        self._transition = None

    def ContentFinished(self):
        self._transition = 'ContentFinished'
        self.getState().ContentFinished(self)
        self._transition = None

    def ContentLength(self):
        self._transition = 'ContentLength'
        self.getState().ContentLength(self)
        self._transition = None

    def ProcessLine(self, *arglist):
        self._transition = 'ProcessLine'
        self.getState().ProcessLine(self, *arglist)
        self._transition = None

    def getState(self):
        if self._state == None:
            raise statemap.StateUndefinedException
        return self._state

    def getOwner(self):
        return self._owner

