| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| """ |
| SPDX-License-Identifier: GPL-3.0-or-later |
| Copyright (c) 2023 Savoir-faire Linux |
| |
| Base class for singleton objects. |
| """ |
| |
| class Singleton: |
| def __init__(self, decorated): |
| self._decorated = decorated |
| |
| def instance(self): |
| try: |
| return self._instance |
| except AttributeError: |
| self._instance = self._decorated() |
| return self._instance |
| |
| def __call__(self): |
| raise TypeError("Singletons must be accessed through `instance()`.") |
| |
| def __instancecheck__(self, inst): |
| return isinstance(inst, self._decorated) |