# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from portage.util.SlotObject import SlotObject
from _emerge.DepPriority import DepPriority


class Dependency(SlotObject):
    __slots__ = (
        "atom",
        "blocker",
        "child",
        "depth",
        "parent",
        "onlydeps",
        "priority",
        "root",
        "want_update",
        "collapsed_parent",
        "collapsed_priority",
    )

    def __init__(self, **kwargs):
        SlotObject.__init__(self, **kwargs)
        if self.priority is None:
            self.priority = DepPriority()
        if self.depth is None:
            self.depth = 0
        if self.collapsed_parent is None:
            self.collapsed_parent = self.parent
        if self.collapsed_priority is None:
            self.collapsed_priority = self.priority
