code: def upload_file(self, **kwargs):
          
          params = None
          if 'filename' not in kwargs:
              raise AttributeError("Parameter 'filename' must be given")
          else:
              params = {
                  "filename": kwargs['filename']
              }
  
          if 'data' not in kwargs:
              raise AttributeError("Parameter 'data' must be given")
  
          sharename = None
          if 'sharename' not in kwargs:
              share = None
              if 'title' in kwargs:
                  share = self.create_share(title=kwargs['title'])
              else:
                  share = self.create_share()
              sharename = share.sharename
          else:
              sharename = kwargs['sharename']
  
          response = GettRequest().post("/files/%s/create?accesstoken=%s" % (sharename, self.user.access_token()), params)
  
          f = None
          if response.http_status == 200:
              if 'sharename' not in response.response:
                  response.response['sharename'] = sharename
              f = GettFile(self.user, **response.response)
              if f.send_data(data=kwargs['data']):
                  return f
docs: Upload a file to the Gett service. Takes keyword arguments.
  
          Input:
              * ``filename`` the filename to use in the Gett service (required)
              * ``data`` the file contents to store in the Gett service (required) - must be a string
              * ``sharename`` the name of the share in which to store the data (optional); if not given, a new share will be created.
              * ``title`` the share title to use if a new share is created (optional)
  
          Output:
              * A :py:mod:`pygett.files.GettFile` object
  
          Example::
  
              file = client.upload_file(filaname="foo", data=open("foo.txt").read())