Hello community,

here is the log from the commit of package python-lesscpy for openSUSE:Factory 
checked in at 2017-09-04 12:31:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-lesscpy (Old)
 and      /work/SRC/openSUSE:Factory/.python-lesscpy.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-lesscpy"

Mon Sep  4 12:31:31 2017 rev:7 rq:519853 version:0.12.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-lesscpy/python-lesscpy.changes    
2016-08-17 12:05:34.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-lesscpy.new/python-lesscpy.changes       
2017-09-04 12:31:39.310887726 +0200
@@ -1,0 +2,11 @@
+Thu Aug 31 06:55:58 UTC 2017 - [email protected]
+
+- update to 0.12.0
+  * no changelog available
+
+-------------------------------------------------------------------
+Thu Aug 24 13:44:20 UTC 2017 - [email protected]
+
+- singlespec auto-conversion
+
+-------------------------------------------------------------------
@@ -42,0 +54 @@
+

Old:
----
  lesscpy-0.10.2.tar.gz

New:
----
  lesscpy-0.12.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-lesscpy.spec ++++++
--- /var/tmp/diff_new_pack.4ejwrH/_old  2017-09-04 12:31:40.266753332 +0200
+++ /var/tmp/diff_new_pack.4ejwrH/_new  2017-09-04 12:31:40.282751083 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-lesscpy
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,32 +16,29 @@
 #
 
 
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-lesscpy
-Version:        0.10.2
+Version:        0.12.0
 Release:        0
-Url:            https://github.com/robotis/lesscpy
 Summary:        Lesscss compiler
 License:        MIT
 Group:          Development/Languages/Python
-Source:         
http://pypi.python.org/packages/source/l/lesscpy/lesscpy-%{version}.tar.gz
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-BuildRequires:  python-devel
-BuildRequires:  python-ply
-BuildRequires:  python-setuptools
-BuildRequires:  python-six
-# Test requirements:
-BuildRequires:  python-coverage
-BuildRequires:  python-flake8
-BuildRequires:  python-nose
+Url:            https://github.com/robotis/lesscpy
+Source:         
https://files.pythonhosted.org/packages/source/l/lesscpy/lesscpy-%{version}.tar.gz
+BuildRequires:  %{python_module coverage}
+BuildRequires:  %{python_module devel}
+BuildRequires:  %{python_module flake8}
+BuildRequires:  %{python_module nose}
+BuildRequires:  %{python_module ply}
+BuildRequires:  %{python_module setuptools}
+BuildRequires:  %{python_module six}
+BuildRequires:  python-rpm-macros
 Requires:       python-ply
 Requires:       python-six
-Requires(post): update-alternatives
-Requires(preun): update-alternatives
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from 
distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%else
 BuildArch:      noarch
-%endif
+Requires(post):   update-alternatives
+Requires(postun):  update-alternatives
+%python_subpackages
 
 %description
 python LessCss Compiler.
@@ -58,33 +55,26 @@
 rm test/test_{bootstrap3,less,issues}.py
 
 %build
-python setup.py build
+%python_build
 
 %install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
-mkdir -p %{buildroot}%{_sysconfdir}/alternatives
-mv %{buildroot}%{_bindir}/lesscpy %{buildroot}%{_bindir}/lesscpy-%{py_ver}
-ln -sf %{_sysconfdir}/alternatives/lesscpy %{buildroot}%{_bindir}/lesscpy
-
-%check
-python setup.py -q test
+%python_install
+%python_clone -a %{buildroot}%{_bindir}/lesscpy
 
 %post
-%_sbindir/update-alternatives \
-    --install %{_bindir}/lesscpy lesscpy %{_bindir}/lesscpy-%{py_ver} 20
+%python_install_alternative lesscpy
 
-%preun
-if [ $1 -eq 0 ] ; then
-    %_sbindir/update-alternatives --remove lesscpy %{_bindir}/lesscpy-%{py_ver}
-fi
+%postun
+%python_uninstall_alternative lesscpy
+
+%check
+%python_exec setup.py test
 
-%files
+%files %{python_files}
 %defattr(-,root,root,-)
 %doc LICENSE README.rst
-%{_bindir}/lesscpy
-%{_bindir}/lesscpy-%{py_ver}
-%ghost %{_sysconfdir}/alternatives/lesscpy
+%python_alternative %{_bindir}/lesscpy
 %{python_sitelib}/lesscpy
-%{python_sitelib}/lesscpy-%{version}-py%{py_ver}.egg-info
+%{python_sitelib}/lesscpy-%{version}-py*.egg-info
 
 %changelog

++++++ lesscpy-0.10.2.tar.gz -> lesscpy-0.12.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/PKG-INFO new/lesscpy-0.12.0/PKG-INFO
--- old/lesscpy-0.10.2/PKG-INFO 2014-11-26 21:50:54.000000000 +0100
+++ new/lesscpy-0.12.0/PKG-INFO 2016-10-04 13:18:23.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: lesscpy
-Version: 0.10.2
+Version: 0.12.0
 Summary: Python LESS compiler
 Home-page: https://github.com/lesscpy/lesscpy
 Author: Jóhann T Maríusson
@@ -38,7 +38,7 @@
         input and is considerably slower than the NodeJS compiler. The plan is 
to
         utilize this to build in proper syntax checking and perhaps YUI 
compressing.
         
-        This is an early version, so you are likly to find bugs.
+        This is an early version, so you are likely to find bugs.
         
         For more information on LESS:
           http://lesscss.org/ or https://github.com/cloudhead/less.js
@@ -63,7 +63,6 @@
         - Color functions (lighten, darken, saturate, desaturate, spin, hue, 
mix,
                            saturation, lightness)
         - Other functions (round, increment, decrement, format '%(', ...)
-        - Keyframe blocks
         
         
         Differences from less.js
@@ -82,7 +81,7 @@
         Requirements
         ------------
         
-        - Python 2.6, 2.7, or 3.3
+        - Python 2.6, 2.7, 3.3, 3.4, or 3.5
         - ply (Python Lex-Yacc) (check requirements.txt)
          
         
@@ -189,5 +188,6 @@
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3.3
 Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
 Classifier: Topic :: Software Development :: Code Generators
 Classifier: Topic :: Software Development :: Pre-processors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/README.rst 
new/lesscpy-0.12.0/README.rst
--- old/lesscpy-0.10.2/README.rst       2014-11-26 21:28:11.000000000 +0100
+++ new/lesscpy-0.12.0/README.rst       2016-10-04 11:49:17.000000000 +0200
@@ -30,7 +30,7 @@
 input and is considerably slower than the NodeJS compiler. The plan is to
 utilize this to build in proper syntax checking and perhaps YUI compressing.
 
-This is an early version, so you are likly to find bugs.
+This is an early version, so you are likely to find bugs.
 
 For more information on LESS:
   http://lesscss.org/ or https://github.com/cloudhead/less.js
@@ -55,7 +55,6 @@
 - Color functions (lighten, darken, saturate, desaturate, spin, hue, mix,
                    saturation, lightness)
 - Other functions (round, increment, decrement, format '%(', ...)
-- Keyframe blocks
 
 
 Differences from less.js
@@ -74,7 +73,7 @@
 Requirements
 ------------
 
-- Python 2.6, 2.7, or 3.3
+- Python 2.6, 2.7, 3.3, 3.4, or 3.5
 - ply (Python Lex-Yacc) (check requirements.txt)
  
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/__init__.py 
new/lesscpy-0.12.0/lesscpy/__init__.py
--- old/lesscpy-0.10.2/lesscpy/__init__.py      2014-11-26 21:30:47.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/__init__.py      2016-10-04 13:09:38.000000000 
+0200
@@ -1,4 +1,4 @@
-__version_info__ = ('0', '10', '2')
+__version_info__ = ('0', '12', '0')
 __version__ = '.'.join(__version_info__)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/lessc/color.py 
new/lesscpy-0.12.0/lesscpy/lessc/color.py
--- old/lesscpy-0.10.2/lesscpy/lessc/color.py   2014-11-26 21:28:11.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/lessc/color.py   2016-10-04 11:49:17.000000000 
+0200
@@ -12,6 +12,7 @@
 
 import colorsys
 import re
+import six
 from . import utility
 from lesscpy.lib import colors
 
@@ -35,7 +36,7 @@
                 v = 0xff
             if v < 0:
                 v = 0
-            r.append("%02x" % v)
+            r.append("%02x" % int(v))
         return ''.join(r)
 
     def operate(self, left, right, operation):
@@ -303,7 +304,7 @@
             str
         """
         if color and degree:
-            if isinstance(degree, str):
+            if isinstance(degree, six.string_types):
                 degree = float(degree.strip('%'))
             h, l, s = self._hextohls(color)
             h = ((h * 360.0) + degree) % 360.0
@@ -347,7 +348,7 @@
             str
         """
         if color1 and color2:
-            if isinstance(weight, str):
+            if isinstance(weight, six.string_types):
                 weight = float(weight.strip('%'))
             weight = ((weight / 100.0) * 2) - 1
             rgb1 = self._hextorgb(color1)
@@ -383,14 +384,12 @@
         raise ValueError('Cannot format non-color')
 
     def _rgbatohex_raw(self, rgba):
-        values = ["%x" % v for v in [0xff
-                                     if h > 0xff else
-                                     0 if h < 0 else h
-                                     for h in rgba]]
+        values = ["%x" % int(v) for v in
+                  [0xff if h > 0xff else 0 if h < 0 else h for h in rgba]]
         return values
 
     def _rgbatohex(self, rgba):
-        return '#%s' % ''.join(["%02x" % v for v in
+        return '#%s' % ''.join(["%02x" % int(v) for v in
                                 [0xff
                                  if h > 0xff else
                                  0 if h < 0 else h
@@ -418,7 +417,7 @@
         return colorsys.rgb_to_hls(*[c / 255.0 for c in rgb])
 
     def _ophsl(self, color, diff, idx, operation):
-        if isinstance(diff, str):
+        if isinstance(diff, six.string_types):
             diff = float(diff.strip('%'))
         hls = list(self._hextohls(color))
         hls[idx] = self._clamp(operation(hls[idx], diff / 100.0))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/lessc/lexer.py 
new/lesscpy-0.12.0/lesscpy/lessc/lexer.py
--- old/lesscpy-0.10.2/lesscpy/lessc/lexer.py   2014-11-26 21:28:11.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/lessc/lexer.py   2016-10-04 11:49:17.000000000 
+0200
@@ -46,6 +46,7 @@
         'css_vendor_hack',
         'css_uri',
         'css_ms_filter',
+        'css_keyframe_selector',
 
         'css_media_type',
         'css_media_feature',
@@ -108,7 +109,7 @@
     def t_css_filter(self, t):
         (r'\[[^\]]*\]'
          '|(not|lang|nth-[a-z\-]+)\(.+\)'
-         '|and[ \t]\([^><\{]+\)')
+         '|and[ \t]\([^><=\{]+\)')
         return t
 
     def t_css_ms_filter(self, t):
@@ -173,6 +174,8 @@
             t.type = 'less_and'
         elif v == 'not':
             t.type = 'less_not'
+        elif v in ('from', 'to'):
+            t.type = 'css_keyframe_selector'
         elif v in css.propertys:
             t.type = 'css_property'
             t.lexer.in_property_decl = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/lessc/parser.py 
new/lesscpy-0.12.0/lesscpy/lessc/parser.py
--- old/lesscpy-0.10.2/lesscpy/lessc/parser.py  2014-11-26 21:28:11.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/lessc/parser.py  2016-10-04 11:49:17.000000000 
+0200
@@ -18,13 +18,14 @@
 import tempfile
 import sys
 import ply.yacc
+import six
 
 from . import lexer
 from . import utility
 from .scope import Scope
 from .color import Color
 from lesscpy.exceptions import CompilationError
-from lesscpy.plib import Block, Call, Deferred, Expression, Identifier, Mixin, 
Property, Statement, Variable, Import
+from lesscpy.plib import Block, Call, Deferred, Expression, Identifier, Mixin, 
NegatedExpression, Property, Statement, Variable, Import, KeyframeSelector
 
 class ErrorRegister(object):
     """
@@ -142,7 +143,7 @@
                 if filename is not None:
                     raise AssertionError(
                         'names of file and filename are in conflict')
-                filename = file.name()
+                filename = file.name
             else:
                 filename = '(stream)'
 
@@ -235,7 +236,7 @@
         if self.importlvl > 8:
             raise ImportError(
                 'Recrusive import level too deep > 8 (circular import ?)')
-        if isinstance(p[3], str):
+        if isinstance(p[3], six.string_types):
             ipath = utility.destring(p[3])
         elif isinstance(p[3], list):
             p[3] = Import(p[3], p.lineno(4)).parse(self.scope)
@@ -310,6 +311,12 @@
         """
         p[0] = Identifier([p[1], p[2]]).parse(self.scope)
 
+    def p_keyframe_open(self, p):
+        """block_open                 : css_keyframe_selector brace_open
+                                      | number brace_open
+        """
+        p[0] = KeyframeSelector([p[1]]).parse(self.scope)
+
 #
 #    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 #
@@ -784,7 +791,7 @@
     def p_expression_p_neg(self, p):
         """ expression             : '-' t_popen expression t_pclose
         """
-        p[0] = [p[1], p[3]]
+        p[0] = NegatedExpression([p[3]], 0)
 
     def p_expression_p(self, p):
         """ expression             : t_popen expression t_pclose
@@ -1046,4 +1053,3 @@
             t(str): Error type
         """
         self.register.register("%s: line: %d: %s\n" % (t, line, e))
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/lessc/scope.py 
new/lesscpy-0.12.0/lesscpy/lessc/scope.py
--- old/lesscpy-0.10.2/lesscpy/lessc/scope.py   2014-02-02 18:34:18.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/lessc/scope.py   2016-10-04 11:49:17.000000000 
+0200
@@ -7,6 +7,8 @@
     See LICENSE for details.
 .. moduleauthor:: Johann T. Mariusson <[email protected]>
 """
+import six
+
 from . import utility
 
 
@@ -193,12 +195,8 @@
             var = self.variables('@' + name[2:-1])
             if var is False:
                 raise SyntaxError('Unknown escaped variable %s' % name)
-            try:
-                if isinstance(var.value[0], basestring):  # py3
-                    var.value[0] = utility.destring(var.value[0])
-            except NameError:
-                if isinstance(var.value[0], str):  # py2
-                    var.value[0] = utility.destring(var.value[0])
+            if isinstance(var.value[0], six.string_types):
+                var.value[0] = utility.destring(var.value[0])
         else:
             var = self.variables(name)
             if var is False:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/lib/dom.py 
new/lesscpy-0.12.0/lesscpy/lib/dom.py
--- old/lesscpy-0.10.2/lesscpy/lib/dom.py       2014-02-02 13:23:27.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/lib/dom.py       2016-10-04 11:49:17.000000000 
+0200
@@ -158,15 +158,6 @@
     'tspan',
 ]
 
-# Check http://www.w3.org/TR/css3-animations/#keyframes
-# Treating them as DOM elements isn't entirely accurate
-# but sufficent for our purposes.
-css3_animation_keyframe_selectors = [
-    'from',
-    'to'
-]
-
 elements = html4
 elements.extend(html5)
 elements.extend(svg)
-elements.extend(css3_animation_keyframe_selectors)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/plib/__init__.py 
new/lesscpy-0.12.0/lesscpy/plib/__init__.py
--- old/lesscpy-0.10.2/lesscpy/plib/__init__.py 2014-11-26 21:28:11.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/plib/__init__.py 2016-10-04 11:49:17.000000000 
+0200
@@ -13,7 +13,9 @@
     'Deferred',
     'Expression',
     'Identifier',
+    'KeyframeSelector',
     'Mixin',
+    'NegatedExpression',
     'Node',
     'Property',
     'Statement',
@@ -25,7 +27,9 @@
 from .deferred import Deferred
 from .expression import Expression
 from .identifier import Identifier
+from .keyframe_selector import KeyframeSelector
 from .mixin import Mixin
+from .negated_expression import NegatedExpression
 from .node import Node
 from .property import Property
 from .statement import Statement
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/plib/call.py 
new/lesscpy-0.12.0/lesscpy/plib/call.py
--- old/lesscpy-0.10.2/lesscpy/plib/call.py     2014-02-02 18:34:18.000000000 
+0100
+++ new/lesscpy-0.12.0/lesscpy/plib/call.py     2016-10-04 11:49:17.000000000 
+0200
@@ -13,6 +13,7 @@
     from urllib.parse import quote as urlquote
 except ImportError:
     from urllib import quote as urlquote
+import six
 from .node import Node
 import lesscpy.lessc.utility as utility
 import lesscpy.lessc.color as Color
@@ -45,7 +46,7 @@
             name = 'escape'
         color = Color.Color()
         args = [t for t in parsed
-                if not isinstance(t, str) or t not in '(),']
+                if not isinstance(t, six.string_types) or t not in '(),']
         if hasattr(self, name):
             try:
                 return getattr(self, name)(*args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/plib/expression.py 
new/lesscpy-0.12.0/lesscpy/plib/expression.py
--- old/lesscpy-0.10.2/lesscpy/plib/expression.py       2014-02-02 
18:34:18.000000000 +0100
+++ new/lesscpy-0.12.0/lesscpy/plib/expression.py       2016-10-04 
11:49:17.000000000 +0200
@@ -18,7 +18,8 @@
 class Expression(Node):
 
     """Expression node. Parses all expression except
-    color expressions, (handled in the color class)
+    color expressions (handled in the color class)
+    and unary negation (handled in the NegatedExpression class).
     """
 
     def parse(self, scope):
@@ -32,7 +33,6 @@
         """
         assert(len(self.tokens) == 3)
         expr = self.process(self.tokens, scope)
-        expr = [self.neg(t, scope) for t in expr]
         A, O, B = [e[0]
                    if isinstance(e, tuple)
                    else e
@@ -55,25 +55,6 @@
             return out
         return self.with_units(out, ua, ub)
 
-    def neg(self, value, scope):
-        """Apply negativity.
-        args:
-            value (mixed): test value
-            scope (Scope): Current scope
-        raises:
-            SyntaxError
-        returns:
-            str
-        """
-        if value and isinstance(value, list) and value[0] == '-':
-            val = value[1]
-            if len(value) > 1 and hasattr(value[1], 'parse'):
-                val = value[1].parse(scope)
-            if isinstance(val, str):
-                return '-' + val
-            return -val
-        return value
-
     def with_units(self, val, ua, ub):
         """Return value with unit.
         args:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/plib/keyframe_selector.py 
new/lesscpy-0.12.0/lesscpy/plib/keyframe_selector.py
--- old/lesscpy-0.10.2/lesscpy/plib/keyframe_selector.py        1970-01-01 
01:00:00.000000000 +0100
+++ new/lesscpy-0.12.0/lesscpy/plib/keyframe_selector.py        2016-10-04 
11:49:17.000000000 +0200
@@ -0,0 +1,50 @@
+# -*- coding: utf8 -*-
+"""
+.. module:: lesscpy.plib.keyframe_selector
+    :synopsis: Keyframe selector node.
+
+    Copyright (c)
+    See LICENSE for details.
+"""
+
+from .node import Node
+
+
+class KeyframeSelector(Node):
+
+    """Keyframe selector node. Represents the keyframe selector in an 
animation 
+    sequence. Keyframes can be identified by the keywords "from" or "to", or 
by 
+    percentage.
+
+    http://www.w3.org/TR/css3-animations/#keyframes
+    """
+
+    def parse(self, scope):
+        """Parse node.
+        args:
+            scope (Scope): Current scope
+        raises:
+            SyntaxError
+        returns:
+            self
+        """
+        self.keyframe, = [e[0] if isinstance(e, tuple) else e
+                for e in self.tokens if str(e).strip()]
+        self.subparse = False
+        return self
+
+    def copy(self):
+        """ Return copy of self
+        Returns:
+            KeyframeSelector object
+        """
+        return KeyframeSelector(self.tokens, 0)
+
+    def fmt(self, fills):
+        """Format identifier
+        args:
+            fills (dict): replacements
+        returns:
+            str (CSS)
+        """
+        return self.keyframe
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/plib/negated_expression.py 
new/lesscpy-0.12.0/lesscpy/plib/negated_expression.py
--- old/lesscpy-0.10.2/lesscpy/plib/negated_expression.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/lesscpy-0.12.0/lesscpy/plib/negated_expression.py       2016-10-04 
11:49:17.000000000 +0200
@@ -0,0 +1,23 @@
+# -*- coding: utf8 -*-
+"""
+.. module:: lesscpy.plib.negated_expression
+    :synopsis: Node for unary negated expressions.
+
+    Copyright (c)
+    See LICENSE for details.
+"""
+
+import six
+
+from .node import Node
+
+
+class NegatedExpression(Node):
+
+    """Expressions preceded by unary negation."""
+
+    def parse(self, scope):
+        val, = self.process(self.tokens, scope)
+        if isinstance(val, six.string_types):
+            return '-' + val
+        return -val
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy/scripts/compiler.py 
new/lesscpy-0.12.0/lesscpy/scripts/compiler.py
--- old/lesscpy-0.10.2/lesscpy/scripts/compiler.py      2014-01-21 
12:07:38.000000000 +0100
+++ new/lesscpy-0.12.0/lesscpy/scripts/compiler.py      2016-10-04 
11:49:17.000000000 +0200
@@ -91,6 +91,8 @@
                         help="Included less-files (comma separated)")
     aparse.add_argument('-V', '--verbose', action="store_true",
                         default=False, help="Verbose mode")
+    aparse.add_argument('-C', '--dont_create_dirs', action="store_true",
+                        default=False, help="Creates directories when 
outputing files (lessc non-compatible)")
     fgroup = aparse.add_argument_group('Formatting options')
     fgroup.add_argument('-x', '--minify', action="store_true",
                         default=False, help="Minify output")
@@ -121,6 +123,7 @@
     group.add_argument('-N', '--no-css', action="store_true",
                        default=False, help="No css output")
     aparse.add_argument('target', help="less file or directory")
+    aparse.add_argument('output', nargs='?', help="output file path")
     args = aparse.parse_args()
     try:
         #
@@ -180,6 +183,16 @@
                 p.scopemap()
             if not args.no_css and p:
                 out = f.format(p)
-                print(out)
+                if args.output:
+                    if not args.dont_create_dirs and not 
os.path.exists(os.path.dirname(args.output)):
+                        try:
+                            os.makedirs(os.path.dirname(args.output))
+                        except OSError as exc: # Guard against race condition
+                            if exc.errno != errno.EEXIST:
+                                raise
+                    with open(args.output, "w") as f:
+                        f.write(out)
+                else:
+                    print(out)
     except (KeyboardInterrupt, SystemExit, IOError):
         sys.exit('\nAborting...')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy.egg-info/PKG-INFO 
new/lesscpy-0.12.0/lesscpy.egg-info/PKG-INFO
--- old/lesscpy-0.10.2/lesscpy.egg-info/PKG-INFO        2014-11-26 
21:50:54.000000000 +0100
+++ new/lesscpy-0.12.0/lesscpy.egg-info/PKG-INFO        2016-10-04 
13:18:23.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: lesscpy
-Version: 0.10.2
+Version: 0.12.0
 Summary: Python LESS compiler
 Home-page: https://github.com/lesscpy/lesscpy
 Author: Jóhann T Maríusson
@@ -38,7 +38,7 @@
         input and is considerably slower than the NodeJS compiler. The plan is 
to
         utilize this to build in proper syntax checking and perhaps YUI 
compressing.
         
-        This is an early version, so you are likly to find bugs.
+        This is an early version, so you are likely to find bugs.
         
         For more information on LESS:
           http://lesscss.org/ or https://github.com/cloudhead/less.js
@@ -63,7 +63,6 @@
         - Color functions (lighten, darken, saturate, desaturate, spin, hue, 
mix,
                            saturation, lightness)
         - Other functions (round, increment, decrement, format '%(', ...)
-        - Keyframe blocks
         
         
         Differences from less.js
@@ -82,7 +81,7 @@
         Requirements
         ------------
         
-        - Python 2.6, 2.7, or 3.3
+        - Python 2.6, 2.7, 3.3, 3.4, or 3.5
         - ply (Python Lex-Yacc) (check requirements.txt)
          
         
@@ -189,5 +188,6 @@
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3.3
 Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
 Classifier: Topic :: Software Development :: Code Generators
 Classifier: Topic :: Software Development :: Pre-processors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/lesscpy.egg-info/SOURCES.txt 
new/lesscpy-0.12.0/lesscpy.egg-info/SOURCES.txt
--- old/lesscpy-0.10.2/lesscpy.egg-info/SOURCES.txt     2014-11-26 
21:50:54.000000000 +0100
+++ new/lesscpy-0.12.0/lesscpy.egg-info/SOURCES.txt     2016-10-04 
13:18:23.000000000 +0200
@@ -33,7 +33,9 @@
 lesscpy/plib/expression.py
 lesscpy/plib/identifier.py
 lesscpy/plib/import_.py
+lesscpy/plib/keyframe_selector.py
 lesscpy/plib/mixin.py
+lesscpy/plib/negated_expression.py
 lesscpy/plib/node.py
 lesscpy/plib/property.py
 lesscpy/plib/statement.py
@@ -50,7 +52,6 @@
 test/test_color.pyc
 test/test_expression.py
 test/test_expression.pyc
-test/test_font_awesome.pyc
 test/test_identifier.py
 test/test_identifier.pyc
 test/test_issues.py
@@ -58,10 +59,25 @@
 test/test_less.py
 test/test_less.pyc
 test/test_lexer.py
+test/test_lexer.pyc
 test/test_parser.py
+test/test_parser.pyc
 test/test_pycompile.py
+test/test_pycompile.pyc
 test/test_utility.py
 test/test_utility.pyc
+test/__pycache__/__init__.cpython-35.pyc
+test/__pycache__/core.cpython-35.pyc
+test/__pycache__/test_bootstrap3.cpython-35.pyc
+test/__pycache__/test_color.cpython-35.pyc
+test/__pycache__/test_expression.cpython-35.pyc
+test/__pycache__/test_identifier.cpython-35.pyc
+test/__pycache__/test_issues.cpython-35.pyc
+test/__pycache__/test_less.cpython-35.pyc
+test/__pycache__/test_lexer.cpython-35.pyc
+test/__pycache__/test_parser.cpython-35.pyc
+test/__pycache__/test_pycompile.cpython-35.pyc
+test/__pycache__/test_utility.cpython-35.pyc
 test/bootstrap3/css/bootstrap.css
 test/bootstrap3/css/bootstrap.min.css
 test/bootstrap3/css/theme.css
@@ -178,6 +194,7 @@
 test/css/issues/issue4.css
 test/css/issues/issue5.css
 test/css/issues/issue6.css
+test/css/issues/issue67.css
 test/less/argb.less
 test/less/calls.less
 test/less/colors.less
@@ -220,4 +237,5 @@
 test/less/issues/issue31.less
 test/less/issues/issue4.less
 test/less/issues/issue5.less
-test/less/issues/issue6.less
\ No newline at end of file
+test/less/issues/issue6.less
+test/less/issues/issue67.less
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/setup.cfg new/lesscpy-0.12.0/setup.cfg
--- old/lesscpy-0.10.2/setup.cfg        2014-11-26 21:50:54.000000000 +0100
+++ new/lesscpy-0.12.0/setup.cfg        2016-10-04 13:18:23.000000000 +0200
@@ -2,7 +2,7 @@
 universal = 1
 
 [egg_info]
-tag_build = 
 tag_date = 0
+tag_build = 
 tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/setup.py new/lesscpy-0.12.0/setup.py
--- old/lesscpy-0.10.2/setup.py 2014-11-26 21:28:11.000000000 +0100
+++ new/lesscpy-0.12.0/setup.py 2016-10-04 11:49:17.000000000 +0200
@@ -53,6 +53,7 @@
         'Programming Language :: Python :: 2.7',
         'Programming Language :: Python :: 3.3',
         'Programming Language :: Python :: 3.4',
+        'Programming Language :: Python :: 3.5',
         'Topic :: Software Development :: Code Generators',
         'Topic :: Software Development :: Pre-processors',
     ],
Binary files old/lesscpy-0.10.2/test/__init__.pyc and 
new/lesscpy-0.12.0/test/__init__.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/__init__.cpython-35.pyc and 
new/lesscpy-0.12.0/test/__pycache__/__init__.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/core.cpython-35.pyc and 
new/lesscpy-0.12.0/test/__pycache__/core.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_bootstrap3.cpython-35.pyc 
and new/lesscpy-0.12.0/test/__pycache__/test_bootstrap3.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_color.cpython-35.pyc and 
new/lesscpy-0.12.0/test/__pycache__/test_color.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_expression.cpython-35.pyc 
and new/lesscpy-0.12.0/test/__pycache__/test_expression.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_identifier.cpython-35.pyc 
and new/lesscpy-0.12.0/test/__pycache__/test_identifier.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_issues.cpython-35.pyc and 
new/lesscpy-0.12.0/test/__pycache__/test_issues.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_less.cpython-35.pyc and 
new/lesscpy-0.12.0/test/__pycache__/test_less.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_lexer.cpython-35.pyc and 
new/lesscpy-0.12.0/test/__pycache__/test_lexer.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_parser.cpython-35.pyc and 
new/lesscpy-0.12.0/test/__pycache__/test_parser.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_pycompile.cpython-35.pyc 
and new/lesscpy-0.12.0/test/__pycache__/test_pycompile.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/__pycache__/test_utility.cpython-35.pyc 
and new/lesscpy-0.12.0/test/__pycache__/test_utility.cpython-35.pyc differ
Binary files old/lesscpy-0.10.2/test/core.pyc and 
new/lesscpy-0.12.0/test/core.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/test/css/issues/issue67.css 
new/lesscpy-0.12.0/test/css/issues/issue67.css
--- old/lesscpy-0.10.2/test/css/issues/issue67.css      1970-01-01 
01:00:00.000000000 +0100
+++ new/lesscpy-0.12.0/test/css/issues/issue67.css      2016-10-04 
11:49:17.000000000 +0200
@@ -0,0 +1,3 @@
+.c {
+       left: 4;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/test/css/keyframes.css 
new/lesscpy-0.12.0/test/css/keyframes.css
--- old/lesscpy-0.10.2/test/css/keyframes.css   2014-02-02 18:34:18.000000000 
+0100
+++ new/lesscpy-0.12.0/test/css/keyframes.css   2016-10-04 11:49:17.000000000 
+0200
@@ -22,3 +22,25 @@
                background-position: 40px 0;
        }
 }
+@keyframes using-percentages {
+       0% {
+               top: 0;
+       }
+       50% {
+               top: 1px;
+       }
+       100% {
+               top: 2px;
+       }
+}
+@keyframes mixed-in {
+       from {
+               left: 0;
+       }
+       50% {
+               left: 1px;
+       }
+       to {
+               left: 2px;
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/test/css/keyframes.min.css 
new/lesscpy-0.12.0/test/css/keyframes.min.css
--- old/lesscpy-0.10.2/test/css/keyframes.min.css       2014-02-02 
18:34:18.000000000 +0100
+++ new/lesscpy-0.12.0/test/css/keyframes.min.css       2016-10-04 
11:49:17.000000000 +0200
@@ -4,3 +4,9 @@
 to{background-position:40px 0;}}
 @keyframes progress-bar-stripes{from{background-position:0 0;}
 to{background-position:40px 0;}}
+@keyframes using-percentages{0%{top:0;}
+50%{top:1px;}
+100%{top:2px;}}
+@keyframes mixed-in{from{left:0;}
+50%{left:1px;}
+to{left:2px;}}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/test/less/issues/issue67.less 
new/lesscpy-0.12.0/test/less/issues/issue67.less
--- old/lesscpy-0.10.2/test/less/issues/issue67.less    1970-01-01 
01:00:00.000000000 +0100
+++ new/lesscpy-0.12.0/test/less/issues/issue67.less    2016-10-04 
11:49:17.000000000 +0200
@@ -0,0 +1 @@
+.c { left: -(1 + 1) * -(1 + 1); }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/test/less/keyframes.less 
new/lesscpy-0.12.0/test/less/keyframes.less
--- old/lesscpy-0.10.2/test/less/keyframes.less 2014-02-02 18:34:18.000000000 
+0100
+++ new/lesscpy-0.12.0/test/less/keyframes.less 2016-10-04 11:49:17.000000000 
+0200
@@ -14,4 +14,21 @@
 @keyframes progress-bar-stripes {
   from  { background-position: 0 0; }
   to    { background-position: 40px 0; }
-}
\ No newline at end of file
+}
+
+// using percentages
+@keyframes using-percentages {
+  0% { top: 0; }
+  50% { top: 1px; }
+  100% { top: 2px; }
+}
+
+// in a mix-in
+.keyframe-mixin() {
+  from { left: 0; }
+  50% { left: 1px; }
+  to { left: 2px; }
+}
+@keyframes mixed-in {
+  .keyframe-mixin();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/test/less/mixin-args-guards.less 
new/lesscpy-0.12.0/test/less/mixin-args-guards.less
--- old/lesscpy-0.10.2/test/less/mixin-args-guards.less 2014-02-02 
18:34:18.000000000 +0100
+++ new/lesscpy-0.12.0/test/less/mixin-args-guards.less 2016-10-04 
11:49:17.000000000 +0200
@@ -29,6 +29,8 @@
        .mixin1(11);
        .mixin1(-11);
 }
+.eq (@a, @b) when (@a < @b) and (@b = @a) {
+}
 .max (@a, @b) when (@a > @b) { 
        width: @a 
 }
Binary files old/lesscpy-0.10.2/test/test_bootstrap3.pyc and 
new/lesscpy-0.12.0/test/test_bootstrap3.pyc differ
Binary files old/lesscpy-0.10.2/test/test_color.pyc and 
new/lesscpy-0.12.0/test/test_color.pyc differ
Binary files old/lesscpy-0.10.2/test/test_expression.pyc and 
new/lesscpy-0.12.0/test/test_expression.pyc differ
Binary files old/lesscpy-0.10.2/test/test_font_awesome.pyc and 
new/lesscpy-0.12.0/test/test_font_awesome.pyc differ
Binary files old/lesscpy-0.10.2/test/test_identifier.pyc and 
new/lesscpy-0.12.0/test/test_identifier.pyc differ
Binary files old/lesscpy-0.10.2/test/test_issues.pyc and 
new/lesscpy-0.12.0/test/test_issues.pyc differ
Binary files old/lesscpy-0.10.2/test/test_less.pyc and 
new/lesscpy-0.12.0/test/test_less.pyc differ
Binary files old/lesscpy-0.10.2/test/test_lexer.pyc and 
new/lesscpy-0.12.0/test/test_lexer.pyc differ
Binary files old/lesscpy-0.10.2/test/test_parser.pyc and 
new/lesscpy-0.12.0/test/test_parser.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/test/test_pycompile.py 
new/lesscpy-0.12.0/test/test_pycompile.py
--- old/lesscpy-0.10.2/test/test_pycompile.py   2014-11-26 21:28:11.000000000 
+0100
+++ new/lesscpy-0.12.0/test/test_pycompile.py   2016-10-04 11:49:17.000000000 
+0200
@@ -14,7 +14,7 @@
     Unit tests for compile
     """
 
-    def test_compile(self):
+    def test_compile_from_stream(self):
         """
         It can compile input from a file-like object
         """
@@ -22,6 +22,18 @@
         output = compile(StringIO("a { border-width: 2px * 3; }"), minify=True)
         self.assertEqual(output, "a{border-width:6px;}");
 
+    def test_compile_from_file(self):
+        """
+        It can compile input from a file object
+        """
+
+        import tempfile
+        in_file = tempfile.NamedTemporaryFile(mode='w+')
+        in_file.write("a { border-width: 2px * 3; }")
+        in_file.seek(0)
+        output = compile(in_file, minify=True)
+        self.assertEqual(output, "a{border-width:6px;}");
+
     def test_raises_exception(self):
         """
         Test if a syntax error raises an exception
@@ -30,4 +42,3 @@
 
         fail_func = lambda: compile(StringIO("a }"), minify=True)
         self.assertRaises(CompilationError, fail_func)
-
Binary files old/lesscpy-0.10.2/test/test_pycompile.pyc and 
new/lesscpy-0.12.0/test/test_pycompile.pyc differ
Binary files old/lesscpy-0.10.2/test/test_utility.pyc and 
new/lesscpy-0.12.0/test/test_utility.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lesscpy-0.10.2/tox.ini new/lesscpy-0.12.0/tox.ini
--- old/lesscpy-0.10.2/tox.ini  2014-02-02 18:34:18.000000000 +0100
+++ new/lesscpy-0.12.0/tox.ini  2016-10-04 13:09:38.000000000 +0200
@@ -1,5 +1,5 @@
 [tox]
-envlist = py26,py27,py33,flake8
+envlist = py26,py27,py3,flake8
 
 [testenv]
 deps = -r{toxinidir}/test-requirements.txt


Reply via email to