Source code for epubcheck.checker
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
import json
import subprocess
from epubcheck import const as c
from epubcheck.models import Message, Checker, Meta
[docs]class EpubCheck:
"""Wraps an epubcheck task and provides results as native python objects.
:param str infile: path to epubfile to be checked
:param str lang: set language for generated messages
:param str profile: name of epubcheck profule to use
:param bool autorun: wether to run the checking process on instantiation.
"""
DEFAULT = 'default'
DICT = 'dict'
EDUPUB = 'edupub'
IDX = 'idx'
PREVIEW = 'preview'
def __init__(self, infile, lang='en', profile=DEFAULT, autorun=True):
self.infile = infile
self.lang = lang
self.profile = profile
self.autorun = autorun
self._stdout = None
self._stderr = None
self._returncode = None
self._messages = None
self.result_data = None
self.valid = None
self.checker = None
self.meta = None
self.messages = None
if autorun:
self.run()
def run(self):
lopt = '-Duser.language={}'.format(self.lang)
cmd = [
c.JAVA, lopt, '-jar', c.EPUBCHECK, self.infile,
'-q', '--profile', self.profile, '--json', '-',
]
with open(os.devnull, "w") as devnull:
process = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=devnull,
)
self._stdout, self._stderr = process.communicate()
self._returncode = process.returncode
self.valid = True if self._returncode == 0 else False
self.result_data = json.loads(self._stdout.decode())
self.checker = Checker.from_data(self.result_data)
self.meta = Meta.from_data(self.result_data)
self.messages = Message.from_data(self.result_data)