summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/Bcfg2/Bcfg2Py3k.py5
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Metadata.py24
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Yum.py4
-rw-r--r--testsuite/Testlib/TestServer/TestPlugins/TestMetadata.py19
4 files changed, 47 insertions, 5 deletions
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
diff --git a/testsuite/Testlib/TestServer/TestPlugins/TestMetadata.py b/testsuite/Testlib/TestServer/TestPlugins/TestMetadata.py
index 83da19bad..381bd978e 100644
--- a/testsuite/Testlib/TestServer/TestPlugins/TestMetadata.py
+++ b/testsuite/Testlib/TestServer/TestPlugins/TestMetadata.py
@@ -179,6 +179,25 @@ class TestClientVersions(unittest.TestCase):
except:
assert False
+ def test__len(self):
+ v = ClientVersions()
+ self.assertEqual(len(v), MetadataClientModel.objects.count())
+
+ def test__iter(self):
+ v = ClientVersions()
+ self.assertItemsEqual([h for h in iter(v)], v.keys())
+
+ def test__delitem(self):
+ v = ClientVersions()
+
+ # test adding new client
+ new = "client__delitem"
+ v[new] = "1.3.0"
+
+ del v[new]
+ self.assertIn(new, v)
+ self.assertIsNone(v[new])
+
class TestXMLMetadataConfig(unittest.TestCase):
groups_test_tree = groups_test_tree