docs: def generate(self):
          """Generate a signed request from this instance."""
          payload = {
              'algorithm': 'HMAC-SHA256'
          }
  
          if self.data:
              payload['app_data'] = self.data
  
          if self.page:
              payload['page'] = {}
  
              if self.page.id:
                  payload['page']['id'] = self.page.id
  
              if self.page.is_liked:
                  payload['page']['liked'] = self.page.is_liked
  
              if self.page.is_admin:
                  payload['page']['admin'] = self.page.is_admin
  
          if self.user:
              payload['user'] = {}
  
              if self.user.country:
                  payload['user']['country'] = self.user.country
  
              if self.user.locale:
                  payload['user']['locale'] = self.user.locale
  
              if self.user.age:
                  payload['user']['age'] = {
                      'min': self.user.age[0],
                      'max': self.user.age[-1]
                  }
  
              if self.user.oauth_token:
  
                  if self.user.oauth_token.token:
                      payload['oauth_token'] = self.user.oauth_token.token
  
                  if self.user.oauth_token.expires_at is None:
                      payload['expires_in'] = 0
                  else:
                      payload['expires_in'] = int(time.mktime(self.user.oauth_token.expires_at.timetuple()))
  
                  if self.user.oauth_token.issued_at:
                      payload['issued_at'] = int(time.mktime(self.user.oauth_token.issued_at.timetuple()))
  
          if self.user.id:
              payload['user_id'] = self.user.id
  
          encoded_payload = base64.urlsafe_b64encode(
              json.dumps(payload, separators=(',', ':')).encode('utf-8')
          )
  
          encoded_signature = base64.urlsafe_b64encode(hmac.new(
              self.application_secret_key.encode('utf-8'),
              encoded_payload,
              hashlib.sha256
          ).digest())
  
          return '%(signature)s.%(payload)s' % {
              'signature': encoded_signature,
              'payload': encoded_payload
          }