¡@

Home 

OpenStack Study: local.py

OpenStack Index

**** CubicPower OpenStack Study ****

# Copyright 2011 OpenStack Foundation.

# All Rights Reserved.

#

# Licensed under the Apache License, Version 2.0 (the "License"); you may

# not use this file except in compliance with the License. You may obtain

# a copy of the License at

#

# http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

# License for the specific language governing permissions and limitations

# under the License.

"""Local storage of variables using weak references"""

import threading

import weakref

**** CubicPower OpenStack Study ****

class WeakLocal(threading.local):

**** CubicPower OpenStack Study ****

    def __getattribute__(self, attr):

        rval = super(WeakLocal, self).__getattribute__(attr)

        if rval:

            # NOTE(mikal): this bit is confusing. What is stored is a weak

            # reference, not the value itself. We therefore need to lookup

            # the weak reference and return the inner value here.

            rval = rval()

        return rval

**** CubicPower OpenStack Study ****

    def __setattr__(self, attr, value):

        value = weakref.ref(value)

        return super(WeakLocal, self).__setattr__(attr, value)

# NOTE(mikal): the name "store" should be deprecated in the future

store = WeakLocal()

# A "weak" store uses weak references and allows an object to fall out of scope

# when it falls out of scope in the code that uses the thread local storage. A

# "strong" store will hold a reference to the object so that it never falls out

# of scope.

weak_store = WeakLocal()

strong_store = threading.local()