remove winterpy dependency

This commit is contained in:
lilydjwg 2013-08-23 17:49:51 +08:00
parent 47e7cbce53
commit da2e89df66
9 changed files with 115 additions and 7 deletions

View file

@ -15,7 +15,6 @@ DEPENDENCIES
- distribute
- tornado, > 2.4.1
- pyinotify, tested with 0.9.4
- winterpy (add ``pylib`` to ``$PYTHONPATH``)
NOTE
====
@ -28,7 +27,6 @@ TODO
- [high] adding and then removing it before adding complete will result
in not-in-database removing
- [high] remove winterpy dependency
- [middle] disable "any" architecture via config
- [low] fork to background
- [low] use one common command queue (now one each repo)

View file

@ -6,7 +6,7 @@ import logging
from tornado.ioloop import IOLoop
from myutils import enable_pretty_logging
from .lib.nicelogger import enable_pretty_logging
enable_pretty_logging(logging.DEBUG)
from .repomon import repomon

View file

@ -0,0 +1,5 @@
'''
moduels in this directory are taken from `winterpy <https://github.com/lilydjwg/winterpy>`_.
last sync is at 2013-08-23.
'''

36
archrepo2/lib/archpkg.py Normal file
View file

@ -0,0 +1,36 @@
import os
from collections import defaultdict, namedtuple
from pkg_resources import parse_version
class PkgNameInfo(namedtuple('PkgNameInfo', 'name, version, release, arch')):
def __lt__(self, other):
if self.name != other.name or self.arch != other.arch:
return NotImplemented
if self.version != other.version:
return parse_version(self.version) < parse_version(other.version)
return int(self.release) < int(other.release)
def __gt__(self, other):
# No, try the other side please.
return NotImplemented
@property
def fullversion(self):
return '%s-%s' % (self.version, self.release)
@classmethod
def parseFilename(cls, filename):
return cls(*trimext(filename, 3).rsplit('-', 3))
def trimext(name, num=1):
for i in range(num):
name = os.path.splitext(name)[0]
return name
def finddups(pkgs, n=1):
ret = defaultdict(list)
for f in pkgs:
name, ver, build, arch = PkgNameInfo.parseFilename(os.path.split(f)[1])
ret[name].append('%s-%s' % (ver, build))
return {k: sorted(v) for k, v in ret.items() if len(v) > n}

View file

@ -0,0 +1,69 @@
import sys
import time
import logging
class TornadoLogFormatter(logging.Formatter):
def __init__(self, color, *args, **kwargs):
super().__init__(self, *args, **kwargs)
self._color = color
if color:
import curses
curses.setupterm()
if sys.hexversion < 50463728:
fg_color = str(curses.tigetstr("setaf") or
curses.tigetstr("setf") or "", "ascii")
else:
fg_color = curses.tigetstr("setaf") or curses.tigetstr("setf") or b""
self._colors = {
logging.DEBUG: str(curses.tparm(fg_color, 4), # Blue
"ascii"),
logging.INFO: str(curses.tparm(fg_color, 2), # Green
"ascii"),
logging.WARNING: str(curses.tparm(fg_color, 3), # Yellow
"ascii"),
logging.ERROR: str(curses.tparm(fg_color, 1), # Red
"ascii"),
}
self._normal = str(curses.tigetstr("sgr0"), "ascii")
def format(self, record):
try:
record.message = record.getMessage()
except Exception as e:
record.message = "Bad message (%r): %r" % (e, record.__dict__)
record.asctime = time.strftime(
"%m-%d %H:%M:%S", self.converter(record.created))
record.asctime += '.%03d' % ((record.created % 1) * 1000)
prefix = '[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d]' % \
record.__dict__
if self._color:
prefix = (self._colors.get(record.levelno, self._normal) +
prefix + self._normal)
formatted = prefix + " " + record.message
if record.exc_info:
if not record.exc_text:
record.exc_text = self.formatException(record.exc_info)
if record.exc_text:
formatted = formatted.rstrip() + "\n" + record.exc_text
return formatted.replace("\n", "\n ")
def enable_pretty_logging(level=logging.DEBUG):
logger = logging.getLogger()
h = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s:%(levelname)-7s:%(name)-12s:%(message)s')
try:
import curses
color = False
curses.setupterm()
if curses.tigetnum("colors") > 0:
color = True
formatter = TornadoLogFormatter(color=color)
except:
import traceback
traceback.print_exc()
finally:
h.setLevel(level)
h.setFormatter(formatter)
logger.setLevel(level)
logger.addHandler(h)

View file

@ -19,7 +19,7 @@ Event = pyinotify.Event
from tornado.ioloop import IOLoop
import tornado.process
import archpkg
from .lib import archpkg
from . import pkgreader
from . import dbutil

View file

@ -7,7 +7,7 @@ import configparser
import pickle
import logging
from myutils import enable_pretty_logging
from archrepo2.lib.nicelogger import enable_pretty_logging
enable_pretty_logging(logging.DEBUG)
import archrepo2.pkgreader

View file

@ -6,7 +6,7 @@ import sqlite3
import pickle
import logging
from myutils import enable_pretty_logging
from archrepo2.lib.nicelogger import enable_pretty_logging
enable_pretty_logging(logging.DEBUG)
from archrepo2.dbutil import *

View file

@ -7,7 +7,7 @@ setup(
name = 'archrepo2',
version = archrepo2.__version__,
packages = find_packages(),
install_requires = ['tornado>2.4.1', 'pyinotify'],
install_requires = ['tornado>2.4.1', 'pyinotify', 'distribute'],
entry_points = {
'console_scripts': [
'archreposrv = archrepo2.archreposrv:main',