]> git.phdru.name Git - extfs.d.git/blobdiff - torrent
Feat: Update for Python 3
[extfs.d.git] / torrent
diff --git a/torrent b/torrent
index 1dccb6556c5d2e6f8da4f27b2b3a30b31a7a2b6d..76104d10e11e0a9352f92f7b294a8057c470b2bb 100755 (executable)
--- a/torrent
+++ b/torrent
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 """Torrent Virtual FileSystem for Midnight Commander
 
 The script requires Midnight Commander 3.1+
@@ -15,7 +15,7 @@ file the command is "%cd"): cd file/torrent://; In older versions it is
 cd file#torrent, where "file" is the name of your torrent metafile.
 
 See detailed installation instructions at
-http://phdru.name/Software/mc/torrent_INSTALL.html.
+https://phdru.name/Software/mc/torrent_INSTALL.html.
 
 The VFS lists all files and directories from the torrent metafile; all files
 appear empty, of course, but the sizes are shown. Filenames are reencoded from
@@ -35,12 +35,13 @@ The filesystem is, naturally, read-only.
 
 """
 
-__version__ = "1.2.3"
+__version__ = "1.3.0"
 __author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2010-2015 PhiloSoft Design"
+__copyright__ = "Copyright (C) 2010-2023 PhiloSoft Design"
 __license__ = "GPL"
 
 
+from datetime import datetime
 from os.path import dirname, getmtime
 import sys
 from time import localtime, asctime
@@ -56,8 +57,8 @@ if use_locale:
     # Get the default charset.
     try:
         lcAll = locale.getdefaultlocale()
-    except locale.Error, err:
-        print >>sys.stderr, "WARNING:", err
+    except locale.Error as err:
+        print("WARNING:", err, file=sys.stderr)
         lcAll = []
 
     if len(lcAll) == 2:
@@ -65,8 +66,8 @@ if use_locale:
     else:
         try:
             default_encoding = locale.getpreferredencoding()
-        except locale.Error, err:
-            print >>sys.stderr, "WARNING:", err
+        except locale.Error as err:
+            print("WARNING:", err, file=sys.stderr)
             default_encoding = sys.getdefaultencoding()
 else:
     default_encoding = sys.getdefaultencoding()
@@ -203,10 +204,10 @@ def mctorrent_list():
         dt = decode_datetime(getmtime(sys.argv[2]))
 
     for name in sorted(dirs):
-        print "dr-xr-xr-x 1 user group 0 %s %s" % (dt, name)
+        print("dr-xr-xr-x 1 user group 0 %s %s" % (dt, name))
 
     for name, size in sorted(paths):
-        print "-r--r--r-- 1 user group %d %s %s" % (size, dt, name)
+        print("-r--r--r-- 1 user group %d %s %s" % (size, dt, name))
 
 
 def mctorrent_copyout():
@@ -294,21 +295,28 @@ def decode_torrent():
         data = torrent_file.read()
         torrent_file.close()
         return decode(data)
-    except IOError, error_str:
+    except IOError as error_str:
         torrent_error(error_str)
 
 
 def decode_datetime_asc(dt):
-    return asctime(localtime(float(dt)))
+    try:
+        return asctime(localtime(float(dt)))
+    except ValueError:
+        return datetime.max.ctime()
 
 
 def decode_datetime(dt):
-    Y, m, d, H, M = localtime(float(dt))[0:5]
-    return "%02d-%02d-%d %02d:%02d" % (m, d, Y, H, M)
+    try:
+        Y, m, d, H, M = localtime(float(dt))[0:5]
+    except ValueError:
+        return datetime.max.ctime()
+    else:
+        return "%02d-%02d-%d %02d:%02d" % (m, d, Y, H, M)
 
 
 def decode_announce_list(announce):
-    return '\n'.join(l[0] for l in announce)
+    return '\n'.join(a[0] for a in announce if a)
 
 
 command = sys.argv[1]
@@ -325,5 +333,5 @@ try:
     g[procname]()
 except SystemExit:
     raise
-except:
+except Exception:
     logger.exception("Error during run")