irclog.archive — IRC log archive

irclog.archive.STRPTIME_TO_GLOB

The table for translating strptime() directives to glob patterns.

irclog.archive.STRPTIME_DIRECTIVE_PATTERN

The re pattern object that matches to strptime() directives.

>>> fmtstr = "%Y-%m-%d"
>>> STRPTIME_DIRECTIVE_PATTERN.sub(lambda m: STRPTIME_TO_GLOB[m.group(0)],
...                                fmtstr)
'[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]'
class irclog.archive.FilenamePattern(pattern)[source]

Bases: object

The glob-like, but specialized to IRC log files, filename pattern matcher.

>>> pattern = FilenamePattern("/logs/<server>"
...                           "/<channel>.<date:%Y-%m-%d>.log")
>>> pattern.glob_pattern_string()
'/logs/*/*.[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9].log'
>>> pattern.glob_pattern_string(server="Freenode")
'/logs/Freenode/*.[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9].log'
REPLACER_PATTERN

The pattern of replacer e.g. <date:%Y-%m-%d>, <channel>.

replacer ::=  "<" name [ ":" format ] ">"
name     ::=  /[A-Za-z_]+/
format   ::=  /[^>]*/
replacers

The list of replacers.

>>> pattern = FilenamePattern("/logs/<server>"
...                           "/<channel>.<date:%Y-%m-%d>.log")
>>> list(pattern.replacers)
['server', 'channel', 'date']
replacer_pairs

The list of replacers’ (name, format). (For replacers have no format, (name, None).)

>>> pattern = FilenamePattern("/logs/<server>"
...                           "/<channel>.<date:%Y-%m-%d>.log")
>>> list(pattern.replacer_pairs)
[('server', None), ('channel', None), ('date', '%Y-%m-%d')]
replacer_dict

The dict of replacers.

>>> pattern = FilenamePattern("/logs/<server>"
...                           "/<channel>.<date:%Y-%m-%d>.log")
>>> pattern.replacer_dict["server"]
>>> pattern.replacer_dict["date"]
'%Y-%m-%d'
>>> pattern.replacer_dict["xyz"]
Traceback (most recent call last):
  ...
KeyError: 'xyz'
fill_replacers(replacers, escape=None)[source]

Fills replacers with given values.

>>> pattern = FilenamePattern("/logs/<server>"
...                           "/<channel>.<date:%Y-%m-%d>.log")
>>> import datetime
>>> pattern.fill_replacers({"server": "Freenode",
...                         "channel": "#hongminhee",
...                         "date": datetime.date(2010, 8, 4)})
'/logs/Freenode/#hongminhee.2010-08-04.log'

When escape function has given, non-replacers are applied into the function:

>>> pattern.fill_replacers({"server": "Freenode",
...                         "channel": "#hongminhee",
...                         "date": datetime.date(2010, 8, 4)},
...                        escape=lambda x: x.upper())
'/LOGS/Freenode/#hongminhee.2010-08-04.LOG'

It may raise KeyError when too few replacers has given:

>>> pattern.fill_replacers({"server": "Freenode"})
Traceback (most recent call last):
  ...
KeyError: 'channel'
Parameters:replacers (dict, mapping object) – a mapping object of (replacer_name, str_to_replace)
Returns:a filled filename
glob_pattern_string(**replacers)[source]

Generates a glob pattern string. It takes keyword arguments of replacers to fill also.

>>> pattern = FilenamePattern("/logs/<server>"
...                           "/<channel>.<date:%Y-%m-%d>.log")
>>> pattern.glob_pattern_string()
'/logs/*/*.[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9].log'
>>> pattern.glob_pattern_string(server="Freenode")
'/logs/Freenode/*.[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9].log'
>>> pattern.glob_pattern_string(channel="#hongminhee")
'/logs/*/#hongminhee.[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9].log'
>>> import datetime
>>> pattern.glob_pattern_string(date=datetime.date(2010, 8, 4))
'/logs/*/*.2010-08-04.log'
Parameters:**replacers – replacers to fill. keywords go replacer names and values fills them
Returns:a glob pattern string
glob(**replacers)[source]

Globs with the pattern.

Parameters:**replacers – replacers to fill. keywords go replacer names and values fills them
Returns:a list of all matched paths

See also

iglob(**replacers)[source]

Case-insensitive version of glob().

Parameters:**replacers – replacers to fill. keywords go replacer names and values fills them
Returns:a list of all matched paths

See also

re_pattern_string(**replacers)[source]

Generates a re pattern string. It takes keyword arguments of replacers to fill also.

>>> import datetime
>>> pattern = FilenamePattern("/<server>/<channel>.<date:%Y%m%d>")
>>> pattern.re_pattern_string(date=datetime.date(2010, 8, 4))
'^\\/(?P<server>.+?)\\/(?P<channel>.+?)\\.20100804$'
Parameters:**replacers – replacers to fill. keywords go replacer names and values fills them
Returns:a re pattern string
re_pattern(**replacers)[source]

Generates a re pattern object. It takes keyword arguments of replacers to fill also.

Parameters:**replacers – replacers to fill. keywords go replacer names and values fills them
Returns:a re pattern

Note

This method is the same to following code:

re.compile(file_pattern.re_pattern_string(**replacers))
class irclog.archive.BaseArchive[source]

Bases: object

Abstract base class for Archive, Server and Channel.

ELEMENT_CLASS

Should be implemented in the subclass.

ELEMNENT_TAG

Should be implemented in the subclass.

pattern_replacers

Should be implemented in the subclass.

decode_element_key(element_key)[source]

Decodes an element key string to element key.

Parameters:element_key (basestring) – an element key string
Returns:an element key
encode_element_key(element_key)[source]

Encodes am element key to element key string.

Parameters:element_key – an element key
Returns:an element key string
class irclog.archive.Archive(pattern)[source]

Bases: irclog.archive.BaseArchive

Log archive.

Parameters:pattern (FilenamePattern, basestring) – logs filename pattern e.g. "/logs/<server>/<channel>.<date:%Y-%m-%d>.log"
ELEMENT_CLASS

alias of Server

decode_element_key(element_key)

Decodes an element key string to element key.

Parameters:element_key (basestring) – an element key string
Returns:an element key
encode_element_key(element_key)

Encodes am element key to element key string.

Parameters:element_key – an element key
Returns:an element key string
class irclog.archive.Server(archive, server)[source]

Bases: irclog.archive.BaseArchive

IRC server.

Parameters:
  • archive (Archive) – an archive
  • server (basestring) – a server name
ELEMENT_CLASS

alias of Channel

decode_element_key(element_key)

Decodes an element key string to element key.

Parameters:element_key (basestring) – an element key string
Returns:an element key
encode_element_key(element_key)

Encodes am element key to element key string.

Parameters:element_key – an element key
Returns:an element key string
class irclog.archive.Channel(server, channel)[source]

Bases: irclog.archive.BaseArchive

IRC channel or nick.

Parameters:
  • server (Server) – a server
  • channel (basestring) – a channel name or a nick
ELEMENT_CLASS

alias of Log

decode_element_key(element_key)[source]

Decodes an element key string to element key.

Parameters:element_key (basestring) – an element key string
Returns:an element key
encode_element_key(element_key)[source]

Encodes am element key to element key string.

Parameters:element_key – an element key
Returns:an element key string
class irclog.archive.Log(channel, date)[source]

Bases: object

IRC log.

Parameters:
server

The server.

archive

The archive.

pattern

The filename pattern.

yesterday_log

The yesterday log of the same channel.

tomorrow_log

The tomorrow log of the same channel.

filename

The filename of the log. If not exists, it could be None.

file_size

The size of the log file in bytes.

is_logged()[source]

Returns True if the channel of the day has logged.

Returns:True or False