<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_shared_files_from_shake(self, shake_id=None, before=None, after=None):
 """ Returns a list of SharedFile objects from a particular shake. Args: shake_id (int):
 Shake from which to get a list of SharedFiles before (str):
 get 10 SharedFile objects before (but not including) the SharedFile given by `before` for the given Shake. after (str):
 get 10 SharedFile objects after (but not including) the SharedFile give by `after' for the given Shake. Returns: List (list) of SharedFiles. """

        if before and after:
            raise Exception("You cannot specify both before and after keys")

        endpoint = '/api/shakes'

        if shake_id:
            endpoint += '/{0}'.format(shake_id)

        if before:
            endpoint += '/before/{0}'.format(before)
        elif after:
            endpoint += '/after/{0}'.format(after)

        data = self._make_request(verb="GET", endpoint=endpoint)
        return [SharedFile.NewFromJSON(f) for f in data['sharedfiles']]