eventually fixed the NULL problem in module randomphoto-piwigo
authorSabine Engelhardt (Becker) <frosch@atari-frosch.de>
Sat, 16 Nov 2019 20:17:53 +0000 (21:17 +0100)
committerSabine Engelhardt (Becker) <frosch@atari-frosch.de>
Sat, 16 Nov 2019 20:17:53 +0000 (21:17 +0100)
CHANGELOG
ToDo
makesite.py
modules/randomphoto-piwigo.py

index a595cf5..ee3b253 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,15 @@
+2019-11-16 frosch@atari-frosch.de
+
+    * module randomphoto-piwigo.py: The problem still occured and is now
+      really solved. COALESCE did not help with one certain empty ("NULL")
+      mysql table field. In that case the module requested only one field of
+      a table (cr_id from pwg_copyright_media). If NULL can be delivered it
+      must first be checked for that NULL (Python: None), using the variable
+      with the value as a single variable. Only if it is not NULL/None, it
+      can be checked against any other value, but now as list entry
+      variable[0]. That is not exactly logical, but well …
+
+
 2019-10-20 frosch@atari-frosch.de
 
     * module randomphoto-piwigo.py: Problem was still there, additionally
diff --git a/ToDo b/ToDo
index c3f4cf6..b547628 100644 (file)
--- a/ToDo
+++ b/ToDo
@@ -47,7 +47,9 @@ MODULES:
 
 * randomphoto-piwigo.py
 
-  - add camera type (if available) and keywords
+  - add camera type (if available)
+  - add keywords
+  - do not show albums the photo is in if they are set to private
 
 
 * lasttweets.py
index ea77f61..4471fb2 100755 (executable)
@@ -307,7 +307,7 @@ def defaultfoot(contentfile, pagefoot, generator, myurl, pageconfig, htmlfile):
 
 def createpage(filename, sitepath, targetdir, snippets):
     if not filename.endswith(".htm"):
-        pass
+        logging.debug('File %s is not to be processed. Next.', filename)
     else:
         logging.debug('Running createpage with filename %s, targetdir %s.', filename, targetdir)
         purefilename = os.path.basename(filename)
index 585aea0..486923e 100755 (executable)
@@ -1,15 +1,20 @@
 #!/usr/bin/env python3
 # -*- coding: utf8 -*-
 
+import logging
 from sys import argv
 
+
 def fetchalbumname(cursor, album):
-    getalbumname = "SELECT name, id_uppercat FROM pwg_categories WHERE id = " + str(album)
+    private = false
+    getalbumname = "SELECT name, id_uppercat, status FROM pwg_categories WHERE id = " + str(album)
     cursor.execute(getalbumname)
     albumdata = cursor.fetchone()
     albumname = albumdata[0]
     upper = albumdata[1]
-    return albumname, upper 
+    if status == 'private':
+        private = True
+    return albumname, upper, private
 
 
 def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, randomsnippet):
@@ -64,11 +69,15 @@ def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, r
         random.seed()
         photolistnumber = random.randint(1, photocount)
         photo = photodict[photolistnumber]
-        picdata['photoid'] = str(photo) 
+        picdata['photoid'] = str(photo)
+        logging.info('Selected photo with ID %s.', str(photo))
+        f = open("./photo-no", "w")
+        f.write(str(photo))
+        f.close()
 
         # request the chosen photo with additional information
-        getinfo = "SELECT path, date_creation, name, comment, COALESCE(author, 'unknown'), file "
-        getinfo += "FROM pwg_images where id = " + str(photo)
+        getinfo = "SELECT path, date_creation, name, comment, COALESCE(author, 'unknown'),"
+        getinfo += " file FROM pwg_images where id = " + str(photo)
         db = pymysql.connect(dbhost, dbuser, dbpass, dbname)
         cursor = db.cursor()
         cursor.execute(getinfo)
@@ -105,6 +114,18 @@ def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, r
                 pictimestamp = "am " + pictime.strftime("%d.%m.%Y")
             else:
                 pictimestamp = "am " + pictime.strftime("%d.%m.%Y") + " um " + pictime.strftime("%H:%M") + " Uhr"
+
+        '''
+        # This part only works if your photo filenames stored in Piwigo are
+        # in the following format:
+        # fff-nn-yyyymm.jpg
+        # fff  = film no. (or any other data)
+        # nn   = negative/slide no. (or any other data)
+        # The important thing is that the parts are separated by '-'
+        #  and the year and month are the third part and not separated:
+        # yyyy = in which year the photo has been taken
+        # mm   = in which month the photo has been taken
+
         elif origfile.count("-") == 2:
             origfile = origfile.replace(".jpg", "")
             origfileparts = origfile.split("-")
@@ -139,6 +160,7 @@ def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, r
                 else:
                     filemonth = ""
                 pictimestamp = "im " + filemonth + " " + origfileyear
+        '''
         else:
             pictimestamp = ""
         picdata['phototime'] = pictimestamp
@@ -153,7 +175,11 @@ def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, r
             picdata['descr'] = picinfo[3].replace("\r\n", "<br />")
 
         # 4 = author name
-        picdata['author'] = picinfo[4]
+        if picinfo[4] == None:
+            picdata['author'] = '(unknown)'
+            logging.debug('Photo author is %s.', picinfo[4])
+        else:
+            picdata['author'] = picinfo[4]
 
         # https://media.atari-frosch.de/picture.php?/1648/category/738        
         if not piwigosite.endswith("/"):
@@ -176,16 +202,20 @@ def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, r
             albumlink = piwigosite + "picture.php?/" + str(photo) + "/category/" + curalbum
             db = pymysql.connect(dbhost, dbuser, dbpass, dbname)
             cursor = db.cursor()
-            a, upper = fetchalbumname(cursor, curalbum)
+            a, upper, private = fetchalbumname(cursor, curalbum)
             db.close()
-            albumname = str(a)
-            while upper != None:
-                db = pymysql.connect(dbhost, dbuser, dbpass, dbname)
-                cursor = db.cursor()
-                a, upper = fetchalbumname(cursor, upper)
-                db.close()
-                albumname = str(a) + " / " + albumname
-            piwigoalbums.append('<li><a href="' + albumlink + '">' + albumname + '</a></li>')
+            if not private:
+                albumname = str(a)
+                while upper != None:
+                    db = pymysql.connect(dbhost, dbuser, dbpass, dbname)
+                    cursor = db.cursor()
+                    a, upper = fetchalbumname(cursor, upper, private)
+                    db.close()
+                    if not private:
+                        albumname = str(a) + " / " + albumname
+                    else:
+                        continue
+                piwigoalbums.append('<li><a href="' + albumlink + '">' + albumname + '</a></li>')
 
         getlicense = "SELECT COALESCE(cr_id, 0) FROM pwg_copyrights_media WHERE media_id = " + str(photo)
         db = pymysql.connect(dbhost, dbuser, dbpass, dbname)
@@ -194,7 +224,14 @@ def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, r
         l = cursor.fetchone()
         db.close()
 
-        if lic == 0:
+        '''
+        There is still a bug if cr_id is NULL, it seems that COALESCE does
+        not work here! If cr_id is NULL, the script breaks; the page shows
+        the next photo, but with the data of the last one!
+        '''
+    
+        logging.debug('License code is %s.', l[0])
+        if l[0] == 0:
             licensename = "keine freie Lizenz"
         elif l[0] == 1:
             licensename = "CC-BY"
@@ -242,16 +279,16 @@ def randomphoto(piwigoconfig, basewidth, baseheight, randompiclog, piwigosite, r
 
 ###
 
-# replace $names with your configuration.
+# Include your own page data here.
 
 piwigoconfig = "$piwigopath/local/config/database.inc.php"
 # target width of photos in landscape format
 basewidth = 600
 # target height of photos in portrait format
 baseheight = 600
-pictargetfile = "$targetpath/randompic.jpg"
-randompiclog = "$logpath/random.log"
-piwigosite = "https://$yourpiwigosite"
+pictargetfile = "/srv/$yoursite/randompic.jpg"
+randompiclog = "$htmlgluepath/htmlglue/random.log"
+piwigosite = "https://$yourpiwigosite/"
 
 myfilename = argv[0]
 randomsnippet = myfilename.rsplit("/", 1)[0] + "/SNIPPETS/randomphoto.htm"