GithubHelp home page GithubHelp logo

jwilk / didjvu Goto Github PK

View Code? Open in Web Editor NEW
8.0 5.0 8.0 1.5 MB

DjVu encoder with foreground/background separation

Home Page: https://jwilk.net/software/didjvu

License: GNU General Public License v2.0

Python 97.48% Shell 1.36% Makefile 1.16%
djvu

didjvu's People

Contributors

jwilk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

didjvu's Issues

Issue on lower edge of page: The foreground mask does miss the lower edge

When I encode the included Scantailored image with content on the lower edge with this statement in the standard didjvu (master from jwilk) with Python2.7 and
http://nl.archive.ubuntu.com/ubuntu/pool/universe/g/gamera/python-gamera_3.4.2+git20160808.1725654-2_amd64.deb in Mint 20.2 I get a foreground mask that doesn't contain the lower half on the lower edge of the picture.

./didjvu encode ~/scantailorin/out/outputbase2-000-raar-effect-onderste-regel-didjvu\ zonder\ tekst.tif -o jaarverslagraar.djvu
outputbase2-000-raar-effect-onderste-regel-didjvu zonder tekst.zip

Result
jaarverslagraar.zip
(Watch with djview the lower edge and select foreground to see half of the mask is missing)

This is how the mask looks:
image

I can see no visual reason in the original image to cause this.

I'm not able to find the right distribution and packages that will make all xmp-tests run Ok on Python2.7

During the migration to Python3.10 I have no clue what those XMP-functionalities do. I saw Jakub to recently fix some tests for one of the XMP-possibilities, but my install just complains about some modules not installed.

What XMP-possibilities should be availabe in a new Python3.10 version, and with what Linux distribution and installing what packages/steps can I see the original tests complete with Python2.7?

Background picture contains a lot of fuzz behind foreground mask

One of the tricks used in the commercial DjVu to keep it small is to involve the foreground mask to code invisible parts in the background picture behind the foreground mask with the least memory hogging filler.

However when I encode a text and a logo that mostly end up in the foreground mask I see a lot of fuzz in the background picture behind or around the text that won't be missing at all, but take more space than needed. I can leave out the background by selecting foreground in Djview4 and don't miss any relevant details.

Reproduction steps just the same as in #16: (ignore the issue in the bottom line of the picture):

When I encode the included Scantailored image with this statement in the standard didjvu (master from jwilk) with Python2.7 and
http://nl.archive.ubuntu.com/ubuntu/pool/universe/g/gamera/python-gamera_3.4.2+git20160808.1725654-2_amd64.deb in Mint 20.2

./didjvu encode ~/scantailorin/out/outputbase2-000-raar-effect-onderste-regel-didjvu\ zonder\ tekst.tif -o jaarverslagraar.djvu
outputbase2-000-raar-effect-onderste-regel-didjvu zonder tekst.zip

Result
jaarverslagraar.zip

The shared shape dictionary functions inadequately

Issue reported by sumacs at Bitbucket:

Hi.
When I create a djvu file with a shared shape dictionary, the resulting dictionary files are all 21 bytes in size. The chosen number of pages per dictionary is correct. According to notifications, all dependencies are satisfied for didjvu and for the program minidjvu. I am using the Linux distro Lubuntu with version 0.2.7 of didjvu and version 0.8 of minidjvu. The Gamera version is 3.3.3. Lubuntu uses the Ubuntu repositories. I tried using the 0.6 version of didjvu and got the same result. All python-related programs and dependencies look to be all right.
The minidjvu program on its own does create a dictionary that works correctly. Perhaps the two programs are not connected properly to each other, but the sudo apt-get program was used to install both successfully.
For me this challenge is major because I would like to create the best djvu files possible in terms of making full use of the compressions available.. Your program is the only one I have seen that includes not only the dictionary, but also the ability to subsample the fg and the bg. The server any2djvu offers the first option only, and the special program djvudigital (gsdjvu) allows fg and bg adjustments, but no dictionary.

Any suggestions regarding this issue are appreciated.

Thanks for creating this useful program.

Stephen Jones
Toronto

can't specify method

Issue reported by t.g.enderle at Google Code:

when calling

$ didjvu encode -o foo.djvu -v -m "abutaleb"  bar.pnm

i got the following error:

/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py:309: RuntimeWarning: Working around memory leak in the Gamera library
  gamera.init()
out1.pnm:
- reading image
Traceback (most recent call last):
  File "/usr/local/bin/didjvu", line 25, in <module>
    didjvu.main()
  File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 300, in __init__
    parser.parse_args(actions=self)
  File "/usr/local/lib/python2.6/dist-packages/didjvu/cli.py", line 147, in parse_args
    return action(o)
  File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 344, in encode
    self.encode_one(o, input, mask, output)
  File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 364, in encode_one
    mask = generate_mask(mask_filename, image, o.method)
  File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 212, in generate_mask
    return method(image)
TypeError: 'str' object is not callable

a quick fix is attached


Attachment: fix_convert_method_from_string.diff

lossless bundle --pages-per-dict 2 of twice the same picture doesn't make a meaningful shared dictionary without --lossy option

./didjvu bundle test.tif test.tif -o jaarverslagraar10k.djvu --fg-slices 100 -d 600 --bg-slices 0 --pages-per-dict 2

with test.tif the same picture of my previous issues renamed:

djvudump jaarverslagraar10k.djvu
  FORM:DJVM [61329] 
    DIRM [52]         Document directory (bundled, 3 files 2 pages)
    FORM:DJVI [13] {test.iff} [I]
      Djbz [1]          JB2 shared dictionary
    FORM:DJVU [30613] {test.djvu} [P1]
      INFO [10]         DjVu 4364x6896, v24, 600 dpi, gamma=2.2
      INCL [8]          Indirection chunk --> {test.iff}
      Sjbz [18099]      JB2 bilevel data
      FG44 [12199]      IW4 data #1, 100 slices, v1.2 (color), 728x1150
      BG44 [251]        IW4 data #1, 97 slices, v1.2 (b&w), 364x575
    FORM:DJVU [30613] {test.1.djvu} [P2]
      INFO [10]         DjVu 4364x6896, v24, 600 dpi, gamma=2.2
      INCL [8]          Indirection chunk --> {test.iff}
      Sjbz [18099]      JB2 bilevel data
      FG44 [12199]      IW4 data #1, 100 slices, v1.2 (color), 728x1150
      BG44 [251]        IW4 data #1, 97 slices, v1.2 (b&w), 364x575

while using --lossy in the same statement
./didjvu bundle test.tif test.tif -o jaarverslagraar10j.djvu --fg-slices 100 -d 600 --bg-slices 0 --lossy --pages-per-dict 2

Does create a relevant djbz, but the pages have different remaining JB2 bilevel data, so there must be something wrong:

djvudump jaarverslagraar10j.djvu
  FORM:DJVM [38327] 
    DIRM [54]         Document directory (bundled, 3 files 2 pages)
    FORM:DJVI [8209] {test.iff} [I]
      Djbz [8197]       JB2 shared dictionary
    FORM:DJVU [14995] {test.djvu} [P1]
      INFO [10]         DjVu 4364x6896, v24, 600 dpi, gamma=2.2
      INCL [8]          Indirection chunk --> {test.iff}
      Sjbz [2482]       JB2 bilevel data
      FG44 [12199]      IW4 data #1, 100 slices, v1.2 (color), 728x1150
      BG44 [251]        IW4 data #1, 97 slices, v1.2 (b&w), 364x575
    FORM:DJVU [15031] {test.1.djvu} [P2]
      INFO [10]         DjVu 4364x6896, v24, 600 dpi, gamma=2.2
      INCL [8]          Indirection chunk --> {test.iff}
      Sjbz [2517]       JB2 bilevel data
      FG44 [12199]      IW4 data #1, 100 slices, v1.2 (color), 728x1150
      BG44 [251]        IW4 data #1, 97 slices, v1.2 (b&w), 364x575

'dict' object has no attribute 'iteritems'

Issue reported by mchls5714 at Google Code:

What steps will reproduce the problem?

  1. didjvu encode -o test.djvu pict.jpg

(same problem with tif instead of jpg)

What is the expected output? What do you see instead?

didjvu encode -o test.djvu pict.jpg

Traceback (most recent call last):
  File "/usr/local/bin/didjvu", line 7, in <module>
    from didjvu import didjvu
  File "/usr/local/lib/python3.2/dist-packages/didjvu/didjvu.py", line 23, in <module>
    from . import cli
  File "/usr/local/lib/python3.2/dist-packages/didjvu/cli.py", line 23, in <module>
    from . import djvu_extra as djvu
  File "/usr/local/lib/python3.2/dist-packages/didjvu/djvu_extra.py", line 22, in <module>
    from . import ipc
  File "/usr/local/lib/python3.2/dist-packages/didjvu/ipc.py", line 50, in <module>
    class CalledProcessInterrupted(CalledProcessError):
  File "/usr/local/lib/python3.2/dist-packages/didjvu/ipc.py", line 52, in CalledProcessInterrupted
    _signal_names = get_signal_names()
  File "/usr/local/lib/python3.2/dist-packages/didjvu/ipc.py", line 46, in get_signal_names
    return dict((no, name) for name, no in data.iteritems())
AttributeError: 'dict' object has no attribute 'iteritems'

What version of the product are you using? On what operating system?

Latest version: e6e28e1

Ubuntu 11.04

--bg-subsample 12 blows up previously invisible spots to become annoying.

When I try to lower the footprint of the irrelevant background picture with --bg-subsample 12 the previously invisible spots are blown up in a way they become annoying.

Reproduction steps just the same as in #16, except for the --bg-subsample 12 option:

When I encode the included Scantailored image with this statement in the standard didjvu (master from jwilk) with Python2.7 and
http://nl.archive.ubuntu.com/ubuntu/pool/universe/g/gamera/python-gamera_3.4.2+git20160808.1725654-2_amd64.deb in Mint 20.2

./didjvu encode ~/scantailorin/out/outputbase2-000-raar-effect-onderste-regel-didjvu\ zonder\ tekst.tif -o jaarverslagraar.djvu --bg-subsample 12
outputbase2-000-raar-effect-onderste-regel-didjvu zonder tekst.zip

Result

jaarverslagvlekken.zip
image

Log level NOSY in lib.didjvu

When skimming through the code of lib.didjvu, we define a custom log level NOSY inside setup_logging. Given the name, this might make sense, but NOISY seems quite more common and might easily be a typo.

Is the NOSY log level name intended or does this actually have a typo?

gamera_support.load_image(): unclosed file

When doing some tests refactoring on my Python 3 fork of this project, I stumbled upon some Python warning regarding unclosed files which appeared to not be referenced any more:

/home/me/github/jwilk/didjvu/tests/test_gamera.py:60: ResourceWarning: unclosed file <_io.BufferedReader name='/home/me/github/jwilk/didjvu/tests/data/greyscale-packbits.tiff'>
  in_image = gamera_support.load_image(path)
Object allocated at (most recent call last):
  File /home/me/github/jwilk/didjvu/tests/test_gamera.py", lineno 79
    self._test_methods('greyscale-packbits.tiff')
  File "/home/me/github/jwilk/didjvu/tests/test_gamera.py", lineno 73
    self._test_one_method(filename=filename, method=method, kwargs=kwargs)
  File "/home/me/github/jwilk/didjvu/tests/test_gamera.py", lineno 60
    in_image = gamera_support.load_image(path)
  File "/home/me/github/jwilk/didjvu/lib/gamera_support.py", lineno 65
    pil_image = PILImage.open(filename)
  File "/home/me/github/jwilk/env/lib/python3.8/site-packages/PIL/Image.py", lineno 2968
    fp = builtins.open(filename, "rb")

The issue seems to be that the corresponding method loads the image using PIL at the beginning (pil_image = PIL.open(filename)), but does not seem to be required any more after having passed it into the corresponding Gamera loader methods. Just calling pil_image.close() at the end of the moment seems to fix this - at least all existing tests still pass.

Please note that while this appeared in the Python 3 version only and I am not able to tell you which configuration change suddenly brought this warning up, I had a look at the offending code as well and assume that correctly closing the file there should make sense for the Python 2 case as well.

Files with same filename and different location are confused

Issue reported by t.g.enderle at Google Code:

What steps will reproduce the problem?

didjvu bundle -d 600 -o foo.djvu out14.pnm ../new3/out14.pnm out15.pnm

What is the expected output? What do you see instead?

out14.pnm and ../new3/out14.pnm are different. However, in the resulting djvu, the second (in new3) is included twice, the first not at all. Probably this is a problem with temporary file naming.

What version of the product are you using? On what operating system?

2.8

Please provide any additional information below.

The following is the output, which looks ok.

ImportError: numpy.core.multiarray failed to import
out14.pnm:
- reading image
- converting to DjVu
- 0.020 bits/pixel; 49.009:1, 97.96% saved, 4348129 bytes in, 88721 bytes out
../new3/out14.pnm:
- reading image
- converting to DjVu
- 0.027 bits/pixel; 37.403:1, 97.33% saved, 4348129 bytes in, 116251 bytes out
out15.pnm:
- reading image
- converting to DjVu
- 0.007 bits/pixel; 150.950:1, 99.34% saved, 4348129 bytes in, 28805 bytes out
bundling

Size method?

❓ Maybe add size method?

Is <- thumbnail(I, WxH -> RxR) //small image
Ib <- bicubic(Is, RxR -> WxH) //upscale small image
Ith <- (sign(I - Ib + delta) < 0) ? 0 : 255 //threshold
  • I
    I
  • Ib (8x8)
    Ib
  • Ith
    Ith

🔗 See also hsnr-gamera/gamera-3#27

insecure use of /tmp when executing c44

To create an IW44 layer, didjvu:

  • creates a unique temporary file directly in /tmp (or in $TMPDIR)
  • passes name of this file to c44(1) as the output file name

Unfortunately, c44 deletes the output file, and then creates a new one under the same name (without O_EXCL). This opens a race window, during which malicious local user could create their own file under this name.

This bug was fixed in didjvu 0.4 (changeset f569445).

DjVu-binarization does not invert parts of the page that have white text on a colored background

If you print and scan this document:
https://www.kvk.nl/download/Formulier-14-wijziging-ondernemings-en-vestigingsgegevens_tcm109-365607.pdf
the resulting DJBZ of didjvu with its default djvu-binarizer contains inverted tiles of text, while DjVuSolo3.1 inverts those, to only maintain the smaller elements within a big surface and use the background color for the colored frame.

I already read a probably expired patent mentioning this, so this should be getting attention. didjvu uses Gamera (include/plugins/threshold.hpp) djvu_threshold for this binarization, so this issue should probably be propagated to gamera.

didjvu bundle --pages-per-dict=N: OSError: [Errno 24] Too many open files

Apparently the --pages-per-dict option causes file descriptor leak:

$ didjvu bundle --pages-per-dict=10 *.tiff -o tmp.djvu

0255.tiff:
- reading image
- converting to DjVu
Traceback (most recent call last):
  File "/home/jwilk/.local/bin/didjvu", line 25, in <module>
    didjvu.main()
  File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 203, in __init__
    parser.parse_args(actions=self)
  File "/home/jwilk/.local/share/didjvu/lib/cli.py", line 348, in parse_args
    return action(o)
  File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 355, in bundle
    self.bundle_complex(o)
  File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 438, in bundle_complex
    itertools.repeat(pixels)
  File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 68, in parallel_for
    f(o, *args)
  File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 410, in _bundle_complex_page
    page.djvu = image_to_djvu(width, height, image, mask, options=o)
  File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 161, in image_to_djvu
    sjbz = djvu.bitonal_to_djvu(gamera.to_pil_1bpp(mask), loss_level=loss_level)
  File "/home/jwilk/.local/share/didjvu/lib/djvu_support.py", line 81, in bitonal_to_djvu
    return utils.Proxy(djvu_file, ipc.Subprocess(args).wait, [pbm_file])
  File "/home/jwilk/.local/share/didjvu/lib/ipc.py", line 107, in __init__
    subprocess.Popen.__init__(self, *args, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 928, in _execute_child
    errpipe_read, errpipe_write = self.pipe_cloexec()
  File "/usr/lib/python2.7/subprocess.py", line 865, in pipe_cloexec
    r, w = os.pipe()
OSError: [Errno 24] Too many open files: 'cjb2'

Logo text not sharp

I recently had a look at the cloud-engine behind avepdf.com for MRC-compressing the text on a logo.

Loïc, one of the main programmers, liked to improve the logo to reach the quality DjVuSolo 3.1 reaches.

I see this logo is also an issue with didjvu.
Source:
210913 nog 2-000na.zip
Result
logotext-not-sharp.zip

The blue letters post should also be in the foreground-mask to get it sharp.

./didjvu encode ~/Afbeeldingen/scantailorin/210913\ nog\ 2-000na.tif -o logotext-not-sharp.djvu

./tools/manpage-fixup: Permission denied

Issue reported by cyberdoud at Google Code:

On MacOSX Lion, using sudo pip to install didjvu raises a permission error.

The pip.log file contains:

Downloading from URL http://pypi.python.org/packages/source/d/didjvu/didjvu-0$
  Running setup.py egg_info for package didjvu

    running egg_info
    creating pip-egg-info/didjvu.egg-info
    writing pip-egg-info/didjvu.egg-info/PKG-INFO
    writing top-level names to pip-egg-info/didjvu.egg-info/top_level.txt
    writing dependency_links to pip-egg-info/didjvu.egg-info/dependency_links.t$
    writing manifest file 'pip-egg-info/didjvu.egg-info/SOURCES.txt'
    warning: manifest_maker: standard file '-c' not found


    reading manifest file 'pip-egg-info/didjvu.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    writing manifest file 'pip-egg-info/didjvu.egg-info/SOURCES.txt'
Installing collected packages: didjvu

  Running setup.py install for didjvu

    Running command /usr/bin/python -c "import setuptools;__file__='/Users/bert$
    running install
    running build
    running install
    running build
    running build_doc
    ./tools/manpage-fixup doc/didjvu.1

    unable to execute ./tools/manpage-fixup: Permission denied

    error: command './tools/manpage-fixup' failed with exit status 1
    Complete output from command /usr/bin/python -c "import setuptools;__file__$

    running install

running build

running build_doc

./tools/manpage-fixup doc/didjvu.1

unable to execute ./tools/manpage-fixup: Permission denied

unable to execute ./tools/manpage-fixup: Permission denied

error: command './tools/manpage-fixup' failed with exit status 1

----------------------------------------

Command /usr/bin/python -c "import setuptools;__file__='/Users/*****/bu$

Exception information:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py"$
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/commands/instal$
    requirement_set.install(install_options, global_options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 1$
    requirement.install(install_options, global_options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 5$
    cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", l$
    cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", l$
    % (command_desc, proc.returncode, cwd))
InstallationError: Command /usr/bin/python -c "import setuptools;__file__='/Use$

parallel mode

I had this patch that adds -j/--jobs lying around:

diff --git a/lib/cli.py b/lib/cli.py
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -61,6 +61,17 @@
     def __call__(self):
         return self.x
 
+def get_cpu_count():
+    try:
+        import multiprocessing
+        return multiprocessing.cpu_count()
+    except (ImportError, NotImplementedError):
+        pass
+    try:
+        return os.sysconf('SC_NPROCESSORS_ONLN')
+    except (ValueError, OSError, AttributeError):
+        return 1
+
 class ArgumentParser(argparse.ArgumentParser):
 
     def __init__(self, methods, default_method):
@@ -98,6 +109,7 @@
             if p is p_bundle:
                 p.add_argument('-p', '--pages-per-dict', type=int, metavar='N', help='how many pages to compress in one pass')
             p.add_argument('-m', '--method', choices=methods, default=default_method, help='binarization method')
+            p.add_argument('-j', '--jobs', dest='n_jobs', metavar='N', nargs='?', type=int, default=1, help='number of jobs to run simultaneously')
             p.add_argument('-v', '--verbose', dest='verbosity', action='append_const', const=None, help='more informational messages')
             p.add_argument('-q', '--quiet', dest='verbosity', action='store_const', const=[], help='no informational messages')
             p.add_argument('input', metavar='<input-image>', nargs='+')
@@ -146,6 +158,8 @@
             o.pages_per_dict = 1
         action = getattr(actions, vars(o).pop('_action_'))
         o.method = self.__methods[o.method]
+        if o.n_jobs is None:
+            o.n_jobs = get_cpu_count()
         return action(o)
 
 __all__ = ['ArgumentParser']
diff --git a/lib/didjvu.py b/lib/didjvu.py
--- a/lib/didjvu.py
+++ b/lib/didjvu.py
@@ -14,12 +14,18 @@
 
 from __future__ import with_statement
 
+import functools
 import itertools
 import os
 import re
 import logging
 import sys
 
+try:
+    import multiprocessing.dummy as multiprocessing
+except ImportError:
+    multiprocessing = None
+
 from . import cli
 from . import djvu_extra as djvu
 from . import filetype
@@ -49,9 +55,18 @@
     handler.setFormatter(formatter)
     ipc_logger.addHandler(handler)
 
+def _explode(f, a, b):
+    return f(a, *b)
+
 def parallel_for(o, f, *iterables):
-    for args in zip(*iterables):
-        f(o, *args)
+    iterables = map(list, iterables)
+    assert max(map(len, iterables)) == min(map(len, iterables))
+    if o.n_jobs <= 1 or multiprocessing is None:
+        for args in zip(*iterables):
+            f(o, *args)
+    else:
+        pool = multiprocessing.Pool(o.n_jobs)
+        pool.map(functools.partial(_explode, f, o), zip(*iterables))
 
 def check_tty():
     if sys.stdout.isatty():

It no longer applies cleanly and IIRC it didn't work correctly.

testsuite break with python-libxmp 2.0.1

Issue reported by @danstender:

Running the tests of 4.0 when python-libxmp 2.0.1 is available there are some assertion errors,:

tests.test_xmp.test_metadata.test_empty(libxmp_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_empty(libxmp_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_empty(pyexiv2_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_empty(pyexiv2_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_new(libxmp_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_new(libxmp_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_new(pyexiv2_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_new(pyexiv2_backend, libxmp_checker) ... FAIL
tests.test_xmp.test_metadata.test_updated(libxmp_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_updated(libxmp_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_updated(pyexiv2_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_updated(pyexiv2_backend, libxmp_checker) ... FAIL
tests.test_xmp.test_uuid ... ok
tests.test_xmp.test_namespaces ... ok

======================================================================
FAIL: tests.test_xmp.test_metadata.test_new(pyexiv2_backend, libxmp_checker)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/«PKGBUILDDIR»/tests/test_xmp.py", line 270, in test
    assert_equal(get(ns.xmpmm, 'History[1]/stEvt:when'), str(mod_date))
AssertionError: u'2015-05-12T10:26:01-00:00' != '2015-05-12T10:26:01Z'

======================================================================
FAIL: tests.test_xmp.test_metadata.test_updated(pyexiv2_backend, libxmp_checker)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/«PKGBUILDDIR»/tests/test_xmp.py", line 402, in test
    assert_equal(get(ns.xmpmm, 'History[2]/stEvt:when'), mod_date)
AssertionError: u'2015-05-12T10:26:01-00:00' != u'2015-05-12T10:26:01Z'
- 2015-05-12T10:26:01-00:00
?                    ^^^^^^
+ 2015-05-12T10:26:01Z
?                    ^

Best,
DS

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.