Dear Dave,

Thank you for the fix, it works great!

Best regards,
Andrii

On 21/05/2019 23:26, Dave Kuhlman wrote:
Andrii,

After reading more at https://www.w3.org/TR/xmlschema-0/, it looks to
me like we should make analogous changes for `xs:gMonth`, `xs:gDay`,
and `xs:gMonthDay`.

I'll fix that soon.

Dave

On Mon, May 20, 2019 at 04:41:02PM -0700, Dave Kuhlman wrote:
Andrii,

The tests for `xs:gYear` and `xs:gYearMonth` now seem to work as we
want them to.

I've implemented them for `minInclusive`, `maxInclusive`,
`minExclusive`, and `maxExclusive`.

Please let me know if it works as you expect it to.

I've pushed this patched version to Bitbucket:

     https://bitbucket.org/dkuhlman/generateds

Dave

Earlier, Dave Kuhlman wrote:

Andrii,

It seems like we should be generating a validator function that
looks like this:

     def validate_yearType(self, value):
         # Validate type yearType, a restriction on xs:gYear.
         if value is not None and Validate_simpletypes_:
             if value < int(1900):
                 warnings_.warn('Value "%(value)s" does not match xsd minInclusive 
restriction on yearType' % {"value" : value} )

An xs:gYear is being stored by the generated code as a string.  That
is, its internal representation is a string.

I guess that, effectively, we are saying that we will capture an
xs:gYear as a string, and will convert it to an integer when we need
an integer.

1. The validator method should do that conversion to integer when it
    performs it's test.  So, the test should like this:

     if int(value) < 1900:

instead of:

     if value < 1900:

2. Or, maybe this would be better:

     if value < '1900':

The reason that I suggest this second fix is because we should be
able to handle xs:gYearMonth types in addition to xs:gYear types.
For example:

     if value < '1900-01':
That would work, don't you think? Does that seem reasonable to you?
And, I believe that will do the right thing on both Python 2 and
Python 3.

Attached to a separate email is a version of generateDS.py that
contains this change (the 2nd one).

Dave

On Mon, May 13, 2019 at 03:18:11PM +0100, Andrii Iudin wrote:
Dear Dave,

We are in a process of moving to Python 3 and have stumbled upon the
following problem. We have a field defined as
<xs:element name="year" minOccurs="0">
     <xs:simpleType>
         <xs:restriction base="xs:gYear">
             <xs:minInclusive value="1900"/>
         </xs:restriction>
     </xs:simpleType>
</xs:element>

The generated code for it is
def validate_yearType(self, value):
     # Validate type yearType, a restriction on xs:gYear.
     if value is not None and Validate_simpletypes_:
         if value < 1900:
             warnings_.warn('Value "%(value)s" does not match xsd
minInclusive restriction on yearType' % {"value" : value} )

Which is fine in Python 2. However, when an XML file that contains
<year>2017</year>

is being processed in Python 3 the following error occurs:
File "path/empiar.py", line 3784, in validate_yearType1
   if value < 1900:
TypeError: '<' not supported between instances of 'str' and 'int'

Please could you advise on the way to solve this?

Many thanks and best regards,
Andrii


_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users
--

Dave Kuhlman
http://www.davekuhlman.org


_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users



_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users

Reply via email to