getopt --> argparse, redid logging, code cleanup

This commit is contained in:
Dpeta 2022-09-06 13:26:14 +02:00
parent 45320c9bea
commit ef0898e8c7
19 changed files with 221 additions and 344 deletions

View file

@ -1,7 +1,7 @@
# Changelog
(This document uses YYYY-MM-DD)
## [v2.4.3] - 2022-09-05
## [v2.4.3] - 2022-09-06
### Added
- Support for color via IRCv3 metadata draft.
@ -11,10 +11,16 @@
### Changed
- Reenabled server certificate validation when using SSL.
- Uses the system's local certificates, so might fail on some installations.
- Redid command-line handling with the argparse module instead of getopt.
- Restructured imports & data directory checks in pesterchum.py
### Fixed
- Error when setting quirk with PyQt5.
### Depreciated
- Disabled the console for now since no one seems to use it and it caused an issue on import.
- Logging.config/configparser logging configuration, not aware of anyone that actually used this. Logging level can still be specified with command line arguments. (-l --logging)
## [v2.4.2] - 2022-08-14
### Added

View file

@ -7,7 +7,6 @@ import traceback
import time
import datetime
import logging
import logging.config
try:
from PyQt6 import QtCore, QtGui, QtWidgets
@ -25,11 +24,8 @@ import ostools
#from version import _pcVersion
from pnc.dep.attrdict import AttrDict
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
class ConsoleWindow(QtWidgets.QDialog):
#~class ConsoleWindow(styler.PesterBaseWindow):
# A simple console class, cobbled together from the corpse of another.

View file

@ -1,6 +1,5 @@
import sys
import logging
import logging.config
from string import Template
from time import strftime
from datetime import datetime, timedelta
@ -15,14 +14,15 @@ except ImportError:
import ostools
from dataobjs import PesterHistory
from parsetools import (convertTags, lexMessage, mecmd, colorBegin, colorEnd,
from parsetools import (convertTags,
lexMessage,
mecmd,
colorBegin,
colorEnd,
smiledict)
import parsetools
from pnc.dep.attrdict import AttrDict
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
class PesterTabWindow(QtWidgets.QFrame):

View file

@ -1,8 +1,5 @@
import logging
import logging.config
import ostools
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
try:
from PyQt6 import QtGui

3
irc.py
View file

@ -1,5 +1,4 @@
import logging
import logging.config
import socket
import random
import time
@ -22,8 +21,6 @@ from oyoyo.client import IRCClient
from oyoyo.cmdhandler import DefaultCommandHandler
from oyoyo import helpers, services
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
# Python 3

View file

@ -5,7 +5,6 @@ Hard for me to work on this since I know absolutely nothing about lua, plus I'm
+ I asked and there doesn't seem to be a single person who actually used this 💀
import logging
import logging.config
import os
import sys
import re
@ -15,8 +14,6 @@ from PyQt6 import QtCore, QtGui, QtWidgets
import ostools
from quirks import ScriptQuirks
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
try:

View file

@ -1,5 +1,4 @@
import logging
import logging.config
import re
from string import Template
from datetime import timedelta, datetime
@ -21,8 +20,6 @@ from parsetools import (convertTags, timeProtocol, lexMessage, colorBegin,
mecmd, smiledict)
from logviewer import PesterLogViewer
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
# Python 3
@ -412,7 +409,6 @@ class PesterMemo(PesterConvo):
self.textArea = MemoText(self.mainwindow.theme, self)
self.textInput = MemoInput(self.mainwindow.theme, self)
print(self.textInput)
self.textInput.setFocus()
self.miniUserlist = QtWidgets.QPushButton(">\n>", self)

View file

@ -1,7 +1,7 @@
import os
import sys
import platform
try:
from PyQt6.QtCore import QStandardPaths
except ImportError:
@ -32,6 +32,27 @@ def osVer():
elif isLinux():
return " ".join(platform.linux_distribution())
def validateDataDir():
"""Checks if data directory is present"""
# Define paths
datadir = getDataDir()
profile = os.path.join(datadir, "profiles")
quirks = os.path.join(datadir, "quirks")
logs = os.path.join(datadir, "logs")
errorlogs = os.path.join(datadir, "errorlogs")
backup = os.path.join(datadir, "backup")
js_pchum = os.path.join(datadir, "pesterchum.js")
dirs = [datadir, profile, quirks, logs, errorlogs, backup]
for d in dirs:
if (os.path.isdir(d) == False) or (os.path.exists(d) == False):
os.makedirs(d, exist_ok=True)
# pesterchum.js
if not os.path.exists(js_pchum):
with open(js_pchum, 'w') as f:
f.write("{}")
def getDataDir():
# Temporary fix for non-ascii usernames
# If username has non-ascii characters, just store userdata
@ -43,5 +64,6 @@ def getDataDir():
return os.path.join(QStandardPaths.writableLocation(QStandardPaths.StandardLocation.HomeLocation), ".pesterchum/")
else:
return os.path.join(QStandardPaths.writableLocation(QStandardPaths.StandardLocation.AppLocalDataLocation), "pesterchum/")
except UnicodeDecodeError:
except UnicodeDecodeError as e:
print(e)
return ''

View file

@ -16,10 +16,6 @@
# THE SOFTWARE.
import logging
import logging.config
import ostools
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
import logging
@ -326,7 +322,7 @@ class IRCClient:
for el in data:
tags, prefix, command, args = parse_raw_irc_command(el)
print(tags, prefix, command, args)
#print(tags, prefix, command, args)
try:
# Only need tags with tagmsg
if command.upper() == "TAGMSG":

View file

@ -15,18 +15,13 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
import logging
import logging.config
import ostools
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
import inspect
import logging
from oyoyo import helpers
from oyoyo.parse import parse_nick
PchumLog = logging.getLogger('pchumLogger')
def protected(func):
""" decorator to protect functions from being called """
func.protected = True

View file

@ -18,13 +18,10 @@
""" contains helper functions for common irc commands """
import logging
import logging.config
import ostools
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
import random
PchumLog = logging.getLogger('pchumLogger')
def msg(cli, user, msg):
for line in msg.split('\n'):
cli.send("PRIVMSG", user, ":%s" % line)

View file

@ -16,13 +16,9 @@
# THE SOFTWARE.
import logging
import logging.config
import ostools
from oyoyo.ircevents import numeric_events
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
def parse_raw_irc_command(element):

View file

@ -1,5 +1,4 @@
import logging
import logging.config
import re
import collections
from copy import copy
@ -20,8 +19,6 @@ from quirks import ScriptQuirks
from pyquirks import PythonQuirks
#from luaquirks import LuaQuirks
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
# I'll clean up the things that are no longer needed once the transition is
@ -42,16 +39,18 @@ _oocre = re.compile(r"([\[(\{])\1.*([\])\}])\2")
_format_begin = re.compile(r'(?i)<([ibu])>')
_format_end = re.compile(r'(?i)</([ibu])>')
_honk = re.compile(r"(?i)\bhonk\b")
_groupre = re.compile(r"\\([0-9]+)")
quirkloader = ScriptQuirks()
quirkloader.add(PythonQuirks())
#quirkloader.add(LuaQuirks())
quirkloader.loadAll()
# Quirks are already listed in quirks.py, so logging is redundant here.
#PchumLog.debug(quirkloader.funcre())
quirkloader.funcre()
_functionre = re.compile(r"%s" % quirkloader.funcre())
_groupre = re.compile(r"\\([0-9]+)")
_functionre = None
def loadQuirks():
global quirkloader, _functionre
quirkloader.add(PythonQuirks())
#quirkloader.add(LuaQuirks())
quirkloader.loadAll()
quirkloader.funcre()
_functionre = re.compile(r"%s" % quirkloader.funcre())
def reloadQuirkFunctions():
quirkloader.loadAll()

View file

@ -1,41 +1,60 @@
#!/usr/bin/env python3
import sys
import os
import sys
import shutil
import getopt
import configparser
import argparse
import traceback
# Python 3
QString = str
if os.path.dirname(sys.argv[0]):
os.chdir(os.path.dirname(sys.argv[0]))
print("Usage: pesterchum.py [OPTIONS]")
print("Use -h/--help to see the available options."
"\nLogging is configured in logging.ini")
# Help
if ('--help' in sys.argv[1:]) or ('-h' in sys.argv[1:]):
print("Possible arguments:")
help_arguments = (" -l, --logging\n Specify level of logging, possible values are:\n"
" CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET.\n"
" The default value is WARNING.\n"
" (See https://docs.python.org/3/library/logging.html)\n\n"
" -s, --server\n Specify server override. (legacy)\n\n"
" -p, --port\n Specify port override. (legacy)\n\n"
" --advanced\n Enable advanced.\n\n"
" --no-honk\n Disable honking.\n")
print(help_arguments)
sys.exit()
import logging
import logging.config
import datetime
import random
import re
import time
import json
import ostools
import nickservmsgs
import pytwmn
#import console
from pnc.dep.attrdict import AttrDict
from profile import (userConfig,
userProfile,
pesterTheme,
PesterLog,
PesterProfileDB)
from menus import (PesterChooseQuirks,
PesterChooseTheme,
PesterChooseProfile,
PesterOptions,
PesterUserlist,
PesterMemoList,
LoadingScreen,
AboutPesterchum,
UpdatePesterchum,
AddChumDialog)
from mood import (Mood,
PesterMoodAction,
PesterMoodHandler,
PesterMoodButton)
from dataobjs import PesterProfile, pesterQuirk, pesterQuirks
from generic import (PesterIcon,
RightClickTree,
PesterList,
CaseInsensitiveDict,
MovingWindow,
NoneSound,
WMButton)
from convo import (PesterTabWindow,
PesterConvo)
from parsetools import (convertTags,
addTimeInitial,
themeChecker,
ThemeException,
loadQuirks)
from memos import PesterMemo, MemoTabWindow, TimeTracker
from irc import PesterIRC
from logviewer import PesterLogUserSelect, PesterLogViewer
from randomer import RandomHandler, RANDNICK
from toast import PesterToastMachine, PesterToast
try:
from PyQt6 import QtCore, QtGui, QtWidgets
@ -45,199 +64,69 @@ except ImportError:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QAction, QShortcut, QActionGroup
#vnum = QtCore.qVersion()
#major = int(vnum[:vnum.find(".")])
#if vnum.find(".", vnum.find(".")+1) != -1:
# minor = int(vnum[vnum.find(".")+1:vnum.find(".", vnum.find(".")+1)])
#else:
# minor = int(vnum[vnum.find(".")+1:])
#if (major < 6) or ((major > 6) and (minor < 2)):
# print("ERROR: Pesterchum requires at least Qt version >= 6.2")
# print("You currently have version " + str(vnum) + ". Please upgrade Qt.")
# sys.exit()
import ostools
# Placed here before importing the rest of pesterchum, since bits of it need
# OSX's data directory and it doesn't hurt to have everything set up before
# plowing on. :o)
# ~Lex
# Data directory
ostools.validateDataDir()
_datadir = ostools.getDataDir()
if not os.path.isdir(_datadir):
os.makedirs(_datadir)
if not os.path.isdir(os.path.join(_datadir, 'errorlogs')):
os.makedirs(os.path.join(_datadir, 'errorlogs'))
# See, what I've done here is that _datadir is '' if we're not on OSX, so the
# concatination is the same as if it wasn't there.
# UPDATE 2011-11-28 <Kiooeht>:
# Now using data directory as defined by QDesktopServices on all platforms
# (on Linux, same as using xdg). To stay safe with older versions, copy any
# data (profiles, logs, etc) from old location to new data directory.
config = configparser.ConfigParser()
# Create logging.ini
#if os.path.exists(_datadir + "logging.ini") == False:
try:
config.read(_datadir + 'logging.ini')
# Data directory dependent actions
loadQuirks()
# Test load
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
except:
#config.read('logging.ini.example')
config = configparser.ConfigParser()
# Command line options
parser = argparse.ArgumentParser()
parser.add_argument("--server",
"-s",
metavar="ADDRESS",
help="Specify server override. (legacy)")
parser.add_argument("--port",
"-p",
metavar="PORT",
help="Specify port override. (legacy)")
parser.add_argument("--logging",
"-l",
metavar="LEVEL",
default="WARNING",
help=("Specify level of logging, possible values are:"
" CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET."
" (https://docs.python.org/3/library/logging.html)"))
parser.add_argument("--advanced",
action="store_true",
help=("Enable 'advanced' mode. Adds an 'advanced' tab"
" to settings for setting user mode and adds"
" channel modes in memo titles."
" This feature is currently not maintained."))
parser.add_argument("--nohonk",
action="store_true",
help="Disables the honk soundeffect 🤡📣")
# Default setup
config['loggers'] = {'keys': 'root,pchumLogger'}
config['handlers'] = {'keys': 'consoleHandler,FileHandler'}
config['formatters'] = {'keys': 'simpleFormatter'}
config['logger_root'] = {'level': 'WARNING',
'handlers': 'consoleHandler'}
config['handler_consoleHandler'] = {'class': 'StreamHandler',
'level': 'WARNING',
'formatter': 'simpleFormatter',
'args': '(sys.stdout,)'}
config['handler_FileHandler'] = {'class': 'FileHandler',
'level': 'WARNING',
'formatter': 'simpleFormatter'}
config['logger_pchumLogger'] = {'level': 'WARNING',
'handlers': 'consoleHandler,FileHandler',
'qualname': 'pchumLogger',
'propagate': '0'}
config['formatter_simpleFormatter'] = {'format': '%(levelname)s - %(module)s - %(message)s',
'datefmt': ''}
# Enable file logging
config['handlers']['keys'] = 'consoleHandler,FileHandler'
config['logger_pchumLogger']['handlers'] = 'consoleHandler,FileHandler'
#(r'C:\Users\X\AppData\Local\pesterchum\pesterchum.log', 'a')
config['handler_FileHandler'] = {'class': 'FileHandler',
'level': 'WARNING',
'formatter': 'simpleFormatter',
'args': (_datadir + 'pesterchum.log', 'a')}
print(config.sections())
loglevel = "30"# Warning (Default)
if ('--logging' in sys.argv[1:]) or ('-l' in sys.argv[1:]) & (False == ('--logging' in sys.argv[1:]) and ('-l' in sys.argv[1:])):
try:
# If both are specified, this does not run.
if ('-l' in sys.argv[1:]):
loglevel = sys.argv[sys.argv.index('-l') + 1]
if ('--logging' in sys.argv[1:]):
loglevel = sys.argv[sys.argv.index('--logging') + 1]
loglevel = loglevel.upper().strip()
config.read(_datadir + 'logging.ini')
print("loglevel = " + loglevel)
if loglevel == "50" or loglevel == "CRITICAL":
loglevel = "CRITICAL"
print("Logging Level is CRITICAL")
elif loglevel == "40" or loglevel == "ERROR":
loglevel = "ERROR"
print("Logging Level is ERROR")
elif loglevel == "30" or loglevel == "WARNING":
loglevel = "WARNING"
print("Logging Level is WARNING")
elif loglevel == "20" or loglevel == "INFO":
loglevel = "INFO"
print("Logging Level is INFO")
elif loglevel == "10" or loglevel == "DEBUG":
loglevel = "DEBUG"
print("Logging Level is DEBUG")
elif loglevel == "0" or loglevel == "NOTSET":
loglevel = "NOTSET"
print("Logging Level is NOTSET")
else:
loglevel = "WARNING"
print("Logging Level is WARNING")
config['logger_root']['level'] = loglevel
config['logger_pchumLogger']['level'] = loglevel
config['handler_consoleHandler']['level'] = loglevel
config['handler_FileHandler']['level'] = loglevel
# Remove from argv because the rest of the code can't handle it :/
if ('-l' in sys.argv[1:]):
sys.argv.pop(sys.argv.index('-l') + 1)
sys.argv.pop(sys.argv.index('-l'))
if ('--logging' in sys.argv[1:]):
sys.argv.pop(sys.argv.index('--logging') + 1)
sys.argv.pop(sys.argv.index('--logging'))
except:
logging.exception("Invalid syntax?")
# Update logging.ini
with open(_datadir + "logging.ini", 'w') as configfile:
config.write(configfile)
# Load logging.ini
logging.config.fileConfig(_datadir + "logging.ini")
# Set logging config section, log level is in oppts.
# Logger
PchumLog = logging.getLogger('pchumLogger')
# Handlers
file_handler = logging.FileHandler(os.path.join(_datadir, 'pesterchum.log'))
stream_handler = logging.StreamHandler()
# Format
formatter = logging.Formatter('%(asctime)s - %(module)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
# Add handlers
PchumLog.addHandler(file_handler)
PchumLog.addHandler(stream_handler)
try:
import console
_CONSOLE = True
except ImportError:
_CONSOLE = False
logging.warning("Console file not shipped; skipping.")
if _datadir:
if not os.path.exists(_datadir):
os.makedirs(_datadir)
if not os.path.exists(_datadir+"profiles/") and os.path.exists("profiles/"):
shutil.move("profiles/", _datadir+"profiles/")
if not os.path.exists(_datadir+"pesterchum.js") and os.path.exists("pesterchum.js"):
shutil.move("pesterchum.js", _datadir+"pesterchum.js")
if not os.path.exists(_datadir+"logs/") and os.path.exists("logs/"):
shutil.move("logs/", _datadir+"logs/")
if not os.path.exists(_datadir+"profiles"):
os.mkdir(_datadir+"profiles")
if not os.path.exists(_datadir+"pesterchum.js"):
f = open(_datadir+"pesterchum.js", 'w')
f.write("{}")
f.close()
if not os.path.exists(_datadir+"logs"):
os.mkdir(_datadir+"logs")
from profile import userConfig, userProfile, pesterTheme, PesterLog, \
PesterProfileDB
from menus import PesterChooseQuirks, PesterChooseTheme, \
PesterChooseProfile, PesterOptions, PesterUserlist, PesterMemoList, \
LoadingScreen, AboutPesterchum, UpdatePesterchum, AddChumDialog
from mood import Mood, PesterMoodAction, PesterMoodHandler, PesterMoodButton
from dataobjs import PesterProfile, pesterQuirk, pesterQuirks
from generic import PesterIcon, RightClickTree, \
PesterList, CaseInsensitiveDict, MovingWindow, \
NoneSound, WMButton
from convo import PesterTabWindow, PesterConvo
from parsetools import convertTags, addTimeInitial, themeChecker, ThemeException
from memos import PesterMemo, MemoTabWindow, TimeTracker
from irc import PesterIRC
from logviewer import PesterLogUserSelect, PesterLogViewer
from randomer import RandomHandler, RANDNICK
import nickservmsgs
from toast import PesterToastMachine, PesterToast
import pytwmn
#canon_handles = ["apocalypseArisen", "arsenicCatnip", "arachnidsGrip", "adiosToreador",
# "caligulasAquarium", "cuttlefishCuller", "carcinoGeneticist", "centaursTesticle",
# "grimAuxiliatrix", "gallowsCalibrator", "gardenGnostic", "ectoBiologist",
# "twinArmageddons", "terminallyCapricious", "turntechGodhead", "tentacleTherapist"]
# Global variables
BOTNAMES = []
CUSTOMBOTS = ["CALSPRITE", RANDNICK.upper()]
SERVICES = ["NICKSERV", "CHANSERV", "MEMOSERV", "OPERSERV", "HELPSERV", "HOSTSERV", "BOTSERV"]
BOTNAMES.extend(CUSTOMBOTS)
BOTNAMES.extend(SERVICES)
# Save the main app. From here, we should be able to get everything else in
# order, for console use.
_CONSOLE = False
_CONSOLE_ENV = AttrDict()
_CONSOLE_ENV.PAPP = None
# Python 3
QString = str
# Command line arguments
_ARGUMENTS = parser.parse_args()
# Import audio module
if ostools.isLinux():
@ -250,7 +139,8 @@ if ostools.isLinux():
import pygame
except ImportError:
print("Failed to import pygame, falling back to QtMultimedia. "
+ "For QtMultimedia to work on Linux you need GStreamer"
+ "This should also work fine, but for QtMultimedia to work "
+ "on Linux you need GStreamer"
+ " + a plugin for decoding the wave format.")
try:
from PyQt6 import QtMultimedia
@ -682,32 +572,32 @@ class chumArea(RightClickTree):
self.showOnlineNumbers()
def showOnlineNumbers(self):
if hasattr(self, 'groups'):
self.hideOnlineNumbers()
totals = {'Chums': 0}
online = {'Chums': 0}
for g in self.groups:
totals[str(g)] = 0
online[str(g)] = 0
for c in self.chums:
yes = c.mood.name() != "offline"
if c.group == "Chums":
totals[str(c.group)] = totals[str(c.group)]+1
if yes:
online[str(c.group)] = online[str(c.group)]+1
elif c.group in totals:
totals[str(c.group)] = totals[str(c.group)]+1
if yes:
online[str(c.group)] = online[str(c.group)]+1
else:
totals["Chums"] = totals["Chums"]+1
if yes:
online["Chums"] = online["Chums"]+1
for i in range(self.topLevelItemCount()):
text = str(self.topLevelItem(i).text(0))
if text.rfind(" (") != -1:
text = text[0:text.rfind(" (")]
if text in online:
self.topLevelItem(i).setText(0, "%s (%i/%i)" % (text, online[text], totals[text]))
self.hideOnlineNumbers()
totals = {'Chums': 0}
online = {'Chums': 0}
for g in self.groups:
totals[str(g)] = 0
online[str(g)] = 0
for c in self.chums:
yes = c.mood.name() != "offline"
if c.group == "Chums":
totals[str(c.group)] = totals[str(c.group)]+1
if yes:
online[str(c.group)] = online[str(c.group)]+1
elif c.group in totals:
totals[str(c.group)] = totals[str(c.group)]+1
if yes:
online[str(c.group)] = online[str(c.group)]+1
else:
totals["Chums"] = totals["Chums"]+1
if yes:
online["Chums"] = online["Chums"]+1
for i in range(self.topLevelItemCount()):
text = str(self.topLevelItem(i).text(0))
if text.rfind(" (") != -1:
text = text[0:text.rfind(" (")]
if text in online:
self.topLevelItem(i).setText(0, "%s (%i/%i)" % (text, online[text], totals[text]))
def hideOnlineNumbers(self):
for i in range(self.topLevelItemCount()):
text = str(self.topLevelItem(i).text(0))
@ -1270,15 +1160,16 @@ class PesterWindow(MovingWindow):
# This was almost certainly intentional.
if "advanced" in options:
self.advanced = options["advanced"]
else: self.advanced = False
else:
self.advanced = False
if "server" in options:
self.serverOverride = options["server"]
if "port" in options:
self.portOverride = options["port"]
if "honk" in options:
self.honk = options["honk"]
else: self.honk = True
else:
self.honk = True
self.modes = ""
self.sound_type = None
@ -2969,9 +2860,9 @@ class PesterWindow(MovingWindow):
self.config.set("showTimeStamps", timestampsetting)
timeformatsetting = str(self.optionmenu.timestampBox.currentText())
if timeformatsetting == "12 hour":
self.config.set("time12Format", True)
self.config.set("time12Format", True)
else:
self.config.set("time12Format", False)
self.config.set("time12Format", False)
secondssetting = self.optionmenu.secondscheck.isChecked()
self.config.set("showSeconds", secondssetting)
# groups
@ -3066,12 +2957,12 @@ class PesterWindow(MovingWindow):
# Taskbar blink
blinksetting = 0
if self.optionmenu.pesterBlink.isChecked():
blinksetting |= self.config.PBLINK
blinksetting |= self.config.PBLINK
if self.optionmenu.memoBlink.isChecked():
blinksetting |= self.config.MBLINK
blinksetting |= self.config.MBLINK
curblink = self.config.blink()
if blinksetting != curblink:
self.config.set('blink', blinksetting)
self.config.set('blink', blinksetting)
# toast notifications
self.tm.setEnabled(self.optionmenu.notifycheck.isChecked())
self.tm.setCurrentType(str(self.optionmenu.notifyOptions.currentText()))
@ -3623,7 +3514,7 @@ class PesterWindow(MovingWindow):
server_file.write(json.dumps(json_server_file, indent = 4) )
server_file.close()
except:
PchumLog.error("Failed to set server :(")
PchumLog.error("Failed to set server :(")
# Continue running Pesterchum as usual
# Sorry-
@ -4116,19 +4007,27 @@ class MainProgram(QtCore.QObject):
def oppts(self, argv):
options = {}
# The parser and arguments are defined globally,
# since --help causes Qt to raise an exception otherwise.
args = _ARGUMENTS
try:
opts, args = getopt.getopt(argv, "s:p:", ["server=", "port=", "advanced", "no-honk"])
except getopt.GetoptError:
return options
for opt, arg in opts:
if opt in ("-s", "--server"):
options["server"] = arg
elif opt in ("-p", "--port"):
options["port"] = arg
elif opt in ("--advanced"):
options["advanced"] = True
elif opt in ("--no-honk"):
if args.server != None:
options["server"] = args.server
if args.port != None:
options["port"] = args.port
# Set log level
PchumLog.setLevel(args.logging.upper())
file_handler.setLevel(args.logging.upper())
stream_handler.setLevel(args.logging.upper())
# Enable advanced
options["advanced"] = args.advanced
# Disable honks
if args.nohonk == True:
options["honk"] = False
except Exception as e:
print(e)
return options
return options
def uncaughtException(self, exc, value, tb):

View file

@ -6,7 +6,6 @@ import codecs
import shutil
import zipfile
import logging
import logging.config
from string import Template
from datetime import datetime
from time import strftime
@ -23,7 +22,6 @@ from dataobjs import PesterProfile, pesterQuirks
from parsetools import convertTags
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
@ -274,20 +272,20 @@ with a backup from: <a href='%s'>%s</a></h3></html>" % (_datadir, self.filename,
return self.config.get('opvMessages', True)
def animations(self):
return self.config.get('animations', True)
def checkForUpdates(self):
u = self.config.get('checkUpdates', 0)
if type(u) == type(bool()):
if u: u = 2
else: u = 3
return u
# Once a day
# Once a week
# Only on start
# Never
def lastUCheck(self):
return self.config.get('lastUCheck', 0)
def checkMSPA(self):
return self.config.get('mspa', False)
#def checkForUpdates(self):
# u = self.config.get('checkUpdates', 0)
# if type(u) == type(bool()):
# if u: u = 2
# else: u = 3
# return u
# # Once a day
# # Once a week
# # Only on start
# # Never
#def lastUCheck(self):
# return self.config.get('lastUCheck', 0)
#def checkMSPA(self):
# return self.config.get('mspa', False)
def blink(self):
return self.config.get('blink', self.PBLINK | self.MBLINK)
def notify(self):

View file

@ -1,5 +1,4 @@
import logging
import logging.config
import importlib.util
try:
@ -11,8 +10,6 @@ except ImportError:
import ostools
from quirks import ScriptQuirks
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
class PythonQuirks(ScriptQuirks):

View file

@ -1,11 +1,9 @@
import os
import logging
import logging.config
import ostools
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
class ScriptQuirks(object):
@ -37,7 +35,7 @@ class ScriptQuirks(object):
if self.last[k] == self.quirks[k]:
del self.quirks[k]
#print self.quirks
if self.quirks:
if hasattr(self, 'quirks'):
# See https://stackoverflow.com/questions/12843099/python-logging-typeerror-not-all-arguments-converted-during-string-formatting
reg_quirks = ('Registered quirks:', '(), '.join(self.quirks) + "()")
PchumLog.info(reg_quirks)
@ -53,13 +51,13 @@ class ScriptQuirks(object):
extension = self.getExtension()
filenames = []
if not os.path.exists(os.path.join(self.home, 'quirks')):
os.mkdir(os.path.join(self.home, 'quirks'))
os.makedirs(os.path.join(self.home, 'quirks'), exist_ok=True)
for fn in os.listdir(os.path.join(self.home, 'quirks')):
if fn.endswith(extension) and not fn.startswith('_'):
filenames.append(os.path.join(self.home, 'quirks', fn))
if self._datadir:
if hasattr(self, '_datadir'):
if not os.path.exists(os.path.join(self._datadir, 'quirks')):
os.mkdir(os.path.join(self._datadir, 'quirks'))
os.makedirs(os.path.join(self._datadir, 'quirks'), exist_ok=True)
for fn in os.listdir(os.path.join(self._datadir, 'quirks')):
if fn.endswith(extension) and not fn.startswith('_'):
filenames.append(os.path.join(self._datadir, 'quirks', fn))
@ -75,10 +73,6 @@ class ScriptQuirks(object):
continue
except Exception as e:
PchumLog.warning("Error loading %s: %s (in quirks.py)" % (os.path.basename(name), e))
#msgbox = QtWidgets.QMessageBox()
#msgbox.setWindowTitle("Error!")
#msgbox.setText("Error loading %s: %s (in quirks.py)" % (os.path.basename(filename), e))
#msgbox.exec()
else:
if self.modHas(module, 'setup'):
module.setup()
@ -91,7 +85,7 @@ class ScriptQuirks(object):
del self.quirks[k]
def funcre(self):
if not self.quirks:
if not hasattr(self, 'quirks'):
return r"\\[0-9]+"
f = r"("
for q in self.quirks:

View file

@ -1,5 +1,4 @@
import logging
import logging.config
try:
from PyQt6 import QtCore, QtWidgets
@ -9,8 +8,6 @@ except ImportError:
import ostools
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
RANDNICK = "randomEncounter"

View file

@ -2,7 +2,6 @@ import os
#import time
import inspect
import logging
import logging.config
try:
from PyQt6 import QtCore, QtGui, QtWidgets
@ -13,7 +12,6 @@ except ImportError:
import ostools
_datadir = ostools.getDataDir()
logging.config.fileConfig(_datadir + "logging.ini")
PchumLog = logging.getLogger('pchumLogger')
#try: