PHP 7.4.33
Preview: namedict.py Size: 3.59 KB
/home/godevadmin/public_html/upload_images/home/000~ROOT~000/usr/lib/python3.6/site-packages/dns/namedict.py

# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
# Copyright (C) 2016 Coresec Systems AB
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND CORESEC SYSTEMS AB DISCLAIMS ALL
# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CORESEC
# SYSTEMS AB BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""DNS name dictionary"""

import collections
import dns.name
from ._compat import xrange


class NameDict(collections.MutableMapping):

    """A dictionary whose keys are dns.name.Name objects.
    @ivar max_depth: the maximum depth of the keys that have ever been
    added to the dictionary.
    @type max_depth: int
    @ivar max_depth_items: the number of items of maximum depth
    @type max_depth_items: int
    """

    __slots__ = ["max_depth", "max_depth_items", "__store"]

    def __init__(self, *args, **kwargs):
        self.__store = dict()
        self.max_depth = 0
        self.max_depth_items = 0
        self.update(dict(*args, **kwargs))

    def __update_max_depth(self, key):
        if len(key) == self.max_depth:
            self.max_depth_items = self.max_depth_items + 1
        elif len(key) > self.max_depth:
            self.max_depth = len(key)
            self.max_depth_items = 1

    def __getitem__(self, key):
        return self.__store[key]

    def __setitem__(self, key, value):
        if not isinstance(key, dns.name.Name):
            raise ValueError('NameDict key must be a name')
        self.__store[key] = value
        self.__update_max_depth(key)

    def __delitem__(self, key):
        value = self.__store.pop(key)
        if len(value) == self.max_depth:
            self.max_depth_items = self.max_depth_items - 1
        if self.max_depth_items == 0:
            self.max_depth = 0
            for k in self.__store:
                self.__update_max_depth(k)

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

    def __len__(self):
        return len(self.__store)

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

    def get_deepest_match(self, name):
        """Find the deepest match to I{name} in the dictionary.

        The deepest match is the longest name in the dictionary which is
        a superdomain of I{name}.

        @param name: the name
        @type name: dns.name.Name object
        @rtype: (key, value) tuple
        """

        depth = len(name)
        if depth > self.max_depth:
            depth = self.max_depth
        for i in xrange(-depth, 0):
            n = dns.name.Name(name[i:])
            if n in self:
                return (n, self[n])
        v = self[dns.name.empty]
        return (dns.name.empty, v)

Directory Contents

Dirs: 2 × Files: 37

Name Size Perms Modified Actions
rdtypes DIR
- drwxr-xr-x 2025-03-25 05:07:14
Edit Download
- drwxr-xr-x 2025-03-25 05:07:14
Edit Download
14.44 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
3.07 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
4.28 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
4.36 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
4.52 KB lrw-r--r-- 2016-09-20 19:13:40
Edit Download
2.60 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
1.93 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
1.07 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
3.17 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
1.98 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
5.17 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
42.12 KB lrw-r--r-- 2016-09-26 15:38:18
Edit Download
28.74 KB lrw-r--r-- 2024-05-23 10:29:27
Edit Download
3.59 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
5.91 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
2.48 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
19.18 KB lrw-r--r-- 2024-05-23 10:29:27
Edit Download
3.03 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
14.65 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
3.18 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
11.29 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
5.21 KB lrw-r--r-- 2016-09-20 19:54:45
Edit Download
11.64 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
50.88 KB lrw-r--r-- 2016-09-26 15:52:30
Edit Download
3.23 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
5.85 KB lrw-r--r-- 2016-09-25 19:25:33
Edit Download
7.53 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
17.88 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
7.54 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
1.70 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
2.23 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
9.78 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
1.23 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
3.64 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
39.09 KB lrw-r--r-- 2016-09-29 22:29:39
Edit Download
1.28 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download
1.30 KB lrw-r--r-- 2016-09-20 16:24:02
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).