'Initialize RequestContext.
:param read_deleted: \'no\' indicates deleted records are hidden, \'yes\'
indicates deleted records are visible, \'only\' indicates that
*only* deleted records are visible.
:param overwrite: Set to False to ensure that the greenthread local
copy of the index is not overwritten.'

def __init__(self, user_id=None, project_id=None, is_admin=None, read_deleted='no', project_name=None, remote_address=None, timestamp=None, quota_class=None, service_catalog=None, **kwargs):

    kwargs.setdefault('user', user_id)
    kwargs.setdefault('tenant', project_id)
    super(RequestContext, self).__init__(is_admin=is_admin, **kwargs)
    self.project_name = project_name
    self.read_deleted = read_deleted
    self.remote_address = remote_address
    if (not timestamp):
        timestamp = timeutils.utcnow()
    elif isinstance(timestamp, six.string_types):
        timestamp = timeutils.parse_isotime(timestamp)
    self.timestamp = timestamp
    self.quota_class = quota_class
    if service_catalog:
        self.service_catalog = [s for s in service_catalog if (s.get('type') in ('identity', 'compute', 'object-store', 'image'))]
    else:
        self.service_catalog = []
    if (self.is_admin is None):
        self.is_admin = policy.check_is_admin(self.roles, self)
    elif (self.is_admin and ('admin' not in self.roles)):
        self.roles.append('admin')
