From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2ED1FC43441 for ; Wed, 21 Nov 2018 13:50:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EA45D21479 for ; Wed, 21 Nov 2018 13:50:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EA45D21479 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=selinux-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729380AbeKVAYk (ORCPT ); Wed, 21 Nov 2018 19:24:40 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34684 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726862AbeKVAYk (ORCPT ); Wed, 21 Nov 2018 19:24:40 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 964DF811DB; Wed, 21 Nov 2018 13:50:10 +0000 (UTC) Received: from workstation (unknown [10.43.12.69]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B9F52101963F; Wed, 21 Nov 2018 13:50:09 +0000 (UTC) From: Petr Lautrbach To: selinux@vger.kernel.org Cc: Nicolas Iooss Subject: Re: [PATCH 1/1] gui: remove html_util.py References: <20181111205024.14386-1-nicolas.iooss@m4x.org> Date: Wed, 21 Nov 2018 14:50:08 +0100 In-Reply-To: <20181111205024.14386-1-nicolas.iooss@m4x.org> (Nicolas Iooss's message of "Sun, 11 Nov 2018 21:50:24 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 21 Nov 2018 13:50:10 +0000 (UTC) Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org Nicolas Iooss writes: > This file is not used anywhere. > > Signed-off-by: Nicolas Iooss Acked-by: Petr Lautrbach > gui/Makefile | 1 - > gui/html_util.py | 175 ----------------------------------------------- > 2 files changed, 176 deletions(-) > delete mode 100644 gui/html_util.py > > diff --git a/gui/Makefile b/gui/Makefile > index a72e58cee9b4..d42348b5f7fe 100644 > --- a/gui/Makefile > +++ b/gui/Makefile > @@ -9,7 +9,6 @@ TARGETS= \ > booleansPage.py \ > domainsPage.py \ > fcontextPage.py \ > -html_util.py \ > loginsPage.py \ > modulesPage.py \ > polgen.ui \ > diff --git a/gui/html_util.py b/gui/html_util.py > deleted file mode 100644 > index 420f6b967114..000000000000 > --- a/gui/html_util.py > +++ /dev/null > @@ -1,175 +0,0 @@ > -# Authors: John Dennis > -# > -# Copyright (C) 2007 Red Hat, Inc. > -# > -# This program is free software; you can redistribute it and/or modify > -# it under the terms of the GNU General Public License as published by > -# the Free Software Foundation; either version 2 of the License, or > -# (at your option) any later version. > -# > -# This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. > -# > - > - > -__all__ = [ > - 'escape_html', > - 'unescape_html', > - 'html_to_text', > - > - 'html_document', > -] > - > -import htmllib > -import formatter as Formatter > -import string > -from types import * > -try: > - from io import StringIO > -except ImportError: > - from StringIO import StringIO > - > -#------------------------------------------------------------------------------ > - > - > -class TextWriter(Formatter.DumbWriter): > - > - def __init__(self, file=None, maxcol=80, indent_width=4): > - Formatter.DumbWriter.__init__(self, file, maxcol) > - self.indent_level = 0 > - self.indent_width = indent_width > - self._set_indent() > - > - def _set_indent(self): > - self.indent_col = self.indent_level * self.indent_width > - self.indent = ' ' * self.indent_col > - > - def new_margin(self, margin, level): > - self.indent_level = level > - self._set_indent() > - > - def send_label_data(self, data): > - data = data + ' ' > - if len(data) > self.indent_col: > - self.send_literal_data(data) > - else: > - offset = self.indent_col - len(data) > - self.send_literal_data(' ' * offset + data) > - > - def send_flowing_data(self, data): > - if not data: > - return > - atbreak = self.atbreak or data[0] in string.whitespace > - col = self.col > - maxcol = self.maxcol > - write = self.file.write > - col = self.col > - if col == 0: > - write(self.indent) > - col = self.indent_col > - for word in data.split(): > - if atbreak: > - if col + len(word) >= maxcol: > - write('\n' + self.indent) > - col = self.indent_col > - else: > - write(' ') > - col = col + 1 > - write(word) > - col = col + len(word) > - atbreak = 1 > - self.col = col > - self.atbreak = data[-1] in string.whitespace > - > - > -class HTMLParserAnchor(htmllib.HTMLParser): > - > - def __init__(self, formatter, verbose=0): > - htmllib.HTMLParser.__init__(self, formatter, verbose) > - > - def anchor_bgn(self, href, name, type): > - self.anchor = href > - > - def anchor_end(self): > - if self.anchor: > - self.handle_data(' (%s) ' % self.anchor) > - self.anchor = None > - > -#------------------------------------------------------------------------------ > - > - > -def escape_html(s): > - if s is None: > - return None > - s = s.replace("&", "&") # Must be done first! > - s = s.replace("<", "<") > - s = s.replace(">", ">") > - s = s.replace("'", "'") > - s = s.replace('"', """) > - return s > - > - > -def unescape_html(s): > - if s is None: > - return None > - if '&' not in s: > - return s > - s = s.replace("<", "<") > - s = s.replace(">", ">") > - s = s.replace("'", "'") > - s = s.replace(""", '"') > - s = s.replace("&", "&") # Must be last > - return s > - > - > -def html_to_text(html, maxcol=80): > - try: > - buffer = StringIO() > - formatter = Formatter.AbstractFormatter(TextWriter(buffer, maxcol)) > - parser = HTMLParserAnchor(formatter) > - parser.feed(html) > - parser.close() > - text = buffer.getvalue() > - buffer.close() > - return text > - except Exception as e: > - log_program.error('cannot convert html to text: %s' % e) > - return None > - > - > -def html_document(*body_components): > - '''Wrap the body components in a HTML document structure with a valid header. > - Accepts a variable number of arguments of which can be: > - * string > - * a sequences of strings (tuple or list). > - * a callable object taking no parameters and returning a string or sequence of strings. > - ''' > - head = '\n \n \n \n \n' > - tail = '\n \n' > - > - doc = head > - > - for body_component in body_components: > - if type(body_component) is StringTypes: > - doc += body_component > - elif type(body_component) in [TupleType, ListType]: > - for item in body_component: > - doc += item > - elif callable(body_component): > - result = body_component() > - if type(result) in [TupleType, ListType]: > - for item in result: > - doc += item > - else: > - doc += result > - else: > - doc += body_component > - > - doc += tail > - return doc