docs: def grant_user_access( self, uid, rid, expire_datetime = None, send_email=False ):
          '''
              Takes a user id and resource id and records a grant of access to that reseource for the user.
              If no expire_date is set, we'll default to 24 hours.
              If send_email is set to True, Tinypass will send an email related to the grant.
              No return value, raises ValueError.
          '''
          path =  "/api/v3/publisher/user/access/grant"
          
          # convert expire_date to gmt seconds
          if expire_datetime:
              expires_seconds = calendar.timegm(expires_datetime.timetuple())
          else:
              expires_seconds = calendar.timegm(datetime.datetime.now().timetuple()) + (60*60*24)
  
          data = {
              'api_token': self.api_token, 
              'aid': self.app_id,
              'rid': rid,
              'uid': uid,
              'expire_date': expires_seconds,
              'send_email': send_email,
          }
  
          r = requests.get( self.base_url + path, data=data )
  
          if r.status_code != 200:
              raise ValueError( path + ":" + r.reason )