[apparmor] [patch] Add __repr__() functions to BaseRule and BaseRuleset

Christian Boltz apparmor at cboltz.de
Fri Oct 23 12:28:58 UTC 2015


Hello,

__repr__() makes print()ing a class object much more helpful - instead of
    <apparmor.rule.NetworkRule object at 0x7f416b239e48>
we now get something like
    <NetworkRule> network inet stream,
(based on get_raw())

A NetworkRuleset will be printed as (also based on get_raw())

<NetworkRuleset>
  network inet stream,
  allow network inet stream, # comment
</NetworkRuleset>

Also add tests to test-network.py to ensure that __repr__() works as
expected.



[ 06-baserule-add-repr.diff ]

=== modified file ./utils/apparmor/rule/__init__.py
--- utils/apparmor/rule/__init__.py     2015-06-06 14:53:16.868029000 +0200
+++ utils/apparmor/rule/__init__.py     2015-10-23 14:08:28.639214618 +0200
@@ -50,6 +50,10 @@
         # Set only in the parse() class method
         self.raw_rule = None
 
+    def __repr__(self):
+        classname = self.__class__.__name__
+        return '<%s> ' % classname + self.get_raw()
+
     @classmethod
     def match(cls, raw_rule):
         '''return True if raw_rule matches the class (main) regex, False otherwise
@@ -211,6 +220,10 @@
         '''called by __init__() and delete_all_rules() - override in child class to initialize more variables'''
         pass
 
+    def __repr__(self):
+        classname = self.__class__.__name__
+        return '<%s>\n' % classname + '\n'.join(self.get_raw(1)) + '</%s>' % classname
+
     def add(self, rule):
         '''add a rule object'''
         self.rules.append(rule)
=== modified file ./utils/test/test-network.py
--- utils/test/test-network.py  2015-06-25 22:38:01.489218498 +0200
+++ utils/test/test-network.py  2015-10-23 14:12:49.553087103 +0200
@@ -353,6 +353,15 @@
         obj = NetworkRule._parse(params)
         self.assertEqual(obj.logprof_header(), expected)
 
+class NetworkRuleReprTest(AATest):
+    tests = [
+        (NetworkRule('inet', 'stream'),                             '<NetworkRule> network inet stream,'),
+        (NetworkRule.parse(' allow  network  inet  stream, # foo'), '<NetworkRule> allow  network  inet  stream, # foo'),
+    ]
+    def _run_test(self, params, expected):
+        self.assertEqual(str(params), expected)
+
+
 ## --- tests for NetworkRuleset --- #
 
 class NetworkRulesTest(AATest):
@@ -439,6 +448,17 @@
 class NetworkDeleteTestAATest(AATest):
     pass
 
+class NetworkRulesetReprTest(AATest):
+    def test_network_ruleset_repr(self):
+        obj = NetworkRuleset()
+        obj.add(NetworkRule('inet', 'stream'))
+        obj.add(NetworkRule.parse(' allow  network  inet  stream, # foo'))
+
+        expected = '<NetworkRuleset>\n  network inet stream,\n  allow  network  inet  stream, # foo\n</NetworkRuleset>'
+        self.assertEqual(str(obj), expected)
+
+
+
 setup_all_loops(__name__)
 if __name__ == '__main__':
     unittest.main(verbosity=2)


Regards,

Christian Boltz
-- 
> Mich nervt es tierisch an, wenn ich am Tag mehr Meldungen des Typs
> "Sie haben eine Virus-Mail verschickt" bekomme als Spam-Mails.
> Mittlerweile dürfte hinreichend bekannt sein, dass sich diese miesen
> Schädlinge mit beliebigen Absenderadressen versorgen. Solche Mails
> nutzen mir also gar nichts und erzeugen nur unnützen Traffic.
Soll ich Dir ein paar spams schicken, damit das Verhältnis wieder
stimmt? [> Michael Hoehne und Bernd Brodeßer in suse-linux]




More information about the AppArmor mailing list