Produces a single, populated ADComputer object through the object factory.
        Does not populate attributes for the caller instance.

        :param str base_dn: The base DN to search within
        :param str samaccountname: The computer's sAMAccountName
        :param list attributes: Object attributes to populate, defaults to all

        :return: A populated ADComputer object
        :rtype: ADComputer

def computer(self, base_dn, samaccountname, attributes=()):
        """Produces a single, populated ADComputer object through the object factory.
        Does not populate attributes for the caller instance.

        :param str base_dn: The base DN to search within
        :param str samaccountname: The computer's sAMAccountName
        :param list attributes: Object attributes to populate, defaults to all

        :return: A populated ADComputer object
        :rtype: ADComputer
        """

        computers = self.computers(base_dn, samaccountnames=[samaccountname], attributes=attributes)

        try:
            # Usually we will find a match, but perhaps not always
            return computers[0]
        except IndexError:
            logging.info("%s - unable to retrieve object from AD by sAMAccountName", samaccountname)