isso-comments / isso

a Disqus alternative
https://isso-comments.de
MIT License
5.03k stars 440 forks source link

IssoParser instance has no attribute #128

Closed gllmhyt closed 9 years ago

gllmhyt commented 9 years ago

Configuration file as default as possible; virtualenv in /var/www/isso; launched with supervisor as www-data; environment is PATH=/var/www/isso/bin and ISSO_SETTINGS="/var/www/isso/isso.cfg", ... The output is:

Traceback (most recent call last):
  File "/var/www/isso/bin/isso", line 9, in <module>
    load_entry_point('isso==0.9.7', 'console_scripts', 'isso')()
  File "/var/www/isso/local/lib/python2.7/site-packages/isso/__init__.py", line 219, in main
    conf = Config.load(args.conf)
  File "/var/www/isso/local/lib/python2.7/site-packages/isso/core.py", line 130, in load
    rv.read_file(io.StringIO(u'\n'.join(Config.default)))
AttributeError: IssoParser instance has no attribute 'read_file'

isso.conf

# Isso configuration file
# vim: set filetype=ini

[general]

# file location to the SQLite3 database, highly recommended to change this
# location to a non-temporary location!
dbpath = /var/www/isso/comments.db

# required to dispatch multiple websites, not used otherwise.
name =

# Your website(s). If Isso is unable to connect to at least on site, you'll
# get a warning during startup and comments are most likely non-functional.
#
# You'll need at least one host/website to run Isso. This is due to security
# reasons: Isso uses CORS_ to embed comments and to restrict comments only to
# your website, you have to "whitelist" your website(s).
#
# I recommend the first value to be a non-SSL website that is used as fallback
# if Firefox users (and only those) supress their HTTP referer completely:
#
# host =
#     http://example.tld/
#     https://example.tld/
#
host =
    http://postblue.info/
    https://postblue.info/

# time range that allows users to edit/remove their own comments.
# It supports years, weeks, days, hours, minutes, seconds.
# 3h45m12s equals to 3 hours, 45 minutes and 12 seconds.
max-age = 15m

# Select notification backend for new comments. Currently, only SMTP is
# available.
# Select notification backend(s) for new comments, separated by comma.
# Available backends:
#
# stdout
#     Log to standard output. Default, if none selected.
# smtp
#     Send notifications via SMTP on new comments with activation (if
#     moderated) and deletion links.
notify = smtp

# Log console messages to file instead of standard out.
log-file =

[moderation]
# enable comment moderation queue. This option only affects new comments.
# Comments in modertion queue are not visible to other users until you activate
# them.
enabled = true

# remove unprocessed comments in moderation queue after given time.
purge-after = 30d

[server]
# interface to listen on. Isso supports TCP/IP and unix domain sockets: UNIX
# domain socket listen = unix:///tmp/isso.sock TCP/IP listen =
# http:///localhost:1234/
#
# When gevent is available, it is automatically used for http:// Currently,
# gevent can not handle http requests on unix domain socket (see #295 and #299
# for details).  Does not apply for uWSGI.
listen = http://localhost:8080

# reload application, when the source code has changed. Useful for development.
# Only works with the internal webserver.
reload = off

# show 10 most time consuming function in Isso after each request. Do not use
# in production.
profile = off

[smtp]
# Isso can notify you on new comments via SMTP. In the email notification, you
# also can moderate (=activate or delete) comments.

# self-explanatory, optional
username =

# self-explanatory (yes, plain text, create a dedicated account for
# notifications), optional.
password =

# SMTP server
host = localhost

# SMTP port
port = 25

# use a secure connection to the server, possible values: none, starttls or
# ssl. Note, that there is no easy way for Python 2.7 and 3.3 to implement
# certification validation and thus the connection is vulnerable to
# Man-in-the-Middle attacks. You should definitely use a dedicated SMTP account
# for Isso in that case.
security = starttls

# recipient address, e.g. your email address
to = admin+isso@postblue.info

# ender address, e.g. "Foo Bar" <isso@example.tld>
from = isso@postblue.info

# specify a timeout in seconds for blocking operations like the
# connection attempt.
timeout = 10

[guard]
# Enable basic spam protection features, e.g. rate-limit per IP address (/24
# for IPv4, /48 for IPv6).

# enable guard, recommended in production. Not useful for debugging purposes.
enabled = true

# limit to N new comments per minute.
ratelimit = 2

# how many comments directly to the thread (prevent a simple while true; do
# curl ...; done.
direct-reply = 3

# allow commenters to reply to their own comments when they could still edit
# the comment. After the editing timeframe is gone, commenters can reply to
# their own comments anyways. Do not forget to configure the client.
reply-to-self = false

[markup]
# Customize markup and sanitized HTML. Currently, only Markdown (via Misaka) is
# supported, but new languages are relatively easy to add.

# Misaka-specific Markdown extensions, all flags starting with EXT_ can be used
# there, separated by comma.
options = strikethrough, autolink, fenced_code, no_intra_emphasis

# Additional HTML tags to allow in the generated output, comma-separated. By
# default, only a, blockquote, br, code, del, em, h1, h2, h3, h4, h5, h6, hr,
# ins, li, ol, p, pre, strong, table, tbody, td, th, thead and ul are allowed.
allowed-elements =

# Additional HTML attributes (independent from elements) to allow in the
# generated output, comma-separated. By default, only align and href are
# allowed.
allowed-attributes =

[hash]
# Customize used hash functions to hide the actual email addresses from
# commenters but still be able to generate an identicon.

# A salt is used to protect against rainbow tables. Isso does not make use of
# pepper (yet). The default value has been in use since the release of Isso and
# generates the same identicons for same addresses across installations.
salt = Eech7co8Ohloopo9Ol6baimi

# Hash algorithm to use -- either from Python's hashlib or PBKDF2 (a
# computational expensive hash function).
#
# The actual identifier for PBKDF2 is pbkdf2:1000:6:sha1, which means 1000
# iterations, 6 bytes to generate and SHA1 as pseudo-random family used for key
# strengthening. Arguments have to be in that order, but can be reduced to
# pbkdf2:4096 for example to override the iterations only.
algorithm = pbkdf2

supervisor

[program:isso]
command = /var/www/isso/bin/isso run
directory = /var/www/isso
user = www-data
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/isso.log
stderr_logfile = /var/log/supervisor/isso_err.log
environment=ISSO_SETTINGS="/var/www/isso/isso.conf",PATH="/var/www/isso/bin"
posativ commented 9 years ago

I've been able to reproduce it manually.. how did you install/upgrade Isso in the first place? When I do

~> mktmpenv --python python2.7  # temporary virtualenv
[*]/t/venv.CXVr> pip install isso
[*]/t/venv.CXVr> pip freeze | grep configparser
configparser==3.3.0r2

It installs an older version of configparser. Now, when I manually upgrade configparser:

[*]/t/venv.CXVr> pip install configparser==3.5.0b1
[*]/t/venv.CXVr> isso -c ~/dev/isso/sample.cfg run
Traceback (most recent call last):
  File "/tmp/venv.CXVr/bin/isso", line 9, in <module>
    load_entry_point('isso==0.9.7', 'console_scripts', 'isso')()
  File "/tmp/venv.CXVr/lib/python2.7/site-packages/isso/__init__.py", line 219, in main
    conf = Config.load(args.conf)
  File "/tmp/venv.CXVr/lib/python2.7/site-packages/isso/core.py", line 130, in load
    rv.read_file(io.StringIO(u'\n'.join(Config.default)))
AttributeError: IssoParser instance has no attribute 'read_file'

It is appearently an issue with the recent rewrite of configparser: https://bitbucket.org/ambv/configparser/issue/8/configparser-import-broken-on-py27.

But the recent Travis CI run also produces the exception. I don't know how to workaround this issue. Both versions are not compatible and install differently (the previous version contained a hack to replace the default configparser).

gllmhyt commented 9 years ago

Ok. A bit tricky but I think I made it work by first deleting the system-wide installation of configparser, maybe a leftover of a previous installation of Isso before I installed it in a virtual environment. Then reinstalled Isso in a fresh virtalenv.

posativ commented 9 years ago

I made a small patch and it seems to work with Travis CI. You were not the only person with that error message. I'll release a new version today and try to run Travis CI each time a dependency changes (automatically).

posativ commented 9 years ago

I've uploaded a new version to PyPi that handles the newer version of configparser. Unfortunately, you're still stuck with some leftovers from the older configparser version.

Additionally, I submitted a Travis CI daily ping [1] to discover broken dependencies in the future.

[1] https://traviscron.pythonanywhere.com/