From 838fbf56829cd15182e73e3820a453037afbea38 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 31 Jul 2012 09:50:19 -0400 Subject: py3k fix: UserDict -> MutableMapping --- src/lib/Bcfg2/Bcfg2Py3k.py | 5 +++++ src/lib/Bcfg2/Server/Plugins/Metadata.py | 24 +++++++++++++++++++++--- src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 4 ++-- 3 files changed, 28 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/lib/Bcfg2/Bcfg2Py3k.py b/src/lib/Bcfg2/Bcfg2Py3k.py index 3dc6fc6f0..7b0c6a2b5 100644 --- a/src/lib/Bcfg2/Bcfg2Py3k.py +++ b/src/lib/Bcfg2/Bcfg2Py3k.py @@ -92,3 +92,8 @@ if sys.hexversion >= 0x03000000: from io import FileIO as file else: file = file + +try: + from collections import MutableMapping +except ImportError: + from UserDict import DictMixin as MutableMapping diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py index 07659b62a..e7be7c227 100644 --- a/src/lib/Bcfg2/Server/Plugins/Metadata.py +++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py @@ -14,7 +14,7 @@ import Bcfg2.Server import Bcfg2.Server.Lint import Bcfg2.Server.Plugin import Bcfg2.Server.FileMonitor -from UserDict import DictMixin +from Bcfg2.Bcfg2Py3k import MutableMapping from Bcfg2.version import Bcfg2VersionInfo try: @@ -39,7 +39,7 @@ if has_django: hostname = models.CharField(max_length=255, primary_key=True) version = models.CharField(max_length=31, null=True) - class ClientVersions(DictMixin): + class ClientVersions(MutableMapping): def __getitem__(self, key): try: return MetadataClientModel.objects.get(hostname=key).version @@ -51,6 +51,25 @@ if has_django: client.version = value client.save() + def __delitem__(self, key): + # UserDict didn't require __delitem__, but MutableMapping + # does. we don't want deleting a client version record to + # delete the client, so we just set the version to None, + # which is kinda like deleting it, but not really. + try: + client = MetadataClientModel.objects.get(hostname=key) + except MetadataClientModel.DoesNotExist: + raise KeyError(key) + client.version = None + client.save() + + def __len__(self): + return MetadataClientModel.objects.count() + + def __iter__(self): + for client in MetadataClientModel.objects.all(): + yield client.hostname + def keys(self): return [c.hostname for c in MetadataClientModel.objects.all()] @@ -446,7 +465,6 @@ class Metadata(Bcfg2.Server.Plugin.Plugin, def add_client(self, client_name, attribs=None): """Add client to clients.xml.""" - print "add_client(%s, attribs=%s)" % (client_name, attribs) if attribs is None: attribs = dict() if self._use_db: diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py index 0e3c54ad8..779614dbb 100644 --- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py +++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py @@ -8,10 +8,10 @@ import socket import logging import threading import lxml.etree -from UserDict import DictMixin from subprocess import Popen, PIPE, STDOUT import Bcfg2.Server.Plugin -from Bcfg2.Bcfg2Py3k import StringIO, cPickle, HTTPError, URLError, ConfigParser, file +from Bcfg2.Bcfg2Py3k import StringIO, cPickle, HTTPError, URLError, \ + ConfigParser, file from Bcfg2.Server.Plugins.Packages.Collection import Collection from Bcfg2.Server.Plugins.Packages.Source import SourceInitError, Source, \ fetch_url -- cgit v1.2.3-1-g7c22