[Python-modules-commits] [bibtexparser] 02/05: Imported Upstream version 0.6.2

Alex Mestiashvili malex-guest at moszumanska.debian.org
Wed Jan 20 10:00:37 UTC 2016


This is an automated email from the git hooks/post-receive script.

malex-guest pushed a commit to branch master
in repository bibtexparser.

commit e8ec37782adcfe42ec416c0c209f87a6be49516b
Author: Alexandre Mestiashvili <alex at biotec.tu-dresden.de>
Date:   Wed Jan 20 10:50:18 2016 +0100

    Imported Upstream version 0.6.2
---
 .travis.yml                                        |  8 +-
 CHANGELOG                                          | 17 +++-
 CONTRIBUTORS.txt                                   |  3 +
 README.md                                          |  3 +-
 README.rst                                         |  2 +-
 bibtexparser/__init__.py                           |  2 +-
 bibtexparser/bparser.py                            |  2 +-
 bibtexparser/bwriter.py                            | 32 ++++++--
 bibtexparser/customization.py                      |  9 ++-
 bibtexparser/tests/data/article_comma_first.bib    | 14 ++--
 bibtexparser/tests/data/book_comma_first.bib       | 12 +--
 bibtexparser/tests/data/comments_percentage.bib    | 19 +++++
 .../tests/data/comments_percentage_nolastcoma.bib  | 19 +++++
 bibtexparser/tests/data/string.bib                 |  8 ++
 bibtexparser/tests/test_bibtex_strings.py          | 19 ++++-
 bibtexparser/tests/test_bibtexwriter.py            | 91 +++++++++++++++++++++-
 bibtexparser/tests/test_comments.py                | 54 +++++++++++++
 docs/source/index.rst                              |  1 +
 docs/source/install.rst                            |  4 +-
 docs/source/test.rst                               | 40 ++++++++++
 docs/source/who.rst                                |  2 +
 setup.py                                           |  2 +-
 22 files changed, 326 insertions(+), 37 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index b026bd5..723e7c5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,23 +3,23 @@ matrix:
   include:
     - python: "2.7"
       env: TEST_SUITE=suite_2_7
-    - python: "3.2"
-      env: TEST_SUITE=suite_3_2
     - python: "3.3"
       env: TEST_SUITE=suite_3_3
     - python: "3.4"
       env: TEST_SUITE=suite_3_4
+    - python: "3.5"
+      env: TEST_SUITE=suite_3_5
     - python: "pypy"
       env: TEST_SUITE=suite_pypy
 install:
-  - if [[ $TEST_SUITE == suite_3_4 ]]; then
+  - if [[ $TEST_SUITE == suite_3_5 ]]; then
         pip install sphinx;
     fi;
   - pip install coverage
   - python setup.py install
 script:
   - nosetests --with-coverage  --cover-erase --cover-package=bibtexparser
-  - if [[ $TEST_SUITE == suite_3_4 ]]; then
+  - if [[ $TEST_SUITE == suite_3_5 ]]; then
         cd docs;
         make html;
     fi;
diff --git a/CHANGELOG b/CHANGELOG
index c5689bc..080493d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,18 @@
-vXXXX
-=====
+v0.XXX
+======
+
+
+v0.6.2
+======
+
+* ENH: customization: handle various hyphens (#76).
+* ENH: writer: all values according to this maximal key width (#83).
+* END: writer: display_order allows to have custom ordering of the fields of
+each entry instead of just alphabetical (#83) by cschaffner.
+* FIX: bad support of braces in string (#90) by sangkilc.
+
+v0.6.1
+======
 
 * API: Previous type and id keywords which are automatically added to
 the dictionnary are now ENTRYTYPE and ID, respectively (#42).
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index 0b3bcf3..2bd0c0f 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -27,3 +27,6 @@
 
 - Michal Grochmal
   Comma first syntax support
+
+- Cschaffner
+  New features in bwriter
diff --git a/README.md b/README.md
index f00e171..b1a218d 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,10 @@
-[![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=fboulogne&url=https://github.com/sciunto/python-bibtexparser&title=python-bibtexparser&language=&tags=github&category=software)
 [![Build Status](https://secure.travis-ci.org/sciunto-org/python-bibtexparser.png)](http://travis-ci.org/sciunto-org/python-bibtexparser)
 [![Coverage Status](https://coveralls.io/repos/sciunto-org/python-bibtexparser/badge.png)](https://coveralls.io/r/sciunto-org/python-bibtexparser)
 
 python-bibtexparser
 ===================
 
-Bibtex parser in Python 2.7 and 3.
+Bibtex parser in Python 2.7 and 3.3 or newer
 
 The original source code was part of bibserver from okfn
 http://github.com/okfn/bibserver
diff --git a/README.rst b/README.rst
index 41802d5..bc9acd6 100644
--- a/README.rst
+++ b/README.rst
@@ -9,7 +9,7 @@
 python-bibtexparser
 ===================
 
-Bibtex parser in Python 2.7 and 3.
+Bibtex parser in Python 2.7 and 3.3 or newer
 
 The original source code was part of bibserver from okfn
 http://github.com/okfn/bibserver
diff --git a/bibtexparser/__init__.py b/bibtexparser/__init__.py
index 69fdf4d..e36a239 100644
--- a/bibtexparser/__init__.py
+++ b/bibtexparser/__init__.py
@@ -22,7 +22,7 @@ __all__ = [
     'loads', 'load', 'dumps', 'dump', 'bibdatabase',
     'bparser', 'bwriter', 'latexenc', 'customization',
 ]
-__version__ = '0.6.1'
+__version__ = '0.6.2'
 
 from . import bibdatabase, bparser, bwriter, latexenc, customization
 
diff --git a/bibtexparser/bparser.py b/bibtexparser/bparser.py
index bd622a9..7cdcf9e 100644
--- a/bibtexparser/bparser.py
+++ b/bibtexparser/bparser.py
@@ -224,7 +224,7 @@ class BibTexParser(object):
         # if a string record, put it in the replace_dict
         if record.lower().startswith('@string'):
             logger.debug('The record startswith @string')
-            key, val = [i.strip().strip('{').strip('}').replace('\n', ' ') for i in record.split('{', 1)[1].strip('\n').strip(',').strip('}').split('=')]
+            key, val = [i.strip().strip('{').strip('}').replace('\n', ' ') for i in record.split('{', 1)[1].strip('}').strip('\n').strip(',').split('=')]
             key = key.lower()  # key is case insensitive
             val = self._string_subst_partial(val)
             if val.startswith('"') or val.lower() not in self.bib_database.strings:
diff --git a/bibtexparser/bwriter.py b/bibtexparser/bwriter.py
index a183e39..65472a4 100644
--- a/bibtexparser/bwriter.py
+++ b/bibtexparser/bwriter.py
@@ -43,15 +43,25 @@ class BibTexWriter(object):
         self.contents = ['comments', 'preambles', 'strings', 'entries']
         #: Character(s) for indenting BibTeX field-value pairs. Default: single space.
         self.indent = ' '
+        #: Align values. Determines the maximal number of characters used in any fieldname and aligns all values
+        #    according to that by filling up with single spaces. Default: False
+        self.align_values = False
         #: Characters(s) for separating BibTeX entries. Default: new line.
         self.entry_separator = '\n'
-        #: Tuple of fields for ordering entries. Set to `None` to disable sorting. Default: BibTeX key `('ID', )`.
+        #: Tuple of fields for ordering BibTeX entries. Set to `None` to disable sorting. Default: BibTeX key `('ID', )`.
         self.order_entries_by = ('ID', )
+        #: Tuple of fields for display order in a single BibTeX entry. Fields not listed here will be displayed
+        #: alphabetically at the end. Set to '[]' for alphabetical order. Default: '[]'
+        self.display_order = []
         #: BibTeX syntax allows comma first syntax
         #: (common in functional languages), use this to enable
         #: comma first syntax as the bwritter output
         self.comma_first = False
 
+        #: internal variable used if self.align_values = True
+        self._max_field_width = 0
+
+
     def write(self, bib_database):
         """
         Converts a bibliographic database to a BibTeX-formatted string.
@@ -79,6 +89,11 @@ class BibTexWriter(object):
         else:
             entries = bib_database.entries
 
+        if self.align_values:
+            # determine maximum field width to be used
+            widths = [max(map(len, entry.keys())) for entry in entries]
+            self._max_field_width = max(widths)
+
         for entry in entries:
             bibtex += self._entry_to_bibtex(entry)
         return bibtex
@@ -88,15 +103,22 @@ class BibTexWriter(object):
         # Write BibTeX key
         bibtex += '@' + entry['ENTRYTYPE'] + '{' + entry['ID']
 
+        # create display_order of fields for this entry
+        # first those keys which are both in self.display_order and in entry.keys
+        display_order = [i for i in self.display_order if i in entry]
+        # then all the other fields sorted alphabetically
+        more_fields = [i for i in sorted(entry) if i not in self.display_order]
+        display_order += [i for i in sorted(entry) if i not in self.display_order]
+
         # Write field = value lines
-        for field in [i for i in sorted(entry) if i not in ['ENTRYTYPE', 'ID']]:
+        for field in [i for i in display_order if i not in ['ENTRYTYPE', 'ID']]:
             try:
                 if self.comma_first:
-                    bibtex += "\n," + self.indent + field + " = {" + entry[field] + "}"
+                    bibtex += "\n" + self.indent + ", " + "{0:<{1}}".format(field, self._max_field_width) + " = {" + entry[field] + "}"
                 else:
-                    bibtex += ",\n" + self.indent + field + " = {" + entry[field] + "}"
+                    bibtex += ",\n" + self.indent + "{0:<{1}}".format(field, self._max_field_width) + " = {" + entry[field] + "}"
             except TypeError:
-                raise TypeError("The field %s in entry %s must be a string"
+                raise TypeError(u"The field %s in entry %s must be a string"
                                 % (field, entry['ID']))
         bibtex += "\n}\n" + self.entry_separator
         return bibtex
diff --git a/bibtexparser/customization.py b/bibtexparser/customization.py
index f2afafd..9b46025 100644
--- a/bibtexparser/customization.py
+++ b/bibtexparser/customization.py
@@ -97,9 +97,12 @@ def page_double_hyphen(record):
 
     """
     if "pages" in record:
-        if "-" in record["pages"]:
-            p = [i.strip().strip('-') for i in record["pages"].split("-")]
-            record["pages"] = p[0] + '--' + p[-1]
+        # hyphen, non-breaking hyphen, en dash, em dash, hyphen-minus, minus sign
+        separators = [u'‐', u'‑', u'–', u'—', u'-', u'−']
+        for separator in separators:
+            if separator in record["pages"]:
+                p = [i.strip().strip(separator) for i in record["pages"].split(separator)]
+                record["pages"] = p[0] + '--' + p[-1]
     return record
 
 
diff --git a/bibtexparser/tests/data/article_comma_first.bib b/bibtexparser/tests/data/article_comma_first.bib
index 0be3e73..83882f4 100644
--- a/bibtexparser/tests/data/article_comma_first.bib
+++ b/bibtexparser/tests/data/article_comma_first.bib
@@ -1,11 +1,11 @@
 @ARTICLE{Cesar2013
-, author = {Jean Cesar}
-, title = {An amazing title}
-, year = {2013}
-, volume = {12}
-, journal = {Nice Journal}
-, comments = {A comment}
-, keyword = {keyword1, keyword2}
+ , author = {Jean Cesar}
+ , title = {An amazing title}
+ , year = {2013}
+ , volume = {12}
+ , journal = {Nice Journal}
+ , comments = {A comment}
+ , keyword = {keyword1, keyword2}
 }
 
 @ARTICLE{ Baltazar2013
diff --git a/bibtexparser/tests/data/book_comma_first.bib b/bibtexparser/tests/data/book_comma_first.bib
index f2ab70e..5691da9 100644
--- a/bibtexparser/tests/data/book_comma_first.bib
+++ b/bibtexparser/tests/data/book_comma_first.bib
@@ -1,9 +1,9 @@
 @book{Bird1987
-,   author = {Bird, R.B. and Armstrong, R.C. and Hassager, O.}
-,   edition = {2}
-,   publisher = {Wiley Edition}
-,   title = {Dynamics of Polymeric Liquid}
-,   volume = {1}
-,   year = {1987}
+   , author = {Bird, R.B. and Armstrong, R.C. and Hassager, O.}
+   , edition = {2}
+   , publisher = {Wiley Edition}
+   , title = {Dynamics of Polymeric Liquid}
+   , volume = {1}
+   , year = {1987}
 }
 
diff --git a/bibtexparser/tests/data/comments_percentage.bib b/bibtexparser/tests/data/comments_percentage.bib
new file mode 100644
index 0000000..15ffce1
--- /dev/null
+++ b/bibtexparser/tests/data/comments_percentage.bib
@@ -0,0 +1,19 @@
+ at ARTICLE{Cesar2013,
+  author = {Jean Cesar},
+  title = {An amazing title},
+  year = {2013},
+  volume = {12},
+  journal = {Nice Journal},
+  comments = {A comment},
+  keyword = {keyword1, keyword2},
+}
+% comment.
+ at ARTICLE{Baltazar2013,
+  author = {Jean Baltazar},
+  title = {An amazing title},
+  year = {2013},
+  volume = {12},
+  journal = {Nice Journal},
+  comments = {A comment},
+  keyword = {keyword1, keyword2},
+}
diff --git a/bibtexparser/tests/data/comments_percentage_nolastcoma.bib b/bibtexparser/tests/data/comments_percentage_nolastcoma.bib
new file mode 100644
index 0000000..14813d1
--- /dev/null
+++ b/bibtexparser/tests/data/comments_percentage_nolastcoma.bib
@@ -0,0 +1,19 @@
+ at ARTICLE{Cesar2013,
+  author = {Jean Cesar},
+  title = {An amazing title},
+  year = {2013},
+  volume = {12},
+  journal = {Nice Journal},
+  comments = {A comment},
+  keyword = {keyword1, keyword2}
+}
+% comment.
+ at ARTICLE{Baltazar2013,
+  author = {Jean Baltazar},
+  title = {An amazing title},
+  year = {2013},
+  volume = {12},
+  journal = {Nice Journal},
+  comments = {A comment},
+  keyword = {keyword1, keyword2}
+}
diff --git a/bibtexparser/tests/data/string.bib b/bibtexparser/tests/data/string.bib
new file mode 100644
index 0000000..3244b90
--- /dev/null
+++ b/bibtexparser/tests/data/string.bib
@@ -0,0 +1,8 @@
+ at STRING{oakland = {Proceedings of the {IEEE} Symposium on Security and Privacy}}
+ at INPROCEEDINGS{cha:oakland15,
+    author = {Sang Kil Cha and Maverick Woo and David Brumley},
+    title = {{Program-Adaptive Mutational Fuzzing}},
+    booktitle = oakland,
+    year = {2015},
+    pages = {725--741}
+}
diff --git a/bibtexparser/tests/test_bibtex_strings.py b/bibtexparser/tests/test_bibtex_strings.py
index e079c9d..185358e 100644
--- a/bibtexparser/tests/test_bibtex_strings.py
+++ b/bibtexparser/tests/test_bibtex_strings.py
@@ -1,6 +1,8 @@
 import unittest
+import codecs
 import bibtexparser
 from bibtexparser.bibdatabase import BibDatabase
+from bibtexparser.bparser import BibTexParser
 from collections import OrderedDict
 
 
@@ -29,6 +31,21 @@ class TestStringParse(unittest.TestCase):
         expected['name2'] = 'value2'
         self.assertEqual(bib_database.strings, expected)
 
+    def test_string_braces(self):
+        with codecs.open('bibtexparser/tests/data/string.bib', 'r', 'utf-8') as bibfile:
+            bib = BibTexParser(bibfile.read())
+            res = bib.get_entry_list()
+        expected = [{'author': 'Sang Kil Cha and Maverick Woo and David Brumley',
+		     'ID': 'cha:oakland15',
+		     'year': '2015',
+		     'booktitle': 'Proceedings of the {IEEE} Symposium on Security and Privacy',
+		     'title': 'Program-Adaptive Mutational Fuzzing',
+	             'ENTRYTYPE': 'inproceedings',
+		     'pages': '725--741'
+                     }]
+        self.assertEqual(res, expected)
+
+
 
 class TestStringWrite(unittest.TestCase):
     def test_single_string_write(self):
@@ -44,4 +61,4 @@ class TestStringWrite(unittest.TestCase):
         bib_database.strings['name2'] = 'value2'  # Order is important!
         result = bibtexparser.dumps(bib_database)
         expected = '@string{name1 = "value1"}\n\n at string{name2 = "value2"}\n\n'
-        self.assertEqual(result, expected)
\ No newline at end of file
+        self.assertEqual(result, expected)
diff --git a/bibtexparser/tests/test_bibtexwriter.py b/bibtexparser/tests/test_bibtexwriter.py
index 9cba849..25b1270 100644
--- a/bibtexparser/tests/test_bibtexwriter.py
+++ b/bibtexparser/tests/test_bibtexwriter.py
@@ -70,6 +70,60 @@ class TestBibTexWriter(unittest.TestCase):
 """
         self.assertEqual(result, expected)
 
+    def test_align(self):
+        bib_database = BibDatabase()
+        bib_database.entries = [{'ID': 'abc123',
+                                 'ENTRYTYPE': 'book',
+                                 'author': 'test',
+                                 'thisisaverylongkey': 'longvalue'}]
+        writer = BibTexWriter()
+        writer.align_values = True
+        result = bibtexparser.dumps(bib_database, writer)
+        expected = \
+"""@book{abc123,
+ author             = {test},
+ thisisaverylongkey = {longvalue}
+}
+
+"""
+        self.assertEqual(result, expected)
+
+        with open('bibtexparser/tests/data/multiple_entries_and_comments.bib') as bibtex_file:
+            bib_database = bibtexparser.load(bibtex_file)
+        writer = BibTexWriter()
+        writer.contents = ['entries']
+        writer.align_values = True
+        result = bibtexparser.dumps(bib_database, writer)
+        expected = \
+"""@book{Toto3000,
+ author    = {Toto, A and Titi, B},
+ title     = {A title}
+}
+
+ at article{Wigner1938,
+ author    = {Wigner, E.},
+ doi       = {10.1039/TF9383400029},
+ issn      = {0014-7672},
+ journal   = {Trans. Faraday Soc.},
+ owner     = {fr},
+ pages     = {29--41},
+ publisher = {The Royal Society of Chemistry},
+ title     = {The transition state method},
+ volume    = {34},
+ year      = {1938}
+}
+
+ at book{Yablon2005,
+ author    = {Yablon, A.D.},
+ publisher = {Springer},
+ title     = {Optical fiber fusion slicing},
+ year      = {2005}
+}
+
+"""
+        self.assertEqual(result, expected)
+
+
     def test_entry_separator(self):
         bib_database = BibDatabase()
         bib_database.entries = [{'ID': 'abc123',
@@ -85,6 +139,42 @@ class TestBibTexWriter(unittest.TestCase):
 """
         self.assertEqual(result, expected)
 
+    def test_display_order(self):
+        with open('bibtexparser/tests/data/multiple_entries_and_comments.bib') as bibtex_file:
+            bib_database = bibtexparser.load(bibtex_file)
+        writer = BibTexWriter()
+        writer.contents = ['entries']
+        writer.display_order = ['year', 'publisher', 'title']
+        result = bibtexparser.dumps(bib_database, writer)
+        expected = \
+"""@book{Toto3000,
+ title = {A title},
+ author = {Toto, A and Titi, B}
+}
+
+ at article{Wigner1938,
+ year = {1938},
+ publisher = {The Royal Society of Chemistry},
+ title = {The transition state method},
+ author = {Wigner, E.},
+ doi = {10.1039/TF9383400029},
+ issn = {0014-7672},
+ journal = {Trans. Faraday Soc.},
+ owner = {fr},
+ pages = {29--41},
+ volume = {34}
+}
+
+ at book{Yablon2005,
+ year = {2005},
+ publisher = {Springer},
+ title = {Optical fiber fusion slicing},
+ author = {Yablon, A.D.}
+}
+
+"""
+        self.assertEqual(result, expected)
+
 
 class TestEntrySorting(unittest.TestCase):
     bib_database = BibDatabase()
@@ -144,4 +234,3 @@ class TestEntrySorting(unittest.TestCase):
         expected = "@book{a\n}\n\n at article{b,\n year = {2000}\n}\n\n at book{c,\n year = {2010}\n}\n\n"
         self.assertEqual(result, expected)
 
-
diff --git a/bibtexparser/tests/test_comments.py b/bibtexparser/tests/test_comments.py
index 00a0d1b..068461a 100644
--- a/bibtexparser/tests/test_comments.py
+++ b/bibtexparser/tests/test_comments.py
@@ -50,6 +50,60 @@ Sunt in culpa qui officia deserunt mollit anim id est laborum.
                     "A comment"]
         self.assertEqual(bib.comments, expected)
 
+    def test_comments_percentage(self):
+        with open('bibtexparser/tests/data/comments_percentage.bib', 'r') as bibfile:
+            bib = BibTexParser(bibfile.read())
+            res = bib.get_entry_list()
+        expected = [{'ENTRYTYPE': 'article',
+                     'journal': 'Nice Journal',
+                     'volume': '12',
+                     'ID': 'Cesar2013',
+                     'year': '2013',
+                     'author': 'Jean Cesar',
+                     'comments': 'A comment',
+                     'keyword': 'keyword1, keyword2',
+                     'title': 'An amazing title'
+                     },
+                    {'ENTRYTYPE': 'article',
+                     'journal': 'Nice Journal',
+                     'volume': '12',
+                     'ID': 'Baltazar2013',
+                     'year': '2013',
+                     'author': 'Jean Baltazar',
+                     'comments': 'A comment',
+                     'keyword': 'keyword1, keyword2',
+                     'title': 'An amazing title'
+                     }]
+        self.assertEqual(res, expected)
+
+    @unittest.skip('Bug #45')
+    def test_comments_percentage_nocoma(self):
+        with open('bibtexparser/tests/data/comments_percentage_nolastcoma.bib', 'r') as bibfile:
+            bib = BibTexParser(bibfile.read())
+            res = bib.get_entry_list()
+        expected = [{'ENTRYTYPE': 'article',
+                     'journal': 'Nice Journal',
+                     'volume': '12',
+                     'ID': 'Cesar2013',
+                     'year': '2013',
+                     'author': 'Jean Cesar',
+                     'comments': 'A comment',
+                     'keyword': 'keyword1, keyword2',
+                     'title': 'An amazing title'
+                     },
+                    {'ENTRYTYPE': 'article',
+                     'journal': 'Nice Journal',
+                     'volume': '12',
+                     'ID': 'Baltazar2013',
+                     'year': '2013',
+                     'author': 'Jean Baltazar',
+                     'comments': 'A comment',
+                     'keyword': 'keyword1, keyword2',
+                     'title': 'An amazing title'
+                     }]
+        self.assertEqual(res, expected)
+
+
 
 class TestWriteComment(unittest.TestCase):
     def test_comment_write(self):
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 38042b7..a986c7c 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -24,6 +24,7 @@ Contents:
     :maxdepth: 2
 
     install.rst
+    test.rst
     tutorial.rst
     bibtexparser.rst
     logging.rst
diff --git a/docs/source/install.rst b/docs/source/install.rst
index 86e93d5..9ec0978 100644
--- a/docs/source/install.rst
+++ b/docs/source/install.rst
@@ -4,8 +4,8 @@ How to install?
 Requirements
 ------------
 
-* python **2.7** or later
-* python **3.2** or later
+* python **2.7**
+* python **3.3** or newer
 
 Package manager
 ---------------
diff --git a/docs/source/test.rst b/docs/source/test.rst
new file mode 100644
index 0000000..a74f759
--- /dev/null
+++ b/docs/source/test.rst
@@ -0,0 +1,40 @@
+How to test?
+============
+
+This page briefly describes how to run the test suite.
+This is useful for contributors but also for packagers.
+
+
+Virtualenv
+----------
+
+You can make a virtualenv. I like `pew <https://pypi.python.org/pypi/pew/>`_ for that because the API easier.
+
+The first time, you need to make a virtualenv
+
+.. code-block:: sh
+
+    pew mkproject bibtexparser
+    python setup.py install
+    nosetest
+
+
+If you already have a virtualenv
+
+.. code-block:: sh
+
+    pew workon bibtexparser
+    python setup.py install
+    nosetest
+
+
+Tox
+---
+
+The advantage of `Tox <https://pypi.python.org/pypi/tox>`_ is that you can build and test the code against several versions of python.
+Of course, you need tox to be installed on your system.
+The configuration file is tox.ini, in the root of the project.
+
+.. code-block:: sh
+
+    tox # and nothing more :)
diff --git a/docs/source/who.rst b/docs/source/who.rst
index 6aedc29..8068f1f 100644
--- a/docs/source/who.rst
+++ b/docs/source/who.rst
@@ -8,3 +8,5 @@ If your project uses BibtexParser, you can ask for the addition of a link in thi
 * http://aurelien.naldi.info/research/publications.html
 * http://robot.kut.ac.kr/publications
 * https://git.atelo.org/etlapale/bibgen
+* https://onmenwhostareongraphs.wordpress.com/2015/06/09/graph-display-software-for-author-relationships-with-bibtex-files/
+* https://github.com/vitorfs/parsifal
diff --git a/setup.py b/setup.py
index c038d80..be9b959 100644
--- a/setup.py
+++ b/setup.py
@@ -14,6 +14,6 @@ setup(
     author       = "Francois Boulogne and other contributors",
     license      = "LGPLv3 or BSD",
     author_email = "fboulogne at sciunto.org",
-    description  = "Bibtex parser for python 2 and 3",
+    description  = "Bibtex parser for python 2.7 and 3.3 and newer",
     packages = ['bibtexparser'],
 )

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/bibtexparser.git



More information about the Python-modules-commits mailing list