[Twisted-Python] Re: nntp protocol supports moderated newsgroups?

Barry A. Warsaw barry at python.org
Sat Oct 19 10:21:43 MDT 2002


>>>>> "JC" == Jp Calderone <exarkun at twistedmatrix.com> writes:

    JC>  Hmm, twisted/news/database.py should have all the stuff it
    JC> needs already - maybe makeGroupSQL() will need to be modified
    JC> a bit so that twisted/tap/news.py can tell it which groups
    JC> should be moderated and which shouldn't.  twisted/tap/news.py
    JC> will probably have most of the action; it'll need code to let
    JC> the user specify moderated/unmoderated to mktap somehow, maybe
    JC> with another --groups parameter, or with some indicator in the
    JC> groups file.

    JC> Maybe it's time twisted.news got a *real* configuration
    JC> interface :) I'll ponder that a little (maybe something fun
    JC> with woven), and if you(/anyone else) have any ideas on this,
    JC> I'd love to hear them.

I don't really, since I'm fairly green in my Twisted use.  I will note
that the news stuff seems a little more difficult to use than when I
last looked at it (Twisted 0.19 I think).  I'm using Twisted from cvs
now, so it's possible this stuff is just in flux.

Specifically:

- What is the --servers switch for?  I couldn't actually find where
  that was used in tap/news.py but it seemed required, so I fed it
  nonsense. 

- I understand why "mktap news" requires an extra argument now, but it
  would be nice if either the pickle or sql command were defaulted.  I
  don't think I needed to specify "mktap news pickle" last time.  Hmm,
  maybe if --file is given you can default to pickle?

- I noticed some bugs in the code, a few of which I fixed, but some I
  didn't.  I ran the server w/ twistd -n and watched the output.  I
  got mysterious log messages such as:

[...]
19/10/2002 11:54 [*news*] Starting factory <twisted.news.news.UsenetClientFactory instance at 0x82a52d4>
19/10/2002 11:54 [*news*] Connection failed: [Failure instance: Traceback! exceptions.IOError, address not found
19/10/2002 11:54 [*news*] ]
19/10/2002 11:54 [*news*] Connection failed: [Failure instance: Traceback! exceptions.IOError, address not found
19/10/2002 11:54 [*news*] ]
19/10/2002 11:54 [*news*] Stopping factory <twisted.news.news.UsenetClientFactory instance at 0x82a52d4>
19/10/2002 11:55 [*news*] Starting factory <twisted.news.news.UsenetClientFactory instance at 0x82a52d4>
[...]

  While these repeated as long as the server was running, they didn't
  seem to affect its operation.

- In news/news.py, buildProtocol() is trying to pass self.remoteHosts
  to the self.protocol() call, but self.protocol() -- which is really
  the nntp.NNTPServer class, doesn't take two arguments.

In any event, I hacked in moderated group support by adding a
-m/--moderators flag, which takes a file containing a list of
newsgroup/moderator address pairs.  When a message is POSTed to a
group, the list of target newsgroups is checked against the
moderators.  If there is any match, and the article has no Approved
header, the article is not posted, but instead emailed to the
moderators address.  The value of the Approved header is completely
ignored -- it just has to be there.  I believe this is pretty close to
how Usenet s/w handles moderators.

A couple of kludges that should be cleaned up:

- What to do if the list of target newsgroups has more than one
  moderated newsgroup in it?  Off hand, I'm not sure what Usenet does
  in this case.

- We really need a few more config options, including the smtp host
  and port to use to send out the moderator's email, and the envelope
  sender address to use in that email.  Both are hard coded in my
  hack.

- Any un-Twisted coding offenses. :)

So, in the grand tradition of scratching my own itch, but just enough
so I can sleep, here's the patch.

Oh, BTW, for someone who was completely green to the code base,
Twisted is very nicely written.  It wasn't difficult at all to drill
down to where I needed to make the changes.  JP's hints helped a lot
too.  Yay!

Enjoy,
-Barry

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: twisted.txt
Url: http://twistedmatrix.com/pipermail/twisted-python/attachments/20021019/97b86b2c/attachment.txt 


More information about the Twisted-Python mailing list