$56 GRAYBYTE WORDPRESS FILE MANAGER $94

SERVER : in-mum-web1330.main-hosting.eu #1 SMP Mon Feb 10 22:45:17 UTC 2025
SERVER IP : 88.222.243.57 | ADMIN IP 216.73.216.63
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/alt/python311/lib/python3.11/site-packages/pyroute2/ndb/

HOME
Current File : /opt/alt/python311/lib/python3.11/site-packages/pyroute2/ndb//noipdb.py
import logging

from pyroute2.ndb.main import NDB

log = logging.getLogger(__name__)


class ObjectProxy(dict):
    def __init__(self, obj):
        self._obj = obj

    def __getattribute__(self, key):
        if key[:4] == 'set_':

            def set_value(value):
                self[key[4:]] = value
                return self

            return set_value
        try:
            return self[key]
        except KeyError:
            return super(ObjectProxy, self).__getattribute__(key)

    def __setattr__(self, key, value):
        if key == '_obj':
            super(ObjectProxy, self).__setattr__(key, value)
        else:
            super(ObjectProxy, self).__getattribute__('_obj')[key] = value

    def __getitem__(self, key):
        return super(ObjectProxy, self).__getattribute__('_obj')[key]

    def __setitem__(self, key, value):
        super(ObjectProxy, self).__getattribute__('_obj')[key] = value

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        if hasattr(self, 'commit'):
            self.commit()

    def __repr__(self):
        return repr(super(ObjectProxy, self).__getattribute__('_obj'))

    def __contains__(self, key):
        return key in super(ObjectProxy, self).__getattribute__('_obj')

    def get_ndb_object(self):
        return self._obj

    def keys(self):
        return self._obj.keys()

    def items(self):
        return self._obj.items()

    def values(self):
        return self._obj.values()

    def __iter__(self):
        return self._obj.__iter__()

    @property
    def _mode(self):
        return 'implicit'


class Interface(ObjectProxy):
    def add_ip(self, *argv, **kwarg):
        self._obj.add_ip(*argv, **kwarg)
        return self

    def del_ip(self, *argv, **kwarg):
        self._obj.del_ip(*argv, **kwarg)
        return self

    def add_port(self, *argv, **kwarg):
        self._obj.add_port(*argv, **kwarg)
        return self

    def del_port(self, *argv, **kwarg):
        self._obj.del_port(*argv, **kwarg)
        return self

    def commit(self, *argv, **kwarg):
        self._obj.commit(*argv, **kwarg)
        return self

    def up(self):
        self._obj.set('state', 'up')
        return self

    def down(self):
        self._obj.set('state', 'down')
        return self

    def remove(self):
        self._obj.remove()
        return self

    @property
    def if_master(self):
        return self._obj.get('master', None)

    @property
    def ipaddr(self):
        return tuple(self._obj.ipaddr.dump().select('address', 'prefixlen'))


class Interfaces(ObjectProxy):
    text_create = '''
When `create().commit()` fails, the failed interface object behaves
differently in IPDB and NDB. IPDB saves the failed object in the database,
while the NDB database contains only the system reflection, and the failed
object may stay only being referenced by a variable.

`KeyError: 'object exists'` vs. `CreateException`
'''

    def __getitem__(self, key):
        return Interface(super(Interfaces, self).__getitem__(key))

    def __iter__(self):
        return iter(self.keys())

    def add(self, *argv, **kwarg):
        return self.create(*argv, **kwarg)

    def create(self, *argv, **kwarg):
        log.warning(self.text_create)
        return Interface(self._obj.create(*argv, **kwarg))

    def keys(self):
        ret = []
        for record in self._obj.dump():
            ret += [record.ifname, record.index]
        return ret

    def has_key(self, key):
        return key in self.keys()


class NoIPDB(object):
    text_create = '''
IPDB has a shortcut method to create interfaces: `ipdb.create(...)`.

NDB has `create()` methods only under respective views:
`ndb.interfaces.create(...)`, `ndb.addresses.create(...)` etc.
'''

    text_nl = '''
Unlike IPDB, NDB can work with many netlink sources. The default one
referenced as `localhost`::

    #
    # these two statements are equivalent:
    #
    ndb.sources['localhost'].nl.get_links()
    ipdb.nl.get_links()

'''

    def __init__(self, *argv, **kwarg):
        if argv or kwarg:
            log.warning(
                '%s does not support IPDB parameters, ignoring',
                self.__class__.__name__,
            )
        if len(argv) > 0 or 'nl' in kwarg:
            log.warning(
                '%s does not support shared netlink sources,'
                ' ignoring `nl` and starting with local IPRoute',
                self.__class__.__name__,
            )

        self._ndb = NDB()
        self.interfaces = Interfaces(self._ndb.interfaces)

    @property
    def nl(self):
        log.warning(self.text_nl)
        return self._ndb.sources['localhost'].nl

    @property
    def ipaddr(self):
        ret = dict([(x.index, []) for x in self._ndb.interfaces.dump()])
        for record in self._ndb.addresses.dump():
            ret[record.index].append((record.address, record.prefixlen))
        return ret

    def create(self, *argv, **kwarg):
        log.warning(self.text_create)
        return self.interfaces.create(*argv, **kwarg)

    def release(self):
        self._ndb.close()

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
8 May 2024 6.33 PM
root / root
0755
__pycache__
--
8 May 2024 6.33 PM
root / root
0755
objects
--
8 May 2024 6.33 PM
root / root
0755
__init__.py
0 KB
8 May 2024 6.33 PM
root / root
0644
auth_manager.py
2.585 KB
8 May 2024 6.33 PM
root / root
0644
cli.py
2.251 KB
8 May 2024 6.33 PM
root / root
0644
cluster.py
0.979 KB
8 May 2024 6.33 PM
root / root
0644
compat.py
2.201 KB
8 May 2024 6.33 PM
root / root
0644
events.py
2.019 KB
8 May 2024 6.33 PM
root / root
0644
main.py
20.957 KB
8 May 2024 6.33 PM
root / root
0644
messages.py
0.24 KB
8 May 2024 6.33 PM
root / root
0644
noipdb.py
5.026 KB
8 May 2024 6.33 PM
root / root
0644
query.py
4.753 KB
8 May 2024 6.33 PM
root / root
0644
report.py
11.863 KB
8 May 2024 6.33 PM
root / root
0644
schema.py
32.043 KB
8 May 2024 6.33 PM
root / root
0644
source.py
16.562 KB
8 May 2024 6.33 PM
root / root
0644
task_manager.py
9.578 KB
8 May 2024 6.33 PM
root / root
0644
transaction.py
11.049 KB
8 May 2024 6.33 PM
root / root
0644
transport.py
6.201 KB
8 May 2024 6.33 PM
root / root
0644
view.py
16.504 KB
8 May 2024 6.33 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF