#!/usr/bin/python import sqlite3 from wsgiref.simple_server import make_server import jinja2 from werkzeug.exceptions import HTTPException, NotFound from werkzeug.routing import Map, Rule, RequestRedirect from werkzeug.wrappers import Request, Response jinjaenv = jinja2.Environment(loader=jinja2.FileSystemLoader(".")) def format_size(size): assert isinstance(size, int) size = float(size) fmt = "%d B" if size >= 1024: size /= 1024 fmt = "%.1f KB" if size >= 1024: size /= 1024 fmt = "%.1f MB" if size >= 1024: size /= 1024 fmt = "%.1f GB" return fmt % size jinjaenv.filters["format_size"] = format_size base_template = jinjaenv.get_template("base.html") package_template = jinjaenv.from_string( """{% extends "base.html" %} {% block title %}duplication of {{ package|e }}{% endblock %} {% block header %}{% endblock %} {% block content %}

{{ package|e }}

Version: {{ version|e }}

Architecture: {{ architecture|e }}

Number of files: {{ num_files }}

Total size: {{ total_size|format_size }}

{%- if shared -%} {%- for function, sharing in shared.items() -%}

sharing with respect to {{ function }}

{%- for entry in sharing|sort(attribute="savable", reverse=true) -%} {%- if entry.package %}{{ entry.package|e }}{% else %}self{% endif %} compare {%- endfor -%}
packagefiles shareddata shared
{{ entry.duplicate }} ({{ (100 * entry.duplicate / num_files)|int }}%) {{ entry.savable|format_size }} ({{ (100 * entry.savable / total_size)|int }}%)
{%- endfor -%} {%- endif -%} {% endblock %}""") detail_template = jinjaenv.from_string( """{% extends "base.html" %} {% block title %}sharing between {{ details1.package|e }} and {{ details2.package|e }}{% endblock%} {% block content %}

{{ details1.package|e }} <-> {{ details2.package|e }}

{%- if shared -%} {%- for entry in shared|sort(attribute="size", reverse=true) -%} {%- endfor -%}
sizefilename in {{ details1.package|e }}filename in {{ details2.package|e }}hash functions
{{ entry.size|format_size }}{{ entry.filename1 }}{{ entry.filename2 }} {%- for function, hashvalue in entry.functions.items() %}{{ function|e }} {% endfor %}
{%- endif -%} {% endblock %}""") hash_template = jinjaenv.from_string( """{% extends "base.html" %} {% block title %}information on {{ function|e }} hash {{ hashvalue|e }}{% endblock %} {% block content %}

{{ function|e }} {{ hashvalue|e }}

{%- for entry in entries -%} {%- endfor -%}
packagefilenamesize
{{ entry.package|e }} {{ entry.filename|e }}{{ entry.size|format_size }}
{% endblock %}""") index_template = jinjaenv.from_string( """{% extends "base.html" %} {% block title %}Debian duplication detector{% endblock %} {% block content %}

Debian duplication detector