[paludis-commits] r4108 - in trunk: . python

peper at svn.pioto.org peper at svn.pioto.org
Sun Dec 30 18:35:23 UTC 2007


Author: peper
Date: 2007-12-30 18:35:12 +0000 (Sun, 30 Dec 2007)
New Revision: 4108

Added:
   trunk/python/use_requirements.cc
   trunk/python/use_requirements_TEST.py
Modified:
   trunk/ChangeLog
   trunk/python/Makefile.am
   trunk/python/dep_spec.cc
   trunk/python/dep_spec_TEST.py
   trunk/python/paludis_python.hh
   trunk/python/paludis_python_so.cc
Log:
(python) Fix UseRequirements after r4105. Fixes: ticket:464.


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-12-30 18:34:49 UTC (rev 4107)
+++ trunk/ChangeLog	2007-12-30 18:35:12 UTC (rev 4108)
@@ -7,6 +7,12 @@
 
 2007-12-30 Piotr Jaroszyński
 
+	* python/: (python) Fix UseRequirements after r4105.
+
+	+ Fixes: ticket:464
+
+2007-12-30 Piotr Jaroszyński
+
 	* python/validated.hh: (python) Add operators to Validated.
 
 2007-12-30 Piotr Jaroszyński

Modified: trunk/python/Makefile.am
===================================================================
--- trunk/python/Makefile.am	2007-12-30 18:34:49 UTC (rev 4107)
+++ trunk/python/Makefile.am	2007-12-30 18:35:12 UTC (rev 4108)
@@ -27,6 +27,7 @@
 	version_operator_TEST.py \
 	version_requirements_TEST.py \
 	contents_TEST.py \
+	use_requirements_TEST.py \
 	dep_spec_TEST.py \
 	dep_tag_TEST.py \
 	dep_label_TEST.py \
@@ -72,6 +73,7 @@
 	package_id.cc \
 	query.cc \
 	repository.cc \
+	use_requirements.cc \
 	version_operator.cc \
 	version_requirements.cc \
 	version_spec.cc

Modified: trunk/python/dep_spec.cc
===================================================================
--- trunk/python/dep_spec.cc	2007-12-30 18:34:49 UTC (rev 4107)
+++ trunk/python/dep_spec.cc	2007-12-30 18:35:12 UTC (rev 4108)
@@ -1176,22 +1176,6 @@
         ;
 
     /**
-     * UseRequirements
-     */
-    bp::to_python_converter<std::pair<const UseFlagName, UseFlagState>,
-        pair_to_tuple<const UseFlagName, UseFlagState> >();
-    register_shared_ptrs_to_python<UseRequirements>();
-    bp::class_<UseRequirements>
-        (
-         "UseRequirements",
-         "A selection of USE flag requirements.",
-         bp::no_init
-        )
-
-        .def("__iter__", bp::range(&UseRequirements::begin, &UseRequirements::end))
-        ;
-
-    /**
      * PackageDepSpec
      */
 

Modified: trunk/python/dep_spec_TEST.py
===================================================================
--- trunk/python/dep_spec_TEST.py	2007-12-30 18:34:49 UTC (rev 4107)
+++ trunk/python/dep_spec_TEST.py	2007-12-30 18:35:12 UTC (rev 4108)
@@ -79,11 +79,10 @@
         self.get_depspecs()
         self.assertEquals(self.pds.version_requirements_mode, VersionRequirementsMode.AND)
 
-###    def test_09_use_requirements(self):
-###        spec = parse_user_package_dep_spec("foo/monkey[foo]", UserPackageDepSpecOptions())
-###        ur = iter(spec.use_requirements).next()
-###        self.assertEquals(str(ur[0]), "foo")
-###        self.assertEquals(ur[1], UseFlagState.ENABLED)
+    def test_09_use_requirements(self):
+        spec = parse_user_package_dep_spec("foo/monkey[foo]", UserPackageDepSpecOptions())
+        ur = iter(spec.use_requirements).next()
+        self.assert_(isinstance(ur, EnabledUseRequirement))
 
     def test_10_without_use_requirements(self):
         spec = parse_user_package_dep_spec("foo/monkey[foo]", UserPackageDepSpecOptions())

Modified: trunk/python/paludis_python.hh
===================================================================
--- trunk/python/paludis_python.hh	2007-12-30 18:34:49 UTC (rev 4107)
+++ trunk/python/paludis_python.hh	2007-12-30 18:35:12 UTC (rev 4108)
@@ -177,6 +177,7 @@
 void expose_qa() PALUDIS_VISIBLE;
 void expose_query() PALUDIS_VISIBLE;
 void expose_repository() PALUDIS_VISIBLE;
+void expose_use_requirements() PALUDIS_VISIBLE;
 void expose_version_operator() PALUDIS_VISIBLE;
 void expose_version_requirements() PALUDIS_VISIBLE;
 void expose_version_spec() PALUDIS_VISIBLE;

Modified: trunk/python/paludis_python_so.cc
===================================================================
--- trunk/python/paludis_python_so.cc	2007-12-30 18:34:49 UTC (rev 4107)
+++ trunk/python/paludis_python_so.cc	2007-12-30 18:35:12 UTC (rev 4108)
@@ -36,6 +36,7 @@
     expose_version_requirements();
     expose_fs_entry();
     expose_contents();
+    expose_use_requirements();
     expose_dep_spec();
     expose_dep_tag();
     expose_dep_label();

Added: trunk/python/use_requirements.cc
===================================================================
--- trunk/python/use_requirements.cc	                        (rev 0)
+++ trunk/python/use_requirements.cc	2007-12-30 18:35:12 UTC (rev 4108)
@@ -0,0 +1,147 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2007 Piotr Jaroszyński
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <python/paludis_python.hh>
+
+#include <paludis/use_requirements.hh>
+#include <paludis/util/wrapped_forward_iterator-impl.hh>
+#include <paludis/util/visitor-impl.hh>
+
+using namespace paludis;
+using namespace paludis::python;
+namespace bp = boost::python;
+
+struct UseRequirementsWrapper
+{
+    static PyObject *
+    find(const UseRequirements & self, const UseFlagName & u)
+    {
+        UseRequirements::ConstIterator i(self.find(u));
+        if (i != self.end())
+            return bp::incref(bp::object(*i).ptr());
+        else
+            return Py_None;
+    }
+};
+
+void expose_use_requirements()
+{
+    /**
+     * UseRequirements
+     */
+    register_shared_ptrs_to_python<UseRequirements>();
+    bp::class_<UseRequirements>
+        (
+         "UseRequirements",
+         "A selection of USE flag requirements.",
+         bp::no_init
+        )
+
+        .def("empty", &UseRequirements::empty,
+                "empty() -> bool\n"
+                "Are we empty?"
+            )
+
+        .def("find", UseRequirementsWrapper::find,
+                "find(UseFlagName) -> UseRequirement\n"
+                "Find the requirement for a particular USE flag."
+            )
+
+        .def("insert", &UseRequirements::insert,
+                "insert(UseRequirement)\n"
+                "Insert a new requirement."
+            )
+
+        .def("__iter__", bp::range(&UseRequirements::begin, &UseRequirements::end))
+        ;
+
+    /**
+     * UseRequirement
+     */
+    register_shared_ptrs_to_python<UseRequirement>();
+    bp::class_<UseRequirement, boost::noncopyable>
+        (
+         "UseRequirement",
+         "A requirement for a use flag.",
+         bp::no_init
+        )
+
+        .def("flag", &UseRequirement::flag,
+                "flag() -> UseFlagName\n"
+                "Our use flag."
+            )
+        ;
+
+    /**
+     * EnabledUseRequirement
+     */
+    bp::class_<EnabledUseRequirement, bp::bases<UseRequirement>, tr1::shared_ptr<EnabledUseRequirement> >
+        (
+         "EnabledUseRequirement",
+         "An enabled requirement for a use flag.",
+         bp::init<const UseFlagName &>("__init__(UseFlagName)")
+        );
+
+    /**
+     * DisabledUseRequirement
+     */
+    bp::class_<DisabledUseRequirement, bp::bases<UseRequirement> >
+        (
+         "DisabledUseRequirement",
+         "A disabled requirement for a use flag.",
+         bp::init<const UseFlagName &>("__init__(UseFlagName)")
+        );
+
+    /**
+     * EqualUseRequirement
+     */
+    bp::class_<EqualUseRequirement, bp::bases<UseRequirement> >
+        (
+         "EqualUseRequirement",
+         "An equal requirement for a use flag.",
+         bp::init<const UseFlagName &, const tr1::shared_ptr<const PackageID> &>(
+             "__init__(UseFlagName, PackageID)"
+             )
+        )
+
+        .def("package_id", &EqualUseRequirement::package_id,
+                "package_id() -> PackageID\n"
+                "Our package."
+            )
+        ;
+
+    /**
+     * NotEqualUseRequirement
+     */
+    bp::class_<NotEqualUseRequirement, bp::bases<UseRequirement> >
+        (
+         "NotEqualUseRequirement",
+         "A not equal requirement for a use flag.",
+         bp::init<const UseFlagName &, const tr1::shared_ptr<const PackageID> &>(
+             "__init__(UseFlagName, PackageID)"
+             )
+        )
+
+        .def("package_id", &NotEqualUseRequirement::package_id,
+                "package_id() -> PackageID\n"
+                "Our package."
+            )
+        ;
+
+}

Added: trunk/python/use_requirements_TEST.py
===================================================================
--- trunk/python/use_requirements_TEST.py	                        (rev 0)
+++ trunk/python/use_requirements_TEST.py	2007-12-30 18:35:12 UTC (rev 4108)
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 sw=4 sts=4 et :
+
+#
+# Copyright (c) 2007 Piotr Jaroszyński
+#
+# This file is part of the Paludis package manager. Paludis is free software;
+# you can redistribute it and/or modify it under the terms of the GNU General
+# Public License version 2, as published by the Free Software Foundation.
+#
+# Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+from paludis import *
+import unittest
+
+class TestCase_1_UseRequirements(unittest.TestCase):
+    def setUp(self):
+        self.e = TestEnvironment()
+        self.r = FakeRepository(self.e, "fake")
+        self.pid = self.r.add_version("cat/pkg", "1")
+
+        self.ur1 = EnabledUseRequirement("foo")
+        self.ur2 = DisabledUseRequirement("foo")
+        self.ur3 = EqualUseRequirement("foo", self.pid)
+        self.ur4 = NotEqualUseRequirement("foo", self.pid)
+
+    def test_01_create(self):
+        self.assertRaises(Exception, UseRequirement)
+
+    def test_02_flag(self):
+        self.assertEquals(self.ur1.flag(), UseFlagName("foo"))
+        self.assertEquals(self.ur2.flag(), UseFlagName("foo"))
+        self.assertEquals(self.ur3.flag(), UseFlagName("foo"))
+        self.assertEquals(self.ur4.flag(), UseFlagName("foo"))
+
+    def test_03_package_id(self):
+        self.assertEquals(self.ur3.package_id(), self.pid)
+        self.assertEquals(self.ur4.package_id(), self.pid)
+
+
+if __name__ == "__main__":
+    unittest.main()


Property changes on: trunk/python/use_requirements_TEST.py
___________________________________________________________________
Name: svn:executable
   + *



More information about the paludis-commits mailing list