Changeset - 75b128508fa8
[Not reviewed]
default
1 6 0
Mads Kiilerich - 6 years ago 2019-07-21 19:12:20
mads@kiilerich.com
compat: use collections.OrderedDict - we only support Python 2.7 and no longer need our own implementation
7 files changed with 6 insertions and 388 deletions:
0 comments (0 inline, 0 general)
kallithea/controllers/changeset.py
Show inline comments
 
@@ -27,7 +27,7 @@ Original author and date, and relevant c
 

	
 
import logging
 
import traceback
 
from collections import defaultdict
 
from collections import defaultdict, OrderedDict
 

	
 
from tg import tmpl_context as c, request, response
 
from tg.i18n import ugettext as _
 
@@ -40,7 +40,6 @@ import kallithea.lib.helpers as h
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator
 
from kallithea.lib.base import BaseRepoController, render, jsonify
 
from kallithea.lib.utils import action_logger
 
from kallithea.lib.compat import OrderedDict
 
from kallithea.lib import diffs
 
from kallithea.model.db import ChangesetComment, ChangesetStatus
 
from kallithea.model.comment import ChangesetCommentsModel
kallithea/controllers/files.py
Show inline comments
 
@@ -31,6 +31,7 @@ import logging
 
import traceback
 
import tempfile
 
import shutil
 
from collections import OrderedDict
 

	
 
from tg import request, response, tmpl_context as c
 
from tg.i18n import ugettext as _
 
@@ -41,7 +42,6 @@ from kallithea.lib.utils import action_l
 
from kallithea.lib import diffs
 
from kallithea.lib import helpers as h
 

	
 
from kallithea.lib.compat import OrderedDict
 
from kallithea.lib.utils2 import convert_line_endings, detect_mode, safe_str, \
 
    str2bool, safe_int
 
from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator
kallithea/lib/celerylib/tasks.py
Show inline comments
 
@@ -31,6 +31,7 @@ import traceback
 
import logging
 
import rfc822
 

	
 
from collections import OrderedDict
 
from time import mktime
 
from operator import itemgetter
 
from string import lower
 
@@ -44,7 +45,7 @@ from kallithea.lib.rcmail.smtp_mailer im
 
from kallithea.lib.utils import action_logger
 
from kallithea.lib.utils2 import str2bool
 
from kallithea.lib.vcs.utils import author_email
 
from kallithea.lib.compat import json, OrderedDict
 
from kallithea.lib.compat import json
 
from kallithea.lib.hooks import log_create_repository
 

	
 
from kallithea.model.db import Statistics, RepoGroup, Repository, User
kallithea/lib/compat.py
Show inline comments
 
@@ -50,285 +50,6 @@ else:
 

	
 

	
 
#==============================================================================
 
# OrderedDict - Python 2.7 could perhaps use collections.OrderedDict
 
#==============================================================================
 

	
 
# Python Software Foundation License
 

	
 

	
 
# XXX: it feels like using the class with "is" and "is not" instead of "==" and
 
# "!=" should be faster.
 
class _Nil(object):
 

	
 
    def __repr__(self):
 
        return "nil"
 

	
 
    def __eq__(self, other):
 
        if (isinstance(other, _Nil)):
 
            return True
 
        else:
 
            return NotImplemented
 

	
 
    def __ne__(self, other):
 
        if (isinstance(other, _Nil)):
 
            return False
 
        else:
 
            return NotImplemented
 

	
 

	
 
_nil = _Nil()
 

	
 

	
 
class OrderedDict(dict):
 
    """Ordered dict data structure, with O(1) complexity for dict operations
 
    that modify one element.
 

	
 
    Overwriting values doesn't change their original sequential order.
 
    """
 

	
 
    def __init__(self, data=(), **kwds):
 
        """This doesn't accept keyword initialization as normal dicts to avoid
 
        a trap - inside a function or method the keyword args are accessible
 
        only as a dict, without a defined order, so their original order is
 
        lost.
 
        """
 
        if kwds:
 
            raise TypeError("__init__() of ordered dict takes no keyword "
 
                            "arguments to avoid an ordering trap.")
 
        dict.__init__(self)
 
        # If you give a normal dict, then the order of elements is undefined
 
        if hasattr(data, "iteritems"):
 
            for key, val in data.iteritems():
 
                self[key] = val
 
        else:
 
            for key, val in data:
 
                self[key] = val
 

	
 
    # Double-linked list header
 
    def _get_lh(self):
 
        if not hasattr(self, '_lh'):
 
            dict.__setattr__(self, '_lh', _nil)
 
        return dict.__getattribute__(self, '_lh')
 

	
 
    def _set_lh(self, val):
 
        dict.__setattr__(self, '_lh', val)
 

	
 
    lh = property(_get_lh, _set_lh)
 

	
 
    # Double-linked list tail
 
    def _get_lt(self):
 
        if not hasattr(self, '_lt'):
 
            dict.__setattr__(self, '_lt', _nil)
 
        return dict.__getattribute__(self, '_lt')
 

	
 
    def _set_lt(self, val):
 
        dict.__setattr__(self, '_lt', val)
 

	
 
    lt = property(_get_lt, _set_lt)
 

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

	
 
    def __setitem__(self, key, val):
 
        try:
 
            dict.__getitem__(self, key)[1] = val
 
        except KeyError:
 
            new = [dict.__getattribute__(self, 'lt'), val, _nil]
 
            dict.__setitem__(self, key, new)
 
            if dict.__getattribute__(self, 'lt') == _nil:
 
                dict.__setattr__(self, 'lh', key)
 
            else:
 
                dict.__getitem__(
 
                    self, dict.__getattribute__(self, 'lt'))[2] = key
 
            dict.__setattr__(self, 'lt', key)
 

	
 
    def __delitem__(self, key):
 
        pred, _, succ = dict.__getitem__(self, key)
 
        if pred == _nil:
 
            dict.__setattr__(self, 'lh', succ)
 
        else:
 
            dict.__getitem__(self, pred)[2] = succ
 
        if succ == _nil:
 
            dict.__setattr__(self, 'lt', pred)
 
        else:
 
            dict.__getitem__(self, succ)[0] = pred
 
        dict.__delitem__(self, key)
 

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

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

	
 
    def __str__(self):
 
        pairs = ("%r: %r" % (k, v) for k, v in self.iteritems())
 
        return "{%s}" % ", ".join(pairs)
 

	
 
    def __repr__(self):
 
        if self:
 
            pairs = ("(%r, %r)" % (k, v) for k, v in self.iteritems())
 
            return "odict([%s])" % ", ".join(pairs)
 
        else:
 
            return "odict()"
 

	
 
    def get(self, k, x=None):
 
        if k in self:
 
            return dict.__getitem__(self, k)[1]
 
        else:
 
            return x
 

	
 
    def __iter__(self):
 
        curr_key = dict.__getattribute__(self, 'lh')
 
        while curr_key != _nil:
 
            yield curr_key
 
            curr_key = dict.__getitem__(self, curr_key)[2]
 

	
 
    iterkeys = __iter__
 

	
 
    def keys(self):
 
        return list(self.iterkeys())
 

	
 
    def itervalues(self):
 
        curr_key = dict.__getattribute__(self, 'lh')
 
        while curr_key != _nil:
 
            _, val, curr_key = dict.__getitem__(self, curr_key)
 
            yield val
 

	
 
    def values(self):
 
        return list(self.itervalues())
 

	
 
    def iteritems(self):
 
        curr_key = dict.__getattribute__(self, 'lh')
 
        while curr_key != _nil:
 
            _, val, next_key = dict.__getitem__(self, curr_key)
 
            yield curr_key, val
 
            curr_key = next_key
 

	
 
    def items(self):
 
        return list(self.iteritems())
 

	
 
    def sort(self, cmp=None, key=None, reverse=False):
 
        items = [(k, v) for k, v in self.items()]
 
        if cmp is not None:
 
            items = sorted(items, cmp=cmp)
 
        elif key is not None:
 
            items = sorted(items, key=key)
 
        else:
 
            items = sorted(items, key=lambda x: x[1])
 
        if reverse:
 
            items.reverse()
 
        self.clear()
 
        self.__init__(items)
 

	
 
    def clear(self):
 
        dict.clear(self)
 
        dict.__setattr__(self, 'lh', _nil)
 
        dict.__setattr__(self, 'lt', _nil)
 

	
 
    def copy(self):
 
        return self.__class__(self)
 

	
 
    def update(self, data=(), **kwds):
 
        if kwds:
 
            raise TypeError("update() of ordered dict takes no keyword "
 
                            "arguments to avoid an ordering trap.")
 
        if hasattr(data, "iteritems"):
 
            data = data.iteritems()
 
        for key, val in data:
 
            self[key] = val
 

	
 
    def setdefault(self, k, x=None):
 
        try:
 
            return self[k]
 
        except KeyError:
 
            self[k] = x
 
            return x
 

	
 
    def pop(self, k, x=_nil):
 
        try:
 
            val = self[k]
 
            del self[k]
 
            return val
 
        except KeyError:
 
            if x == _nil:
 
                raise
 
            return x
 

	
 
    def popitem(self):
 
        try:
 
            key = dict.__getattribute__(self, 'lt')
 
            return key, self.pop(key)
 
        except KeyError:
 
            raise KeyError("'popitem(): ordered dictionary is empty'")
 

	
 
    def riterkeys(self):
 
        """To iterate on keys in reversed order.
 
        """
 
        curr_key = dict.__getattribute__(self, 'lt')
 
        while curr_key != _nil:
 
            yield curr_key
 
            curr_key = dict.__getitem__(self, curr_key)[0]
 

	
 
    __reversed__ = riterkeys
 

	
 
    def rkeys(self):
 
        """List of the keys in reversed order.
 
        """
 
        return list(self.riterkeys())
 

	
 
    def ritervalues(self):
 
        """To iterate on values in reversed order.
 
        """
 
        curr_key = dict.__getattribute__(self, 'lt')
 
        while curr_key != _nil:
 
            curr_key, val, _ = dict.__getitem__(self, curr_key)
 
            yield val
 

	
 
    def rvalues(self):
 
        """List of the values in reversed order.
 
        """
 
        return list(self.ritervalues())
 

	
 
    def riteritems(self):
 
        """To iterate on (key, value) in reversed order.
 
        """
 
        curr_key = dict.__getattribute__(self, 'lt')
 
        while curr_key != _nil:
 
            pred_key, val, _ = dict.__getitem__(self, curr_key)
 
            yield curr_key, val
 
            curr_key = pred_key
 

	
 
    def ritems(self):
 
        """List of the (key, value) in reversed order.
 
        """
 
        return list(self.riteritems())
 

	
 
    def firstkey(self):
 
        if self:
 
            return dict.__getattribute__(self, 'lh')
 
        else:
 
            raise KeyError("'firstkey(): ordered dictionary is empty'")
 

	
 
    def lastkey(self):
 
        if self:
 
            return dict.__getattribute__(self, 'lt')
 
        else:
 
            raise KeyError("'lastkey(): ordered dictionary is empty'")
 

	
 
    def as_dict(self):
 
        return dict(self.items())
 

	
 
    def _repr(self):
 
        """_repr(): low level repr of the whole data contained in the odict.
 
        Useful for debugging.
 
        """
 
        form = "odict low level repr lh,lt,data: %r, %r, %s"
 
        return form % (dict.__getattribute__(self, 'lh'),
 
                       dict.__getattribute__(self, 'lt'),
 
                       dict.__repr__(self))
 

	
 

	
 
#==============================================================================
 
# OrderedSet
 
#==============================================================================
 
from sqlalchemy.util import OrderedSet
kallithea/lib/vcs/backends/git/repository.py
Show inline comments
 
@@ -17,6 +17,7 @@ import urllib
 
import urllib2
 
import logging
 
import posixpath
 
from collections import OrderedDict
 

	
 
from dulwich.objects import Tag
 
from dulwich.repo import Repo, NotGitRepository
 
@@ -32,7 +33,6 @@ from kallithea.lib.vcs.exceptions import
 
)
 
from kallithea.lib.vcs.utils import safe_str, safe_unicode, makedate, date_fromtimestamp
 
from kallithea.lib.vcs.utils.lazy import LazyProperty
 
from kallithea.lib.vcs.utils.ordered_dict import OrderedDict
 
from kallithea.lib.vcs.utils.paths import abspath, get_user_home
 

	
 
from kallithea.lib.vcs.utils.hgcompat import (
kallithea/lib/vcs/backends/hg/repository.py
Show inline comments
 
@@ -15,9 +15,9 @@ import urllib
 
import urllib2
 
import logging
 
import datetime
 
from collections import OrderedDict
 

	
 
from kallithea.lib.vcs.backends.base import BaseRepository, CollectionGenerator
 

	
 
from kallithea.lib.vcs.exceptions import (
 
    BranchDoesNotExistError, ChangesetDoesNotExistError, EmptyRepositoryError,
 
    RepositoryError, VCSError, TagAlreadyExistError, TagDoesNotExistError
 
@@ -26,7 +26,6 @@ from kallithea.lib.vcs.utils import (
 
    author_email, author_name, date_fromtimestamp, makedate, safe_unicode, safe_str,
 
)
 
from kallithea.lib.vcs.utils.lazy import LazyProperty
 
from kallithea.lib.vcs.utils.ordered_dict import OrderedDict
 
from kallithea.lib.vcs.utils.paths import abspath
 
from kallithea.lib.vcs.utils.hgcompat import (
 
    ui, nullid, match, match_exact, patch, diffopts, clone, get_contact,
kallithea/lib/vcs/utils/ordered_dict.py
Show inline comments
 
deleted file
0 comments (0 inline, 0 general)