From nobody Thu May 18 09:05:20 2023 X-Original-To: dev-commits-ports-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4QMPFY0JCLz3bQdH; Thu, 18 May 2023 09:05:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4QMPFX6tp8z3hVl; Thu, 18 May 2023 09:05:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1684400721; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CSVFGCrw/gIeqBJpHTCvVqxrXe0zYp9QhDU63a8WqCQ=; b=inpWm1r89A+7jjWxQ9ssFrmpgXo0aUAezn3FDXQZ57DUChdjCmWUqUy204r0Rv6l2/3ht5 GmeMzkiMVAhVazeHgdeYvyuDpRIV9hY3LtGgX4rNy037XzVVF3vUScDIiA6iMW77npdwAD qG89rglwPHYltDOERX9xxSO6zDP44yGIRp3FmGhR3ISSjjOMgyjwEP4EurGI7COwlGJi0M mzPQOP9seM712KGiCtsv3f8oRKgm9IxFTbyMqzBcxYLh9S4oix075lTFRTgK6fbbOgBxgS r74URTBc6BIFN/QG75bRikfRRBFb0Dhe1NrTuPlvYBPaZEEeZiEzPi/cqlZf6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1684400721; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CSVFGCrw/gIeqBJpHTCvVqxrXe0zYp9QhDU63a8WqCQ=; b=i0OFEfvPe2JMqbYfvQwKYbz1yTvJiHZMOiIvdPT+BxzyPAZsZrx7Ca5eLjM1ZSa3tlBMFf 10TFhnwgQFesmKp5kujaMQxyeNlXnIdgoCFr1Ke4qQhCR8YWZw8klfNce02s5IEHSFHg8k OU1ord2223948sF4huMXWL/yMSzoY7hGFk3pt0ml0CUjy3wYRpxzTzI8VYxIt0ff1F0Paq h+AzL6XuKYoYwxQjD/Bc7aDbB1o/Sd2meY0DgBSHOJZ+9Y/xIpQtGkim1ax28kjX9zRDks yCnvK8FLvStNWr0S3qYOXvOB/hGY3VOFSMRMOIQCODD8JpCmC9Qr2v6UkYk+mg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1684400721; a=rsa-sha256; cv=none; b=erKDwoamPaIhh4eYWaKAINBaf/AhFbgr4LUUWxrcPXzV1EYrI5lc2gnOHWH+vTJAVQBj7c ztkXNV6DHjVmmdues2x3Fu9ZCmMOa5t6R26T6oQ2tnBXp/jh6WBaZXtjlGkiPu3gMEDT+r JLseLCWm53jxbftinLtqtqk44rdYzxu6nZ8Jh/xB7xyUaH1kiQCaADwesEaNvWAx/cauR2 zGMnUq/mIax/FIQ1hZ9M/HzHYV5lkwWcBX5SUjtFCoMXaV/X+QkEHZ0rWlLnFkccvD+FwN /oqxWYLV6dKYQJhXI2YzOSzXY5NpAhfuEpf6LB1BPKQ8EPD8cb3sKy2pZA3kqQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4QMPFX5t5kzg9v; Thu, 18 May 2023 09:05:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 34I95KCK029869; Thu, 18 May 2023 09:05:20 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 34I95K2p029868; Thu, 18 May 2023 09:05:20 GMT (envelope-from git) Date: Thu, 18 May 2023 09:05:20 GMT Message-Id: <202305180905.34I95K2p029868@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Alexey Dokuchaev Subject: git: 9835d0935a94 - main - net-p2p/py-ed2k-tools: improve transfers' summary printing script List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: danfe X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9835d0935a94064a4695f74124eef6f722e6946e Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by danfe: URL: https://cgit.FreeBSD.org/ports/commit/?id=9835d0935a94064a4695f74124eef6f722e6946e commit 9835d0935a94064a4695f74124eef6f722e6946e Author: Alexey Dokuchaev AuthorDate: 2023-05-18 09:04:14 +0000 Commit: Alexey Dokuchaev CommitDate: 2023-05-18 09:04:14 +0000 net-p2p/py-ed2k-tools: improve transfers' summary printing script - Do not hardcode terminal width, ask for it instead and fallback to 80 characters if cannot get it (available since Python 3.3) - Handle filenames with CJK characters properly, i.e. account for extra space they occupy when truncating strings (can be mixed) --- net-p2p/py-ed2k-tools/files/patch-temp__summary.py | 62 ++++++++++++++++++---- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/net-p2p/py-ed2k-tools/files/patch-temp__summary.py b/net-p2p/py-ed2k-tools/files/patch-temp__summary.py index 358af31af085..8d100fd34870 100644 --- a/net-p2p/py-ed2k-tools/files/patch-temp__summary.py +++ b/net-p2p/py-ed2k-tools/files/patch-temp__summary.py @@ -1,6 +1,20 @@ --- temp_summary.py.orig 2003-05-06 11:53:14 UTC +++ temp_summary.py -@@ -15,13 +15,13 @@ if __name__ == "__main__": +@@ -2,11 +2,9 @@ + from ed2k_metutils import * + import os + import stat ++import unicodedata + +-# I'm really surprised there's no easy way to get the terminal +-# width in python... :-/ I can't do external invocations to +-# stty, etc, because they might not be there on windows... +-WIDTH = 80; ++WIDTH = getattr(os.get_terminal_size(), 'columns', 80) + + if __name__ == "__main__": + # Here's an example to cut and keep. +@@ -15,13 +13,10 @@ if __name__ == "__main__": # see how much data I actually got from night to night. if len( sys.argv ) < 2: @@ -15,13 +29,10 @@ + print() + print("This program will show the amount downloaded vs. the total size") + print("for the .part.met files listed on the command line.") -+ print() -+ print("This program assumes an 80 column display. You can tweak this") -+ print("by editing the script. Change the 'WIDTH' value.") sys.exit( -1 ); total_size = total_down = 0; -@@ -34,7 +34,7 @@ if __name__ == "__main__": +@@ -34,7 +29,7 @@ if __name__ == "__main__": for met_file in mets: @@ -30,7 +41,16 @@ data = fh.read(); fh.close(); -@@ -71,19 +71,19 @@ if __name__ == "__main__": +@@ -43,7 +38,7 @@ if __name__ == "__main__": + + # We're interested in the name, the total size, and some kind of... anti-gapping. + size = met_data.FindTags( TAG_HANDLE_FILESIZE )[ 0 ].value; +- name = met_data.FindTags( TAG_HANDLE_FILENAME )[ 0 ].value; ++ name = met_data.FindTags(TAG_HANDLE_FILENAME)[0].value.decode() + + # Set the total downloaded to the file size. + down = size; +@@ -71,19 +66,39 @@ if __name__ == "__main__": bar = "#" * ( WIDTH - 2 ); for gap in gaps: gap_start, gap_end = gaps[ gap ]; @@ -39,20 +59,42 @@ + char_gap_start = int(gap_start / bytes_per_char) + char_gap_end = int(gap_end / bytes_per_char) bar = bar[ : char_gap_start ] + " " * ( char_gap_end - char_gap_start ) + bar[ char_gap_end : ]; ++ ++ # Account for CJK characters occupy two terminal spaces ++ def char_width(c: str) -> int: ++ if not c.isprintable(): return 0 ++ return 2 if unicodedata.category(c) == 'Lo' else 1 ++ ++ def visible_len(s: str) -> int: ++ return sum(char_width(c) for c in s) ++ ++ def visible_substr_padded(s: str, l: int) -> str: ++ vislen = 0 ++ cut_here = 0 ++ padding = '' ++ for c in s: ++ vislen += char_width(c) ++ if (vislen <= l): cut_here += 1 ++ if (vislen == l): break ++ if (vislen > l): padding = ' '; break ++ return s[:cut_here] + padding # Print out our summary. Limit the filenames. - sizestring = " - %s - %iK of %iK" % ( met_file.split( "/" )[ -1 ], down / 1024, size / 1024 ); + sizestring = " - %s - %.2fK of %.2fK" % (met_file.split("/")[-1], down / 1024, size / 1024) max_name_size = WIDTH - len( sizestring ); - if len( name ) < max_name_size: +- if len( name ) < max_name_size: - name += " " * ( max_name_size - len( name ) ); -+ name += b" " * (max_name_size - len(name)) ++ vislen = visible_len(name) ++ if vislen < max_name_size: ++ name += " " * (max_name_size - vislen) else: - name = name[ : max_name_size ]; +- name = name[ : max_name_size ]; - print "%s%s" % ( name, sizestring ); - print "[%s]" % bar; - print -+ print("%s%s" % (name.decode(), sizestring)) ++ name = visible_substr_padded(name, max_name_size) ++ print("%s%s" % (name, sizestring)) + print("[%s]" % bar) + print() del( met_data );