Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: abp/filters/rpy.py

Issue 29849585: Issue 6835 - Add R support to python-abp (Closed)
Patch Set: Refactored tests Created Aug. 9, 2018, 12:53 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/test_rpy.py » ('j') | tests/test_rpy.py » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: abp/filters/rpy.py
diff --git a/abp/filters/rpy.py b/abp/filters/rpy.py
new file mode 100644
index 0000000000000000000000000000000000000000..20c602961a4759fba32602a1077e8fa27f310779
--- /dev/null
+++ b/abp/filters/rpy.py
@@ -0,0 +1,93 @@
+# This file is part of Adblock Plus <https://adblockplus.org/>,
+# Copyright (C) 2006-present eyeo GmbH
+#
+# Adblock Plus is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# Adblock Plus 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 Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Functions for integrating with rPython.
+
+see: https://cran.r-project.org/web/packages/rPython/index.html
+"""
+
+from __future__ import unicode_literals
+
+from abp.filters import parse_line
+
+__all__ = ['line2dict']
+
+
+def tuple2dict(data):
+ """Convert a parsed filter from a namedtuple to a dict.
+
+ Parameters
+ ----------
+ data: namedtuple
+ The parsed filter.
+
+ Returns
+ -------
+ dict
+ The resulting dictionary
+
+ """
+ result = dict(data._asdict())
+ result['type'] = data.__class__.__name__
+
+ return result
+
+
+def strings2utf8(data):
+ """Convert strings in a data structure to utf8 byte strings.
+
+ Parameters
+ ----------
+ data: dict
+ The data to convert. Can include nested dicts, lists and tuples.
+
+ Returns
+ -------
+ dict
+ With all strings encoded as unicode.
+
+ """
+ if isinstance(data, dict):
+ return {strings2utf8(k): strings2utf8(v) for k, v in data.items()}
+ if isinstance(data, list):
+ return [strings2utf8(v) for v in data]
+ if isinstance(data, tuple):
+ return tuple(strings2utf8(v) for v in data)
+ if isinstance(data, type('')): # Python 2/3 compatible way of
+ # saying "unicode string".
+ return data.encode('utf-8')
+ return data
+
+
+def line2dict(text):
+ """Convert a filterlist line to a dictionary.
+
+ All strings in the output dictionary will be UTF8 byte strings. This is
+ necessary to prevent unicode encoding errors in rPython conversion layer.
+
+ Parameters
+ ----------
+ text: str
+ The filter text we want to parse
+
+ Returns
+ -------
+ dict
+ With the parsing results and all strings converted to utf8 byte
+ strings.
+
+ """
+ return strings2utf8(tuple2dict(parse_line(text)))
« no previous file with comments | « no previous file | tests/test_rpy.py » ('j') | tests/test_rpy.py » ('J')

Powered by Google App Engine
This is Rietveld