karrio-canadapost 2025.5rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. karrio/mappers/canadapost/__init__.py +3 -0
  2. karrio/mappers/canadapost/mapper.py +88 -0
  3. karrio/mappers/canadapost/proxy.py +373 -0
  4. karrio/mappers/canadapost/settings.py +23 -0
  5. karrio/plugins/canadapost/__init__.py +23 -0
  6. karrio/providers/canadapost/__init__.py +25 -0
  7. karrio/providers/canadapost/error.py +42 -0
  8. karrio/providers/canadapost/manifest.py +127 -0
  9. karrio/providers/canadapost/pickup/__init__.py +3 -0
  10. karrio/providers/canadapost/pickup/cancel.py +33 -0
  11. karrio/providers/canadapost/pickup/create.py +217 -0
  12. karrio/providers/canadapost/pickup/update.py +55 -0
  13. karrio/providers/canadapost/rate.py +192 -0
  14. karrio/providers/canadapost/shipment/__init__.py +8 -0
  15. karrio/providers/canadapost/shipment/cancel.py +53 -0
  16. karrio/providers/canadapost/shipment/create.py +308 -0
  17. karrio/providers/canadapost/tracking.py +75 -0
  18. karrio/providers/canadapost/units.py +285 -0
  19. karrio/providers/canadapost/utils.py +92 -0
  20. karrio/schemas/canadapost/__init__.py +0 -0
  21. karrio/schemas/canadapost/authreturn.py +3389 -0
  22. karrio/schemas/canadapost/common.py +2037 -0
  23. karrio/schemas/canadapost/customerinfo.py +2307 -0
  24. karrio/schemas/canadapost/discovery.py +3016 -0
  25. karrio/schemas/canadapost/manifest.py +3704 -0
  26. karrio/schemas/canadapost/merchantregistration.py +1498 -0
  27. karrio/schemas/canadapost/messages.py +1431 -0
  28. karrio/schemas/canadapost/ncshipment.py +7231 -0
  29. karrio/schemas/canadapost/openreturn.py +2438 -0
  30. karrio/schemas/canadapost/pickup.py +1407 -0
  31. karrio/schemas/canadapost/pickuprequest.py +6794 -0
  32. karrio/schemas/canadapost/postoffice.py +2240 -0
  33. karrio/schemas/canadapost/rating.py +5308 -0
  34. karrio/schemas/canadapost/serviceinfo.py +1505 -0
  35. karrio/schemas/canadapost/shipment.py +9982 -0
  36. karrio/schemas/canadapost/track.py +3100 -0
  37. karrio_canadapost-2025.5rc1.dist-info/METADATA +44 -0
  38. karrio_canadapost-2025.5rc1.dist-info/RECORD +41 -0
  39. karrio_canadapost-2025.5rc1.dist-info/WHEEL +5 -0
  40. karrio_canadapost-2025.5rc1.dist-info/entry_points.txt +2 -0
  41. karrio_canadapost-2025.5rc1.dist-info/top_level.txt +3 -0
@@ -0,0 +1,2240 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ #
5
+ # Generated Sat Mar 16 02:19:32 2024 by generateDS.py version 2.43.3.
6
+ # Python 3.12.2 (main, Feb 28 2024, 21:12:07) [GCC 11.4.0]
7
+ #
8
+ # Command line options:
9
+ # ('--no-namespace-defs', '')
10
+ # ('-o', './karrio/schemas/canadapost/postoffice.py')
11
+ #
12
+ # Command line arguments:
13
+ # ./schemas/postoffice.xsd
14
+ #
15
+ # Command line:
16
+ # /home/kserver/Workspace/karrio/.venv/karrio/bin/generateDS --no-namespace-defs -o "./karrio/schemas/canadapost/postoffice.py" ./schemas/postoffice.xsd
17
+ #
18
+ # Current working directory (os.getcwd()):
19
+ # canadapost
20
+ #
21
+
22
+ import sys
23
+ try:
24
+ ModulenotfoundExp_ = ModuleNotFoundError
25
+ except NameError:
26
+ ModulenotfoundExp_ = ImportError
27
+ from six.moves import zip_longest
28
+ import os
29
+ import re as re_
30
+ import base64
31
+ import datetime as datetime_
32
+ import decimal as decimal_
33
+ from lxml import etree as etree_
34
+
35
+
36
+ Validate_simpletypes_ = True
37
+ SaveElementTreeNode = True
38
+ TagNamePrefix = ""
39
+ if sys.version_info.major == 2:
40
+ BaseStrType_ = basestring
41
+ else:
42
+ BaseStrType_ = str
43
+
44
+
45
+ def parsexml_(infile, parser=None, **kwargs):
46
+ if parser is None:
47
+ # Use the lxml ElementTree compatible parser so that, e.g.,
48
+ # we ignore comments.
49
+ try:
50
+ parser = etree_.ETCompatXMLParser()
51
+ except AttributeError:
52
+ # fallback to xml.etree
53
+ parser = etree_.XMLParser()
54
+ try:
55
+ if isinstance(infile, os.PathLike):
56
+ infile = os.path.join(infile)
57
+ except AttributeError:
58
+ pass
59
+ doc = etree_.parse(infile, parser=parser, **kwargs)
60
+ return doc
61
+
62
+ def parsexmlstring_(instring, parser=None, **kwargs):
63
+ if parser is None:
64
+ # Use the lxml ElementTree compatible parser so that, e.g.,
65
+ # we ignore comments.
66
+ try:
67
+ parser = etree_.ETCompatXMLParser()
68
+ except AttributeError:
69
+ # fallback to xml.etree
70
+ parser = etree_.XMLParser()
71
+ element = etree_.fromstring(instring, parser=parser, **kwargs)
72
+ return element
73
+
74
+ #
75
+ # Namespace prefix definition table (and other attributes, too)
76
+ #
77
+ # The module generatedsnamespaces, if it is importable, must contain
78
+ # a dictionary named GeneratedsNamespaceDefs. This Python dictionary
79
+ # should map element type names (strings) to XML schema namespace prefix
80
+ # definitions. The export method for any class for which there is
81
+ # a namespace prefix definition, will export that definition in the
82
+ # XML representation of that element. See the export method of
83
+ # any generated element type class for an example of the use of this
84
+ # table.
85
+ # A sample table is:
86
+ #
87
+ # # File: generatedsnamespaces.py
88
+ #
89
+ # GenerateDSNamespaceDefs = {
90
+ # "ElementtypeA": "http://www.xxx.com/namespaceA",
91
+ # "ElementtypeB": "http://www.xxx.com/namespaceB",
92
+ # }
93
+ #
94
+ # Additionally, the generatedsnamespaces module can contain a python
95
+ # dictionary named GenerateDSNamespaceTypePrefixes that associates element
96
+ # types with the namespace prefixes that are to be added to the
97
+ # "xsi:type" attribute value. See the _exportAttributes method of
98
+ # any generated element type and the generation of "xsi:type" for an
99
+ # example of the use of this table.
100
+ # An example table:
101
+ #
102
+ # # File: generatedsnamespaces.py
103
+ #
104
+ # GenerateDSNamespaceTypePrefixes = {
105
+ # "ElementtypeC": "aaa:",
106
+ # "ElementtypeD": "bbb:",
107
+ # }
108
+ #
109
+
110
+ try:
111
+ from generatedsnamespaces import GenerateDSNamespaceDefs as GenerateDSNamespaceDefs_
112
+ except ModulenotfoundExp_ :
113
+ GenerateDSNamespaceDefs_ = {}
114
+ try:
115
+ from generatedsnamespaces import GenerateDSNamespaceTypePrefixes as GenerateDSNamespaceTypePrefixes_
116
+ except ModulenotfoundExp_ :
117
+ GenerateDSNamespaceTypePrefixes_ = {}
118
+
119
+ #
120
+ # You can replace the following class definition by defining an
121
+ # importable module named "generatedscollector" containing a class
122
+ # named "GdsCollector". See the default class definition below for
123
+ # clues about the possible content of that class.
124
+ #
125
+ try:
126
+ from generatedscollector import GdsCollector as GdsCollector_
127
+ except ModulenotfoundExp_ :
128
+
129
+ class GdsCollector_(object):
130
+
131
+ def __init__(self, messages=None):
132
+ if messages is None:
133
+ self.messages = []
134
+ else:
135
+ self.messages = messages
136
+
137
+ def add_message(self, msg):
138
+ self.messages.append(msg)
139
+
140
+ def get_messages(self):
141
+ return self.messages
142
+
143
+ def clear_messages(self):
144
+ self.messages = []
145
+
146
+ def print_messages(self):
147
+ for msg in self.messages:
148
+ print("Warning: {}".format(msg))
149
+
150
+ def write_messages(self, outstream):
151
+ for msg in self.messages:
152
+ outstream.write("Warning: {}\n".format(msg))
153
+
154
+
155
+ #
156
+ # The super-class for enum types
157
+ #
158
+
159
+ try:
160
+ from enum import Enum
161
+ except ModulenotfoundExp_ :
162
+ Enum = object
163
+
164
+ #
165
+ # The root super-class for element type classes
166
+ #
167
+ # Calls to the methods in these classes are generated by generateDS.py.
168
+ # You can replace these methods by re-implementing the following class
169
+ # in a module named generatedssuper.py.
170
+
171
+ try:
172
+ from generatedssuper import GeneratedsSuper
173
+ except ModulenotfoundExp_ as exp:
174
+ try:
175
+ from generatedssupersuper import GeneratedsSuperSuper
176
+ except ModulenotfoundExp_ as exp:
177
+ class GeneratedsSuperSuper(object):
178
+ pass
179
+
180
+ class GeneratedsSuper(GeneratedsSuperSuper):
181
+ __hash__ = object.__hash__
182
+ tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$')
183
+ class _FixedOffsetTZ(datetime_.tzinfo):
184
+ def __init__(self, offset, name):
185
+ self.__offset = datetime_.timedelta(minutes=offset)
186
+ self.__name = name
187
+ def utcoffset(self, dt):
188
+ return self.__offset
189
+ def tzname(self, dt):
190
+ return self.__name
191
+ def dst(self, dt):
192
+ return None
193
+ def __str__(self):
194
+ settings = {
195
+ 'str_pretty_print': True,
196
+ 'str_indent_level': 0,
197
+ 'str_namespaceprefix': '',
198
+ 'str_name': self.__class__.__name__,
199
+ 'str_namespacedefs': '',
200
+ }
201
+ for n in settings:
202
+ if hasattr(self, n):
203
+ settings[n] = getattr(self, n)
204
+ if sys.version_info.major == 2:
205
+ from StringIO import StringIO
206
+ else:
207
+ from io import StringIO
208
+ output = StringIO()
209
+ self.export(
210
+ output,
211
+ settings['str_indent_level'],
212
+ pretty_print=settings['str_pretty_print'],
213
+ namespaceprefix_=settings['str_namespaceprefix'],
214
+ name_=settings['str_name'],
215
+ namespacedef_=settings['str_namespacedefs']
216
+ )
217
+ strval = output.getvalue()
218
+ output.close()
219
+ return strval
220
+ def gds_format_string(self, input_data, input_name=''):
221
+ return input_data
222
+ def gds_parse_string(self, input_data, node=None, input_name=''):
223
+ return input_data
224
+ def gds_validate_string(self, input_data, node=None, input_name=''):
225
+ if not input_data:
226
+ return ''
227
+ else:
228
+ return input_data
229
+ def gds_format_base64(self, input_data, input_name=''):
230
+ return base64.b64encode(input_data).decode('ascii')
231
+ def gds_validate_base64(self, input_data, node=None, input_name=''):
232
+ return input_data
233
+ def gds_format_integer(self, input_data, input_name=''):
234
+ return '%d' % int(input_data)
235
+ def gds_parse_integer(self, input_data, node=None, input_name=''):
236
+ try:
237
+ ival = int(input_data)
238
+ except (TypeError, ValueError) as exp:
239
+ raise_parse_error(node, 'Requires integer value: %s' % exp)
240
+ return ival
241
+ def gds_validate_integer(self, input_data, node=None, input_name=''):
242
+ try:
243
+ value = int(input_data)
244
+ except (TypeError, ValueError):
245
+ raise_parse_error(node, 'Requires integer value')
246
+ return value
247
+ def gds_format_integer_list(self, input_data, input_name=''):
248
+ if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
249
+ input_data = [str(s) for s in input_data]
250
+ return '%s' % ' '.join(input_data)
251
+ def gds_validate_integer_list(
252
+ self, input_data, node=None, input_name=''):
253
+ values = input_data.split()
254
+ for value in values:
255
+ try:
256
+ int(value)
257
+ except (TypeError, ValueError):
258
+ raise_parse_error(node, 'Requires sequence of integer values')
259
+ return values
260
+ def gds_format_float(self, input_data, input_name=''):
261
+ value = ('%.15f' % float(input_data)).rstrip('0')
262
+ if value.endswith('.'):
263
+ value += '0'
264
+ return value
265
+
266
+ def gds_parse_float(self, input_data, node=None, input_name=''):
267
+ try:
268
+ fval_ = float(input_data)
269
+ except (TypeError, ValueError) as exp:
270
+ raise_parse_error(node, 'Requires float or double value: %s' % exp)
271
+ return fval_
272
+ def gds_validate_float(self, input_data, node=None, input_name=''):
273
+ try:
274
+ value = float(input_data)
275
+ except (TypeError, ValueError):
276
+ raise_parse_error(node, 'Requires float value')
277
+ return value
278
+ def gds_format_float_list(self, input_data, input_name=''):
279
+ if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
280
+ input_data = [str(s) for s in input_data]
281
+ return '%s' % ' '.join(input_data)
282
+ def gds_validate_float_list(
283
+ self, input_data, node=None, input_name=''):
284
+ values = input_data.split()
285
+ for value in values:
286
+ try:
287
+ float(value)
288
+ except (TypeError, ValueError):
289
+ raise_parse_error(node, 'Requires sequence of float values')
290
+ return values
291
+ def gds_format_decimal(self, input_data, input_name=''):
292
+ return_value = '%s' % input_data
293
+ if '.' in return_value:
294
+ return_value = return_value.rstrip('0')
295
+ if return_value.endswith('.'):
296
+ return_value = return_value.rstrip('.')
297
+ return return_value
298
+ def gds_parse_decimal(self, input_data, node=None, input_name=''):
299
+ try:
300
+ decimal_value = decimal_.Decimal(input_data)
301
+ except (TypeError, ValueError):
302
+ raise_parse_error(node, 'Requires decimal value')
303
+ return decimal_value
304
+ def gds_validate_decimal(self, input_data, node=None, input_name=''):
305
+ try:
306
+ value = decimal_.Decimal(input_data)
307
+ except (TypeError, ValueError):
308
+ raise_parse_error(node, 'Requires decimal value')
309
+ return value
310
+ def gds_format_decimal_list(self, input_data, input_name=''):
311
+ if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
312
+ input_data = [str(s) for s in input_data]
313
+ return ' '.join([self.gds_format_decimal(item) for item in input_data])
314
+ def gds_validate_decimal_list(
315
+ self, input_data, node=None, input_name=''):
316
+ values = input_data.split()
317
+ for value in values:
318
+ try:
319
+ decimal_.Decimal(value)
320
+ except (TypeError, ValueError):
321
+ raise_parse_error(node, 'Requires sequence of decimal values')
322
+ return values
323
+ def gds_format_double(self, input_data, input_name=''):
324
+ return '%s' % input_data
325
+ def gds_parse_double(self, input_data, node=None, input_name=''):
326
+ try:
327
+ fval_ = float(input_data)
328
+ except (TypeError, ValueError) as exp:
329
+ raise_parse_error(node, 'Requires double or float value: %s' % exp)
330
+ return fval_
331
+ def gds_validate_double(self, input_data, node=None, input_name=''):
332
+ try:
333
+ value = float(input_data)
334
+ except (TypeError, ValueError):
335
+ raise_parse_error(node, 'Requires double or float value')
336
+ return value
337
+ def gds_format_double_list(self, input_data, input_name=''):
338
+ if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
339
+ input_data = [str(s) for s in input_data]
340
+ return '%s' % ' '.join(input_data)
341
+ def gds_validate_double_list(
342
+ self, input_data, node=None, input_name=''):
343
+ values = input_data.split()
344
+ for value in values:
345
+ try:
346
+ float(value)
347
+ except (TypeError, ValueError):
348
+ raise_parse_error(
349
+ node, 'Requires sequence of double or float values')
350
+ return values
351
+ def gds_format_boolean(self, input_data, input_name=''):
352
+ return ('%s' % input_data).lower()
353
+ def gds_parse_boolean(self, input_data, node=None, input_name=''):
354
+ input_data = input_data.strip()
355
+ if input_data in ('true', '1'):
356
+ bval = True
357
+ elif input_data in ('false', '0'):
358
+ bval = False
359
+ else:
360
+ raise_parse_error(node, 'Requires boolean value')
361
+ return bval
362
+ def gds_validate_boolean(self, input_data, node=None, input_name=''):
363
+ if input_data not in (True, 1, False, 0, ):
364
+ raise_parse_error(
365
+ node,
366
+ 'Requires boolean value '
367
+ '(one of True, 1, False, 0)')
368
+ return input_data
369
+ def gds_format_boolean_list(self, input_data, input_name=''):
370
+ if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
371
+ input_data = [str(s) for s in input_data]
372
+ return '%s' % ' '.join(input_data)
373
+ def gds_validate_boolean_list(
374
+ self, input_data, node=None, input_name=''):
375
+ values = input_data.split()
376
+ for value in values:
377
+ value = self.gds_parse_boolean(value, node, input_name)
378
+ if value not in (True, 1, False, 0, ):
379
+ raise_parse_error(
380
+ node,
381
+ 'Requires sequence of boolean values '
382
+ '(one of True, 1, False, 0)')
383
+ return values
384
+ def gds_validate_datetime(self, input_data, node=None, input_name=''):
385
+ return input_data
386
+ def gds_format_datetime(self, input_data, input_name=''):
387
+ if input_data.microsecond == 0:
388
+ _svalue = '%04d-%02d-%02dT%02d:%02d:%02d' % (
389
+ input_data.year,
390
+ input_data.month,
391
+ input_data.day,
392
+ input_data.hour,
393
+ input_data.minute,
394
+ input_data.second,
395
+ )
396
+ else:
397
+ _svalue = '%04d-%02d-%02dT%02d:%02d:%02d.%s' % (
398
+ input_data.year,
399
+ input_data.month,
400
+ input_data.day,
401
+ input_data.hour,
402
+ input_data.minute,
403
+ input_data.second,
404
+ ('%f' % (float(input_data.microsecond) / 1000000))[2:],
405
+ )
406
+ if input_data.tzinfo is not None:
407
+ tzoff = input_data.tzinfo.utcoffset(input_data)
408
+ if tzoff is not None:
409
+ total_seconds = tzoff.seconds + (86400 * tzoff.days)
410
+ if total_seconds == 0:
411
+ _svalue += 'Z'
412
+ else:
413
+ if total_seconds < 0:
414
+ _svalue += '-'
415
+ total_seconds *= -1
416
+ else:
417
+ _svalue += '+'
418
+ hours = total_seconds // 3600
419
+ minutes = (total_seconds - (hours * 3600)) // 60
420
+ _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
421
+ return _svalue
422
+ @classmethod
423
+ def gds_parse_datetime(cls, input_data):
424
+ tz = None
425
+ if input_data[-1] == 'Z':
426
+ tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
427
+ input_data = input_data[:-1]
428
+ else:
429
+ results = GeneratedsSuper.tzoff_pattern.search(input_data)
430
+ if results is not None:
431
+ tzoff_parts = results.group(2).split(':')
432
+ tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
433
+ if results.group(1) == '-':
434
+ tzoff *= -1
435
+ tz = GeneratedsSuper._FixedOffsetTZ(
436
+ tzoff, results.group(0))
437
+ input_data = input_data[:-6]
438
+ time_parts = input_data.split('.')
439
+ if len(time_parts) > 1:
440
+ micro_seconds = int(float('0.' + time_parts[1]) * 1000000)
441
+ input_data = '%s.%s' % (
442
+ time_parts[0], "{}".format(micro_seconds).rjust(6, "0"), )
443
+ dt = datetime_.datetime.strptime(
444
+ input_data, '%Y-%m-%dT%H:%M:%S.%f')
445
+ else:
446
+ dt = datetime_.datetime.strptime(
447
+ input_data, '%Y-%m-%dT%H:%M:%S')
448
+ dt = dt.replace(tzinfo=tz)
449
+ return dt
450
+ def gds_validate_date(self, input_data, node=None, input_name=''):
451
+ return input_data
452
+ def gds_format_date(self, input_data, input_name=''):
453
+ _svalue = '%04d-%02d-%02d' % (
454
+ input_data.year,
455
+ input_data.month,
456
+ input_data.day,
457
+ )
458
+ try:
459
+ if input_data.tzinfo is not None:
460
+ tzoff = input_data.tzinfo.utcoffset(input_data)
461
+ if tzoff is not None:
462
+ total_seconds = tzoff.seconds + (86400 * tzoff.days)
463
+ if total_seconds == 0:
464
+ _svalue += 'Z'
465
+ else:
466
+ if total_seconds < 0:
467
+ _svalue += '-'
468
+ total_seconds *= -1
469
+ else:
470
+ _svalue += '+'
471
+ hours = total_seconds // 3600
472
+ minutes = (total_seconds - (hours * 3600)) // 60
473
+ _svalue += '{0:02d}:{1:02d}'.format(
474
+ hours, minutes)
475
+ except AttributeError:
476
+ pass
477
+ return _svalue
478
+ @classmethod
479
+ def gds_parse_date(cls, input_data):
480
+ tz = None
481
+ if input_data[-1] == 'Z':
482
+ tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
483
+ input_data = input_data[:-1]
484
+ else:
485
+ results = GeneratedsSuper.tzoff_pattern.search(input_data)
486
+ if results is not None:
487
+ tzoff_parts = results.group(2).split(':')
488
+ tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
489
+ if results.group(1) == '-':
490
+ tzoff *= -1
491
+ tz = GeneratedsSuper._FixedOffsetTZ(
492
+ tzoff, results.group(0))
493
+ input_data = input_data[:-6]
494
+ dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d')
495
+ dt = dt.replace(tzinfo=tz)
496
+ return dt.date()
497
+ def gds_validate_time(self, input_data, node=None, input_name=''):
498
+ return input_data
499
+ def gds_format_time(self, input_data, input_name=''):
500
+ if input_data.microsecond == 0:
501
+ _svalue = '%02d:%02d:%02d' % (
502
+ input_data.hour,
503
+ input_data.minute,
504
+ input_data.second,
505
+ )
506
+ else:
507
+ _svalue = '%02d:%02d:%02d.%s' % (
508
+ input_data.hour,
509
+ input_data.minute,
510
+ input_data.second,
511
+ ('%f' % (float(input_data.microsecond) / 1000000))[2:],
512
+ )
513
+ if input_data.tzinfo is not None:
514
+ tzoff = input_data.tzinfo.utcoffset(input_data)
515
+ if tzoff is not None:
516
+ total_seconds = tzoff.seconds + (86400 * tzoff.days)
517
+ if total_seconds == 0:
518
+ _svalue += 'Z'
519
+ else:
520
+ if total_seconds < 0:
521
+ _svalue += '-'
522
+ total_seconds *= -1
523
+ else:
524
+ _svalue += '+'
525
+ hours = total_seconds // 3600
526
+ minutes = (total_seconds - (hours * 3600)) // 60
527
+ _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
528
+ return _svalue
529
+ def gds_validate_simple_patterns(self, patterns, target):
530
+ # pat is a list of lists of strings/patterns.
531
+ # The target value must match at least one of the patterns
532
+ # in order for the test to succeed.
533
+ found1 = True
534
+ target = str(target)
535
+ for patterns1 in patterns:
536
+ found2 = False
537
+ for patterns2 in patterns1:
538
+ mo = re_.search(patterns2, target)
539
+ if mo is not None and len(mo.group(0)) == len(target):
540
+ found2 = True
541
+ break
542
+ if not found2:
543
+ found1 = False
544
+ break
545
+ return found1
546
+ @classmethod
547
+ def gds_parse_time(cls, input_data):
548
+ tz = None
549
+ if input_data[-1] == 'Z':
550
+ tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
551
+ input_data = input_data[:-1]
552
+ else:
553
+ results = GeneratedsSuper.tzoff_pattern.search(input_data)
554
+ if results is not None:
555
+ tzoff_parts = results.group(2).split(':')
556
+ tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
557
+ if results.group(1) == '-':
558
+ tzoff *= -1
559
+ tz = GeneratedsSuper._FixedOffsetTZ(
560
+ tzoff, results.group(0))
561
+ input_data = input_data[:-6]
562
+ if len(input_data.split('.')) > 1:
563
+ dt = datetime_.datetime.strptime(input_data, '%H:%M:%S.%f')
564
+ else:
565
+ dt = datetime_.datetime.strptime(input_data, '%H:%M:%S')
566
+ dt = dt.replace(tzinfo=tz)
567
+ return dt.time()
568
+ def gds_check_cardinality_(
569
+ self, value, input_name,
570
+ min_occurs=0, max_occurs=1, required=None):
571
+ if value is None:
572
+ length = 0
573
+ elif isinstance(value, list):
574
+ length = len(value)
575
+ else:
576
+ length = 1
577
+ if required is not None :
578
+ if required and length < 1:
579
+ self.gds_collector_.add_message(
580
+ "Required value {}{} is missing".format(
581
+ input_name, self.gds_get_node_lineno_()))
582
+ if length < min_occurs:
583
+ self.gds_collector_.add_message(
584
+ "Number of values for {}{} is below "
585
+ "the minimum allowed, "
586
+ "expected at least {}, found {}".format(
587
+ input_name, self.gds_get_node_lineno_(),
588
+ min_occurs, length))
589
+ elif length > max_occurs:
590
+ self.gds_collector_.add_message(
591
+ "Number of values for {}{} is above "
592
+ "the maximum allowed, "
593
+ "expected at most {}, found {}".format(
594
+ input_name, self.gds_get_node_lineno_(),
595
+ max_occurs, length))
596
+ def gds_validate_builtin_ST_(
597
+ self, validator, value, input_name,
598
+ min_occurs=None, max_occurs=None, required=None):
599
+ if value is not None:
600
+ try:
601
+ validator(value, input_name=input_name)
602
+ except GDSParseError as parse_error:
603
+ self.gds_collector_.add_message(str(parse_error))
604
+ def gds_validate_defined_ST_(
605
+ self, validator, value, input_name,
606
+ min_occurs=None, max_occurs=None, required=None):
607
+ if value is not None:
608
+ try:
609
+ validator(value)
610
+ except GDSParseError as parse_error:
611
+ self.gds_collector_.add_message(str(parse_error))
612
+ def gds_str_lower(self, instring):
613
+ return instring.lower()
614
+ def get_path_(self, node):
615
+ path_list = []
616
+ self.get_path_list_(node, path_list)
617
+ path_list.reverse()
618
+ path = '/'.join(path_list)
619
+ return path
620
+ Tag_strip_pattern_ = re_.compile(r'\{.*\}')
621
+ def get_path_list_(self, node, path_list):
622
+ if node is None:
623
+ return
624
+ tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag)
625
+ if tag:
626
+ path_list.append(tag)
627
+ self.get_path_list_(node.getparent(), path_list)
628
+ def get_class_obj_(self, node, default_class=None):
629
+ class_obj1 = default_class
630
+ if 'xsi' in node.nsmap:
631
+ classname = node.get('{%s}type' % node.nsmap['xsi'])
632
+ if classname is not None:
633
+ names = classname.split(':')
634
+ if len(names) == 2:
635
+ classname = names[1]
636
+ class_obj2 = globals().get(classname)
637
+ if class_obj2 is not None:
638
+ class_obj1 = class_obj2
639
+ return class_obj1
640
+ def gds_build_any(self, node, type_name=None):
641
+ # provide default value in case option --disable-xml is used.
642
+ content = ""
643
+ content = etree_.tostring(node, encoding="unicode")
644
+ return content
645
+ @classmethod
646
+ def gds_reverse_node_mapping(cls, mapping):
647
+ return dict(((v, k) for k, v in mapping.items()))
648
+ @staticmethod
649
+ def gds_encode(instring):
650
+ if sys.version_info.major == 2:
651
+ if ExternalEncoding:
652
+ encoding = ExternalEncoding
653
+ else:
654
+ encoding = 'utf-8'
655
+ return instring.encode(encoding)
656
+ else:
657
+ return instring
658
+ @staticmethod
659
+ def convert_unicode(instring):
660
+ if isinstance(instring, str):
661
+ result = quote_xml(instring)
662
+ elif sys.version_info.major == 2 and isinstance(instring, unicode):
663
+ result = quote_xml(instring).encode('utf8')
664
+ else:
665
+ result = GeneratedsSuper.gds_encode(str(instring))
666
+ return result
667
+ def __eq__(self, other):
668
+ def excl_select_objs_(obj):
669
+ return (obj[0] != 'parent_object_' and
670
+ obj[0] != 'gds_collector_')
671
+ if type(self) != type(other):
672
+ return False
673
+ return all(x == y for x, y in zip_longest(
674
+ filter(excl_select_objs_, self.__dict__.items()),
675
+ filter(excl_select_objs_, other.__dict__.items())))
676
+ def __ne__(self, other):
677
+ return not self.__eq__(other)
678
+ # Django ETL transform hooks.
679
+ def gds_djo_etl_transform(self):
680
+ pass
681
+ def gds_djo_etl_transform_db_obj(self, dbobj):
682
+ pass
683
+ # SQLAlchemy ETL transform hooks.
684
+ def gds_sqa_etl_transform(self):
685
+ return 0, None
686
+ def gds_sqa_etl_transform_db_obj(self, dbobj):
687
+ pass
688
+ def gds_get_node_lineno_(self):
689
+ if (hasattr(self, "gds_elementtree_node_") and
690
+ self.gds_elementtree_node_ is not None):
691
+ return ' near line {}'.format(
692
+ self.gds_elementtree_node_.sourceline)
693
+ else:
694
+ return ""
695
+
696
+
697
+ def getSubclassFromModule_(module, class_):
698
+ '''Get the subclass of a class from a specific module.'''
699
+ name = class_.__name__ + 'Sub'
700
+ if hasattr(module, name):
701
+ return getattr(module, name)
702
+ else:
703
+ return None
704
+
705
+
706
+ #
707
+ # If you have installed IPython you can uncomment and use the following.
708
+ # IPython is available from http://ipython.scipy.org/.
709
+ #
710
+
711
+ ## from IPython.Shell import IPShellEmbed
712
+ ## args = ''
713
+ ## ipshell = IPShellEmbed(args,
714
+ ## banner = 'Dropping into IPython',
715
+ ## exit_msg = 'Leaving Interpreter, back to program.')
716
+
717
+ # Then use the following line where and when you want to drop into the
718
+ # IPython shell:
719
+ # ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')
720
+
721
+ #
722
+ # Globals
723
+ #
724
+
725
+ ExternalEncoding = ''
726
+ # Set this to false in order to deactivate during export, the use of
727
+ # name space prefixes captured from the input document.
728
+ UseCapturedNS_ = True
729
+ CapturedNsmap_ = {}
730
+ Tag_pattern_ = re_.compile(r'({.*})?(.*)')
731
+ String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
732
+ Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
733
+ CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL)
734
+
735
+ # Change this to redirect the generated superclass module to use a
736
+ # specific subclass module.
737
+ CurrentSubclassModule_ = None
738
+
739
+ #
740
+ # Support/utility functions.
741
+ #
742
+
743
+
744
+ def showIndent(outfile, level, pretty_print=True):
745
+ if pretty_print:
746
+ for idx in range(level):
747
+ outfile.write(' ')
748
+
749
+
750
+ def quote_xml(inStr):
751
+ "Escape markup chars, but do not modify CDATA sections."
752
+ if not inStr:
753
+ return ''
754
+ s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr)
755
+ s2 = ''
756
+ pos = 0
757
+ matchobjects = CDATA_pattern_.finditer(s1)
758
+ for mo in matchobjects:
759
+ s3 = s1[pos:mo.start()]
760
+ s2 += quote_xml_aux(s3)
761
+ s2 += s1[mo.start():mo.end()]
762
+ pos = mo.end()
763
+ s3 = s1[pos:]
764
+ s2 += quote_xml_aux(s3)
765
+ return s2
766
+
767
+
768
+ def quote_xml_aux(inStr):
769
+ s1 = inStr.replace('&', '&amp;')
770
+ s1 = s1.replace('<', '&lt;')
771
+ s1 = s1.replace('>', '&gt;')
772
+ return s1
773
+
774
+
775
+ def quote_attrib(inStr):
776
+ s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr)
777
+ s1 = s1.replace('&', '&amp;')
778
+ s1 = s1.replace('<', '&lt;')
779
+ s1 = s1.replace('>', '&gt;')
780
+ s1 = s1.replace('\n', '&#10;')
781
+ if '"' in s1:
782
+ if "'" in s1:
783
+ s1 = '"%s"' % s1.replace('"', "&quot;")
784
+ else:
785
+ s1 = "'%s'" % s1
786
+ else:
787
+ s1 = '"%s"' % s1
788
+ return s1
789
+
790
+
791
+ def quote_python(inStr):
792
+ s1 = inStr
793
+ if s1.find("'") == -1:
794
+ if s1.find('\n') == -1:
795
+ return "'%s'" % s1
796
+ else:
797
+ return "'''%s'''" % s1
798
+ else:
799
+ if s1.find('"') != -1:
800
+ s1 = s1.replace('"', '\\"')
801
+ if s1.find('\n') == -1:
802
+ return '"%s"' % s1
803
+ else:
804
+ return '"""%s"""' % s1
805
+
806
+
807
+ def get_all_text_(node):
808
+ if node.text is not None:
809
+ text = node.text
810
+ else:
811
+ text = ''
812
+ for child in node:
813
+ if child.tail is not None:
814
+ text += child.tail
815
+ return text
816
+
817
+
818
+ def find_attr_value_(attr_name, node):
819
+ attrs = node.attrib
820
+ attr_parts = attr_name.split(':')
821
+ value = None
822
+ if len(attr_parts) == 1:
823
+ value = attrs.get(attr_name)
824
+ elif len(attr_parts) == 2:
825
+ prefix, name = attr_parts
826
+ if prefix == 'xml':
827
+ namespace = 'http://www.w3.org/XML/1998/namespace'
828
+ else:
829
+ namespace = node.nsmap.get(prefix)
830
+ if namespace is not None:
831
+ value = attrs.get('{%s}%s' % (namespace, name, ))
832
+ return value
833
+
834
+
835
+ def encode_str_2_3(instr):
836
+ return instr
837
+
838
+
839
+ class GDSParseError(Exception):
840
+ pass
841
+
842
+
843
+ def raise_parse_error(node, msg):
844
+ if node is not None:
845
+ msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
846
+ raise GDSParseError(msg)
847
+
848
+
849
+ class MixedContainer:
850
+ # Constants for category:
851
+ CategoryNone = 0
852
+ CategoryText = 1
853
+ CategorySimple = 2
854
+ CategoryComplex = 3
855
+ # Constants for content_type:
856
+ TypeNone = 0
857
+ TypeText = 1
858
+ TypeString = 2
859
+ TypeInteger = 3
860
+ TypeFloat = 4
861
+ TypeDecimal = 5
862
+ TypeDouble = 6
863
+ TypeBoolean = 7
864
+ TypeBase64 = 8
865
+ def __init__(self, category, content_type, name, value):
866
+ self.category = category
867
+ self.content_type = content_type
868
+ self.name = name
869
+ self.value = value
870
+ def getCategory(self):
871
+ return self.category
872
+ def getContenttype(self, content_type):
873
+ return self.content_type
874
+ def getValue(self):
875
+ return self.value
876
+ def getName(self):
877
+ return self.name
878
+ def export(self, outfile, level, name, namespace,
879
+ pretty_print=True):
880
+ if self.category == MixedContainer.CategoryText:
881
+ # Prevent exporting empty content as empty lines.
882
+ if self.value.strip():
883
+ outfile.write(self.value)
884
+ elif self.category == MixedContainer.CategorySimple:
885
+ self.exportSimple(outfile, level, name)
886
+ else: # category == MixedContainer.CategoryComplex
887
+ self.value.export(
888
+ outfile, level, namespace, name_=name,
889
+ pretty_print=pretty_print)
890
+ def exportSimple(self, outfile, level, name):
891
+ if self.content_type == MixedContainer.TypeString:
892
+ outfile.write('<%s>%s</%s>' % (
893
+ self.name, self.value, self.name))
894
+ elif self.content_type == MixedContainer.TypeInteger or \
895
+ self.content_type == MixedContainer.TypeBoolean:
896
+ outfile.write('<%s>%d</%s>' % (
897
+ self.name, self.value, self.name))
898
+ elif self.content_type == MixedContainer.TypeFloat or \
899
+ self.content_type == MixedContainer.TypeDecimal:
900
+ outfile.write('<%s>%f</%s>' % (
901
+ self.name, self.value, self.name))
902
+ elif self.content_type == MixedContainer.TypeDouble:
903
+ outfile.write('<%s>%g</%s>' % (
904
+ self.name, self.value, self.name))
905
+ elif self.content_type == MixedContainer.TypeBase64:
906
+ outfile.write('<%s>%s</%s>' % (
907
+ self.name,
908
+ base64.b64encode(self.value),
909
+ self.name))
910
+ def to_etree(self, element, mapping_=None, reverse_mapping_=None, nsmap_=None):
911
+ if self.category == MixedContainer.CategoryText:
912
+ # Prevent exporting empty content as empty lines.
913
+ if self.value.strip():
914
+ if len(element) > 0:
915
+ if element[-1].tail is None:
916
+ element[-1].tail = self.value
917
+ else:
918
+ element[-1].tail += self.value
919
+ else:
920
+ if element.text is None:
921
+ element.text = self.value
922
+ else:
923
+ element.text += self.value
924
+ elif self.category == MixedContainer.CategorySimple:
925
+ subelement = etree_.SubElement(
926
+ element, '%s' % self.name)
927
+ subelement.text = self.to_etree_simple()
928
+ else: # category == MixedContainer.CategoryComplex
929
+ self.value.to_etree(element)
930
+ def to_etree_simple(self, mapping_=None, reverse_mapping_=None, nsmap_=None):
931
+ if self.content_type == MixedContainer.TypeString:
932
+ text = self.value
933
+ elif (self.content_type == MixedContainer.TypeInteger or
934
+ self.content_type == MixedContainer.TypeBoolean):
935
+ text = '%d' % self.value
936
+ elif (self.content_type == MixedContainer.TypeFloat or
937
+ self.content_type == MixedContainer.TypeDecimal):
938
+ text = '%f' % self.value
939
+ elif self.content_type == MixedContainer.TypeDouble:
940
+ text = '%g' % self.value
941
+ elif self.content_type == MixedContainer.TypeBase64:
942
+ text = '%s' % base64.b64encode(self.value)
943
+ return text
944
+ def exportLiteral(self, outfile, level, name):
945
+ if self.category == MixedContainer.CategoryText:
946
+ showIndent(outfile, level)
947
+ outfile.write(
948
+ 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
949
+ self.category, self.content_type,
950
+ self.name, self.value))
951
+ elif self.category == MixedContainer.CategorySimple:
952
+ showIndent(outfile, level)
953
+ outfile.write(
954
+ 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
955
+ self.category, self.content_type,
956
+ self.name, self.value))
957
+ else: # category == MixedContainer.CategoryComplex
958
+ showIndent(outfile, level)
959
+ outfile.write(
960
+ 'model_.MixedContainer(%d, %d, "%s",\n' % (
961
+ self.category, self.content_type, self.name,))
962
+ self.value.exportLiteral(outfile, level + 1)
963
+ showIndent(outfile, level)
964
+ outfile.write(')\n')
965
+
966
+
967
+ class MemberSpec_(object):
968
+ def __init__(self, name='', data_type='', container=0,
969
+ optional=0, child_attrs=None, choice=None):
970
+ self.name = name
971
+ self.data_type = data_type
972
+ self.container = container
973
+ self.child_attrs = child_attrs
974
+ self.choice = choice
975
+ self.optional = optional
976
+ def set_name(self, name): self.name = name
977
+ def get_name(self): return self.name
978
+ def set_data_type(self, data_type): self.data_type = data_type
979
+ def get_data_type_chain(self): return self.data_type
980
+ def get_data_type(self):
981
+ if isinstance(self.data_type, list):
982
+ if len(self.data_type) > 0:
983
+ return self.data_type[-1]
984
+ else:
985
+ return 'xs:string'
986
+ else:
987
+ return self.data_type
988
+ def set_container(self, container): self.container = container
989
+ def get_container(self): return self.container
990
+ def set_child_attrs(self, child_attrs): self.child_attrs = child_attrs
991
+ def get_child_attrs(self): return self.child_attrs
992
+ def set_choice(self, choice): self.choice = choice
993
+ def get_choice(self): return self.choice
994
+ def set_optional(self, optional): self.optional = optional
995
+ def get_optional(self): return self.optional
996
+
997
+
998
+ def _cast(typ, value):
999
+ if typ is None or value is None:
1000
+ return value
1001
+ return typ(value)
1002
+
1003
+
1004
+ #
1005
+ # Start enum classes
1006
+ #
1007
+ class dayType(str, Enum):
1008
+ _1='1'
1009
+ _2='2'
1010
+ _3='3'
1011
+ _4='4'
1012
+ _5='5'
1013
+ _6='6'
1014
+ _7='7'
1015
+
1016
+
1017
+ #
1018
+ # Start data representation classes
1019
+ #
1020
+ class post_office_list(GeneratedsSuper):
1021
+ __hash__ = GeneratedsSuper.__hash__
1022
+ subclass = None
1023
+ superclass = None
1024
+ def __init__(self, post_office=None, gds_collector_=None, **kwargs_):
1025
+ self.gds_collector_ = gds_collector_
1026
+ self.gds_elementtree_node_ = None
1027
+ self.original_tagname_ = None
1028
+ self.parent_object_ = kwargs_.get('parent_object_')
1029
+ self.ns_prefix_ = None
1030
+ if post_office is None:
1031
+ self.post_office = []
1032
+ else:
1033
+ self.post_office = post_office
1034
+ self.post_office_nsprefix_ = None
1035
+ def factory(*args_, **kwargs_):
1036
+ if CurrentSubclassModule_ is not None:
1037
+ subclass = getSubclassFromModule_(
1038
+ CurrentSubclassModule_, post_office_list)
1039
+ if subclass is not None:
1040
+ return subclass(*args_, **kwargs_)
1041
+ if post_office_list.subclass:
1042
+ return post_office_list.subclass(*args_, **kwargs_)
1043
+ else:
1044
+ return post_office_list(*args_, **kwargs_)
1045
+ factory = staticmethod(factory)
1046
+ def get_ns_prefix_(self):
1047
+ return self.ns_prefix_
1048
+ def set_ns_prefix_(self, ns_prefix):
1049
+ self.ns_prefix_ = ns_prefix
1050
+ def get_post_office(self):
1051
+ return self.post_office
1052
+ def set_post_office(self, post_office):
1053
+ self.post_office = post_office
1054
+ def add_post_office(self, value):
1055
+ self.post_office.append(value)
1056
+ def insert_post_office_at(self, index, value):
1057
+ self.post_office.insert(index, value)
1058
+ def replace_post_office_at(self, index, value):
1059
+ self.post_office[index] = value
1060
+ def has__content(self):
1061
+ if (
1062
+ self.post_office
1063
+ ):
1064
+ return True
1065
+ else:
1066
+ return False
1067
+ def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='post-office-list', pretty_print=True):
1068
+ imported_ns_def_ = GenerateDSNamespaceDefs_.get('post-office-list')
1069
+ if imported_ns_def_ is not None:
1070
+ namespacedef_ = imported_ns_def_
1071
+ if pretty_print:
1072
+ eol_ = '\n'
1073
+ else:
1074
+ eol_ = ''
1075
+ if self.original_tagname_ is not None and name_ == 'post-office-list':
1076
+ name_ = self.original_tagname_
1077
+ if UseCapturedNS_ and self.ns_prefix_:
1078
+ namespaceprefix_ = self.ns_prefix_ + ':'
1079
+ showIndent(outfile, level, pretty_print)
1080
+ outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1081
+ already_processed = set()
1082
+ self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='post-office-list')
1083
+ if self.has__content():
1084
+ outfile.write('>%s' % (eol_, ))
1085
+ self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='post-office-list', pretty_print=pretty_print)
1086
+ showIndent(outfile, level, pretty_print)
1087
+ outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
1088
+ else:
1089
+ outfile.write('/>%s' % (eol_, ))
1090
+ def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='post-office-list'):
1091
+ pass
1092
+ def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='post-office-list', fromsubclass_=False, pretty_print=True):
1093
+ if pretty_print:
1094
+ eol_ = '\n'
1095
+ else:
1096
+ eol_ = ''
1097
+ for post_office_ in self.post_office:
1098
+ namespaceprefix_ = self.post_office_nsprefix_ + ':' if (UseCapturedNS_ and self.post_office_nsprefix_) else ''
1099
+ post_office_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='post-office', pretty_print=pretty_print)
1100
+ def build(self, node, gds_collector_=None):
1101
+ self.gds_collector_ = gds_collector_
1102
+ if SaveElementTreeNode:
1103
+ self.gds_elementtree_node_ = node
1104
+ already_processed = set()
1105
+ self.ns_prefix_ = node.prefix
1106
+ self._buildAttributes(node, node.attrib, already_processed)
1107
+ for child in node:
1108
+ nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1109
+ self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
1110
+ return self
1111
+ def _buildAttributes(self, node, attrs, already_processed):
1112
+ pass
1113
+ def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
1114
+ if nodeName_ == 'post-office':
1115
+ obj_ = post_officeType.factory(parent_object_=self)
1116
+ obj_.build(child_, gds_collector_=gds_collector_)
1117
+ self.post_office.append(obj_)
1118
+ obj_.original_tagname_ = 'post-office'
1119
+ # end class post_office_list
1120
+
1121
+
1122
+ class PostOfficeAddressType(GeneratedsSuper):
1123
+ __hash__ = GeneratedsSuper.__hash__
1124
+ subclass = None
1125
+ superclass = None
1126
+ def __init__(self, city=None, latitude=None, longitude=None, postal_code=None, province=None, office_address=None, gds_collector_=None, **kwargs_):
1127
+ self.gds_collector_ = gds_collector_
1128
+ self.gds_elementtree_node_ = None
1129
+ self.original_tagname_ = None
1130
+ self.parent_object_ = kwargs_.get('parent_object_')
1131
+ self.ns_prefix_ = None
1132
+ self.city = city
1133
+ self.validate_cityType(self.city)
1134
+ self.city_nsprefix_ = None
1135
+ self.latitude = latitude
1136
+ self.validate_latitudeType(self.latitude)
1137
+ self.latitude_nsprefix_ = None
1138
+ self.longitude = longitude
1139
+ self.validate_longitudeType(self.longitude)
1140
+ self.longitude_nsprefix_ = None
1141
+ self.postal_code = postal_code
1142
+ self.postal_code_nsprefix_ = None
1143
+ self.province = province
1144
+ self.province_nsprefix_ = None
1145
+ self.office_address = office_address
1146
+ self.validate_office_addressType(self.office_address)
1147
+ self.office_address_nsprefix_ = None
1148
+ def factory(*args_, **kwargs_):
1149
+ if CurrentSubclassModule_ is not None:
1150
+ subclass = getSubclassFromModule_(
1151
+ CurrentSubclassModule_, PostOfficeAddressType)
1152
+ if subclass is not None:
1153
+ return subclass(*args_, **kwargs_)
1154
+ if PostOfficeAddressType.subclass:
1155
+ return PostOfficeAddressType.subclass(*args_, **kwargs_)
1156
+ else:
1157
+ return PostOfficeAddressType(*args_, **kwargs_)
1158
+ factory = staticmethod(factory)
1159
+ def get_ns_prefix_(self):
1160
+ return self.ns_prefix_
1161
+ def set_ns_prefix_(self, ns_prefix):
1162
+ self.ns_prefix_ = ns_prefix
1163
+ def get_city(self):
1164
+ return self.city
1165
+ def set_city(self, city):
1166
+ self.city = city
1167
+ def get_latitude(self):
1168
+ return self.latitude
1169
+ def set_latitude(self, latitude):
1170
+ self.latitude = latitude
1171
+ def get_longitude(self):
1172
+ return self.longitude
1173
+ def set_longitude(self, longitude):
1174
+ self.longitude = longitude
1175
+ def get_postal_code(self):
1176
+ return self.postal_code
1177
+ def set_postal_code(self, postal_code):
1178
+ self.postal_code = postal_code
1179
+ def get_province(self):
1180
+ return self.province
1181
+ def set_province(self, province):
1182
+ self.province = province
1183
+ def get_office_address(self):
1184
+ return self.office_address
1185
+ def set_office_address(self, office_address):
1186
+ self.office_address = office_address
1187
+ def validate_cityType(self, value):
1188
+ result = True
1189
+ # Validate type cityType, a restriction on xsd:normalizedString.
1190
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1191
+ if not isinstance(value, str):
1192
+ lineno = self.gds_get_node_lineno_()
1193
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1194
+ return False
1195
+ if len(value) > 40:
1196
+ lineno = self.gds_get_node_lineno_()
1197
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxLength restriction on cityType' % {"value": value, "lineno": lineno} )
1198
+ result = False
1199
+ if len(value) < 1:
1200
+ lineno = self.gds_get_node_lineno_()
1201
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd minLength restriction on cityType' % {"value" : value, "lineno": lineno} )
1202
+ result = False
1203
+ return result
1204
+ def validate_latitudeType(self, value):
1205
+ result = True
1206
+ # Validate type latitudeType, a restriction on xsd:decimal.
1207
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1208
+ if not isinstance(value, decimal_.Decimal):
1209
+ lineno = self.gds_get_node_lineno_()
1210
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (decimal_.Decimal)' % {"value": value, "lineno": lineno, })
1211
+ return False
1212
+ if value < 40:
1213
+ lineno = self.gds_get_node_lineno_()
1214
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd minInclusive restriction on latitudeType' % {"value": value, "lineno": lineno} )
1215
+ result = False
1216
+ if value > 90:
1217
+ lineno = self.gds_get_node_lineno_()
1218
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxInclusive restriction on latitudeType' % {"value": value, "lineno": lineno} )
1219
+ result = False
1220
+ return result
1221
+ def validate_longitudeType(self, value):
1222
+ result = True
1223
+ # Validate type longitudeType, a restriction on xsd:decimal.
1224
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1225
+ if not isinstance(value, decimal_.Decimal):
1226
+ lineno = self.gds_get_node_lineno_()
1227
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (decimal_.Decimal)' % {"value": value, "lineno": lineno, })
1228
+ return False
1229
+ if value < -150:
1230
+ lineno = self.gds_get_node_lineno_()
1231
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd minInclusive restriction on longitudeType' % {"value": value, "lineno": lineno} )
1232
+ result = False
1233
+ if value > -50:
1234
+ lineno = self.gds_get_node_lineno_()
1235
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxInclusive restriction on longitudeType' % {"value": value, "lineno": lineno} )
1236
+ result = False
1237
+ return result
1238
+ def validate_office_addressType(self, value):
1239
+ result = True
1240
+ # Validate type office-addressType, a restriction on xsd:normalizedString.
1241
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1242
+ if not isinstance(value, str):
1243
+ lineno = self.gds_get_node_lineno_()
1244
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1245
+ return False
1246
+ if len(value) > 64:
1247
+ lineno = self.gds_get_node_lineno_()
1248
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxLength restriction on office-addressType' % {"value": value, "lineno": lineno} )
1249
+ result = False
1250
+ if len(value) < 1:
1251
+ lineno = self.gds_get_node_lineno_()
1252
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd minLength restriction on office-addressType' % {"value" : value, "lineno": lineno} )
1253
+ result = False
1254
+ return result
1255
+ def has__content(self):
1256
+ if (
1257
+ self.city is not None or
1258
+ self.latitude is not None or
1259
+ self.longitude is not None or
1260
+ self.postal_code is not None or
1261
+ self.province is not None or
1262
+ self.office_address is not None
1263
+ ):
1264
+ return True
1265
+ else:
1266
+ return False
1267
+ def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='PostOfficeAddressType', pretty_print=True):
1268
+ imported_ns_def_ = GenerateDSNamespaceDefs_.get('PostOfficeAddressType')
1269
+ if imported_ns_def_ is not None:
1270
+ namespacedef_ = imported_ns_def_
1271
+ if pretty_print:
1272
+ eol_ = '\n'
1273
+ else:
1274
+ eol_ = ''
1275
+ if self.original_tagname_ is not None and name_ == 'PostOfficeAddressType':
1276
+ name_ = self.original_tagname_
1277
+ if UseCapturedNS_ and self.ns_prefix_:
1278
+ namespaceprefix_ = self.ns_prefix_ + ':'
1279
+ showIndent(outfile, level, pretty_print)
1280
+ outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1281
+ already_processed = set()
1282
+ self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='PostOfficeAddressType')
1283
+ if self.has__content():
1284
+ outfile.write('>%s' % (eol_, ))
1285
+ self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='PostOfficeAddressType', pretty_print=pretty_print)
1286
+ showIndent(outfile, level, pretty_print)
1287
+ outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
1288
+ else:
1289
+ outfile.write('/>%s' % (eol_, ))
1290
+ def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='PostOfficeAddressType'):
1291
+ pass
1292
+ def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='PostOfficeAddressType', fromsubclass_=False, pretty_print=True):
1293
+ if pretty_print:
1294
+ eol_ = '\n'
1295
+ else:
1296
+ eol_ = ''
1297
+ if self.city is not None:
1298
+ namespaceprefix_ = self.city_nsprefix_ + ':' if (UseCapturedNS_ and self.city_nsprefix_) else ''
1299
+ showIndent(outfile, level, pretty_print)
1300
+ outfile.write('<%scity>%s</%scity>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.city), input_name='city')), namespaceprefix_ , eol_))
1301
+ if self.latitude is not None:
1302
+ namespaceprefix_ = self.latitude_nsprefix_ + ':' if (UseCapturedNS_ and self.latitude_nsprefix_) else ''
1303
+ showIndent(outfile, level, pretty_print)
1304
+ outfile.write('<%slatitude>%s</%slatitude>%s' % (namespaceprefix_ , self.gds_format_decimal(self.latitude, input_name='latitude'), namespaceprefix_ , eol_))
1305
+ if self.longitude is not None:
1306
+ namespaceprefix_ = self.longitude_nsprefix_ + ':' if (UseCapturedNS_ and self.longitude_nsprefix_) else ''
1307
+ showIndent(outfile, level, pretty_print)
1308
+ outfile.write('<%slongitude>%s</%slongitude>%s' % (namespaceprefix_ , self.gds_format_decimal(self.longitude, input_name='longitude'), namespaceprefix_ , eol_))
1309
+ if self.postal_code is not None:
1310
+ namespaceprefix_ = self.postal_code_nsprefix_ + ':' if (UseCapturedNS_ and self.postal_code_nsprefix_) else ''
1311
+ showIndent(outfile, level, pretty_print)
1312
+ outfile.write('<%spostal-code>%s</%spostal-code>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.postal_code), input_name='postal-code')), namespaceprefix_ , eol_))
1313
+ if self.province is not None:
1314
+ namespaceprefix_ = self.province_nsprefix_ + ':' if (UseCapturedNS_ and self.province_nsprefix_) else ''
1315
+ showIndent(outfile, level, pretty_print)
1316
+ outfile.write('<%sprovince>%s</%sprovince>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.province), input_name='province')), namespaceprefix_ , eol_))
1317
+ if self.office_address is not None:
1318
+ namespaceprefix_ = self.office_address_nsprefix_ + ':' if (UseCapturedNS_ and self.office_address_nsprefix_) else ''
1319
+ showIndent(outfile, level, pretty_print)
1320
+ outfile.write('<%soffice-address>%s</%soffice-address>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.office_address), input_name='office-address')), namespaceprefix_ , eol_))
1321
+ def build(self, node, gds_collector_=None):
1322
+ self.gds_collector_ = gds_collector_
1323
+ if SaveElementTreeNode:
1324
+ self.gds_elementtree_node_ = node
1325
+ already_processed = set()
1326
+ self.ns_prefix_ = node.prefix
1327
+ self._buildAttributes(node, node.attrib, already_processed)
1328
+ for child in node:
1329
+ nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1330
+ self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
1331
+ return self
1332
+ def _buildAttributes(self, node, attrs, already_processed):
1333
+ pass
1334
+ def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
1335
+ if nodeName_ == 'city':
1336
+ value_ = child_.text
1337
+ value_ = self.gds_parse_string(value_, node, 'city')
1338
+ value_ = self.gds_validate_string(value_, node, 'city')
1339
+ self.city = value_
1340
+ self.city_nsprefix_ = child_.prefix
1341
+ # validate type cityType
1342
+ self.validate_cityType(self.city)
1343
+ elif nodeName_ == 'latitude' and child_.text:
1344
+ sval_ = child_.text
1345
+ fval_ = self.gds_parse_decimal(sval_, node, 'latitude')
1346
+ fval_ = self.gds_validate_decimal(fval_, node, 'latitude')
1347
+ self.latitude = fval_
1348
+ self.latitude_nsprefix_ = child_.prefix
1349
+ # validate type latitudeType
1350
+ self.validate_latitudeType(self.latitude)
1351
+ elif nodeName_ == 'longitude' and child_.text:
1352
+ sval_ = child_.text
1353
+ fval_ = self.gds_parse_decimal(sval_, node, 'longitude')
1354
+ fval_ = self.gds_validate_decimal(fval_, node, 'longitude')
1355
+ self.longitude = fval_
1356
+ self.longitude_nsprefix_ = child_.prefix
1357
+ # validate type longitudeType
1358
+ self.validate_longitudeType(self.longitude)
1359
+ elif nodeName_ == 'postal-code':
1360
+ value_ = child_.text
1361
+ value_ = self.gds_parse_string(value_, node, 'postal_code')
1362
+ value_ = self.gds_validate_string(value_, node, 'postal_code')
1363
+ self.postal_code = value_
1364
+ self.postal_code_nsprefix_ = child_.prefix
1365
+ elif nodeName_ == 'province':
1366
+ value_ = child_.text
1367
+ value_ = self.gds_parse_string(value_, node, 'province')
1368
+ value_ = self.gds_validate_string(value_, node, 'province')
1369
+ self.province = value_
1370
+ self.province_nsprefix_ = child_.prefix
1371
+ elif nodeName_ == 'office-address':
1372
+ value_ = child_.text
1373
+ value_ = self.gds_parse_string(value_, node, 'office_address')
1374
+ value_ = self.gds_validate_string(value_, node, 'office_address')
1375
+ self.office_address = value_
1376
+ self.office_address_nsprefix_ = child_.prefix
1377
+ # validate type office-addressType
1378
+ self.validate_office_addressType(self.office_address)
1379
+ # end class PostOfficeAddressType
1380
+
1381
+
1382
+ class post_office_detail(GeneratedsSuper):
1383
+ __hash__ = GeneratedsSuper.__hash__
1384
+ subclass = None
1385
+ superclass = None
1386
+ def __init__(self, address=None, location=None, name=None, office_id=None, bilingual_designation=None, hours_list=None, gds_collector_=None, **kwargs_):
1387
+ self.gds_collector_ = gds_collector_
1388
+ self.gds_elementtree_node_ = None
1389
+ self.original_tagname_ = None
1390
+ self.parent_object_ = kwargs_.get('parent_object_')
1391
+ self.ns_prefix_ = None
1392
+ self.address = address
1393
+ self.address_nsprefix_ = None
1394
+ self.location = location
1395
+ self.validate_LocationType(self.location)
1396
+ self.location_nsprefix_ = None
1397
+ self.name = name
1398
+ self.validate_NameType(self.name)
1399
+ self.name_nsprefix_ = None
1400
+ self.office_id = office_id
1401
+ self.validate_OfficeIdType(self.office_id)
1402
+ self.office_id_nsprefix_ = None
1403
+ self.bilingual_designation = bilingual_designation
1404
+ self.bilingual_designation_nsprefix_ = None
1405
+ if hours_list is None:
1406
+ self.hours_list = []
1407
+ else:
1408
+ self.hours_list = hours_list
1409
+ self.hours_list_nsprefix_ = None
1410
+ def factory(*args_, **kwargs_):
1411
+ if CurrentSubclassModule_ is not None:
1412
+ subclass = getSubclassFromModule_(
1413
+ CurrentSubclassModule_, post_office_detail)
1414
+ if subclass is not None:
1415
+ return subclass(*args_, **kwargs_)
1416
+ if post_office_detail.subclass:
1417
+ return post_office_detail.subclass(*args_, **kwargs_)
1418
+ else:
1419
+ return post_office_detail(*args_, **kwargs_)
1420
+ factory = staticmethod(factory)
1421
+ def get_ns_prefix_(self):
1422
+ return self.ns_prefix_
1423
+ def set_ns_prefix_(self, ns_prefix):
1424
+ self.ns_prefix_ = ns_prefix
1425
+ def get_address(self):
1426
+ return self.address
1427
+ def set_address(self, address):
1428
+ self.address = address
1429
+ def get_location(self):
1430
+ return self.location
1431
+ def set_location(self, location):
1432
+ self.location = location
1433
+ def get_name(self):
1434
+ return self.name
1435
+ def set_name(self, name):
1436
+ self.name = name
1437
+ def get_office_id(self):
1438
+ return self.office_id
1439
+ def set_office_id(self, office_id):
1440
+ self.office_id = office_id
1441
+ def get_bilingual_designation(self):
1442
+ return self.bilingual_designation
1443
+ def set_bilingual_designation(self, bilingual_designation):
1444
+ self.bilingual_designation = bilingual_designation
1445
+ def get_hours_list(self):
1446
+ return self.hours_list
1447
+ def set_hours_list(self, hours_list):
1448
+ self.hours_list = hours_list
1449
+ def add_hours_list(self, value):
1450
+ self.hours_list.append(value)
1451
+ def insert_hours_list_at(self, index, value):
1452
+ self.hours_list.insert(index, value)
1453
+ def replace_hours_list_at(self, index, value):
1454
+ self.hours_list[index] = value
1455
+ def validate_LocationType(self, value):
1456
+ result = True
1457
+ # Validate type LocationType, a restriction on xsd:normalizedString.
1458
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1459
+ if not isinstance(value, str):
1460
+ lineno = self.gds_get_node_lineno_()
1461
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1462
+ return False
1463
+ if len(value) > 40:
1464
+ lineno = self.gds_get_node_lineno_()
1465
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxLength restriction on LocationType' % {"value": value, "lineno": lineno} )
1466
+ result = False
1467
+ return result
1468
+ def validate_NameType(self, value):
1469
+ result = True
1470
+ # Validate type NameType, a restriction on xsd:normalizedString.
1471
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1472
+ if not isinstance(value, str):
1473
+ lineno = self.gds_get_node_lineno_()
1474
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1475
+ return False
1476
+ if len(value) > 40:
1477
+ lineno = self.gds_get_node_lineno_()
1478
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxLength restriction on NameType' % {"value": value, "lineno": lineno} )
1479
+ result = False
1480
+ return result
1481
+ def validate_OfficeIdType(self, value):
1482
+ result = True
1483
+ # Validate type OfficeIdType, a restriction on xsd:normalizedString.
1484
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1485
+ if not isinstance(value, str):
1486
+ lineno = self.gds_get_node_lineno_()
1487
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1488
+ return False
1489
+ if not self.gds_validate_simple_patterns(
1490
+ self.validate_OfficeIdType_patterns_, value):
1491
+ self.gds_collector_.add_message('Value "%s" does not match xsd pattern restrictions: %s' % (encode_str_2_3(value), self.validate_OfficeIdType_patterns_, ))
1492
+ result = False
1493
+ return result
1494
+ validate_OfficeIdType_patterns_ = [['^(\\d{10})$']]
1495
+ def has__content(self):
1496
+ if (
1497
+ self.address is not None or
1498
+ self.location is not None or
1499
+ self.name is not None or
1500
+ self.office_id is not None or
1501
+ self.bilingual_designation is not None or
1502
+ self.hours_list
1503
+ ):
1504
+ return True
1505
+ else:
1506
+ return False
1507
+ def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='post-office-detail', pretty_print=True):
1508
+ imported_ns_def_ = GenerateDSNamespaceDefs_.get('post-office-detail')
1509
+ if imported_ns_def_ is not None:
1510
+ namespacedef_ = imported_ns_def_
1511
+ if pretty_print:
1512
+ eol_ = '\n'
1513
+ else:
1514
+ eol_ = ''
1515
+ if self.original_tagname_ is not None and name_ == 'post-office-detail':
1516
+ name_ = self.original_tagname_
1517
+ if UseCapturedNS_ and self.ns_prefix_:
1518
+ namespaceprefix_ = self.ns_prefix_ + ':'
1519
+ showIndent(outfile, level, pretty_print)
1520
+ outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1521
+ already_processed = set()
1522
+ self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='post-office-detail')
1523
+ if self.has__content():
1524
+ outfile.write('>%s' % (eol_, ))
1525
+ self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='post-office-detail', pretty_print=pretty_print)
1526
+ showIndent(outfile, level, pretty_print)
1527
+ outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
1528
+ else:
1529
+ outfile.write('/>%s' % (eol_, ))
1530
+ def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='post-office-detail'):
1531
+ pass
1532
+ def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='post-office-detail', fromsubclass_=False, pretty_print=True):
1533
+ if pretty_print:
1534
+ eol_ = '\n'
1535
+ else:
1536
+ eol_ = ''
1537
+ if self.address is not None:
1538
+ namespaceprefix_ = self.address_nsprefix_ + ':' if (UseCapturedNS_ and self.address_nsprefix_) else ''
1539
+ self.address.export(outfile, level, namespaceprefix_, namespacedef_='', name_='address', pretty_print=pretty_print)
1540
+ if self.location is not None:
1541
+ namespaceprefix_ = self.location_nsprefix_ + ':' if (UseCapturedNS_ and self.location_nsprefix_) else ''
1542
+ showIndent(outfile, level, pretty_print)
1543
+ outfile.write('<%slocation>%s</%slocation>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.location), input_name='location')), namespaceprefix_ , eol_))
1544
+ if self.name is not None:
1545
+ namespaceprefix_ = self.name_nsprefix_ + ':' if (UseCapturedNS_ and self.name_nsprefix_) else ''
1546
+ showIndent(outfile, level, pretty_print)
1547
+ outfile.write('<%sname>%s</%sname>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.name), input_name='name')), namespaceprefix_ , eol_))
1548
+ if self.office_id is not None:
1549
+ namespaceprefix_ = self.office_id_nsprefix_ + ':' if (UseCapturedNS_ and self.office_id_nsprefix_) else ''
1550
+ showIndent(outfile, level, pretty_print)
1551
+ outfile.write('<%soffice-id>%s</%soffice-id>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.office_id), input_name='office-id')), namespaceprefix_ , eol_))
1552
+ if self.bilingual_designation is not None:
1553
+ namespaceprefix_ = self.bilingual_designation_nsprefix_ + ':' if (UseCapturedNS_ and self.bilingual_designation_nsprefix_) else ''
1554
+ showIndent(outfile, level, pretty_print)
1555
+ outfile.write('<%sbilingual-designation>%s</%sbilingual-designation>%s' % (namespaceprefix_ , self.gds_format_boolean(self.bilingual_designation, input_name='bilingual-designation'), namespaceprefix_ , eol_))
1556
+ for hours_list_ in self.hours_list:
1557
+ namespaceprefix_ = self.hours_list_nsprefix_ + ':' if (UseCapturedNS_ and self.hours_list_nsprefix_) else ''
1558
+ hours_list_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='hours-list', pretty_print=pretty_print)
1559
+ def build(self, node, gds_collector_=None):
1560
+ self.gds_collector_ = gds_collector_
1561
+ if SaveElementTreeNode:
1562
+ self.gds_elementtree_node_ = node
1563
+ already_processed = set()
1564
+ self.ns_prefix_ = node.prefix
1565
+ self._buildAttributes(node, node.attrib, already_processed)
1566
+ for child in node:
1567
+ nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1568
+ self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
1569
+ return self
1570
+ def _buildAttributes(self, node, attrs, already_processed):
1571
+ pass
1572
+ def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
1573
+ if nodeName_ == 'address':
1574
+ obj_ = PostOfficeAddressType.factory(parent_object_=self)
1575
+ obj_.build(child_, gds_collector_=gds_collector_)
1576
+ self.address = obj_
1577
+ obj_.original_tagname_ = 'address'
1578
+ elif nodeName_ == 'location':
1579
+ value_ = child_.text
1580
+ value_ = self.gds_parse_string(value_, node, 'location')
1581
+ value_ = self.gds_validate_string(value_, node, 'location')
1582
+ self.location = value_
1583
+ self.location_nsprefix_ = child_.prefix
1584
+ # validate type LocationType
1585
+ self.validate_LocationType(self.location)
1586
+ elif nodeName_ == 'name':
1587
+ value_ = child_.text
1588
+ value_ = self.gds_parse_string(value_, node, 'name')
1589
+ value_ = self.gds_validate_string(value_, node, 'name')
1590
+ self.name = value_
1591
+ self.name_nsprefix_ = child_.prefix
1592
+ # validate type NameType
1593
+ self.validate_NameType(self.name)
1594
+ elif nodeName_ == 'office-id':
1595
+ value_ = child_.text
1596
+ value_ = self.gds_parse_string(value_, node, 'office_id')
1597
+ value_ = self.gds_validate_string(value_, node, 'office_id')
1598
+ self.office_id = value_
1599
+ self.office_id_nsprefix_ = child_.prefix
1600
+ # validate type OfficeIdType
1601
+ self.validate_OfficeIdType(self.office_id)
1602
+ elif nodeName_ == 'bilingual-designation':
1603
+ sval_ = child_.text
1604
+ ival_ = self.gds_parse_boolean(sval_, node, 'bilingual_designation')
1605
+ ival_ = self.gds_validate_boolean(ival_, node, 'bilingual_designation')
1606
+ self.bilingual_designation = ival_
1607
+ self.bilingual_designation_nsprefix_ = child_.prefix
1608
+ elif nodeName_ == 'hours-list':
1609
+ obj_ = hours_listType.factory(parent_object_=self)
1610
+ obj_.build(child_, gds_collector_=gds_collector_)
1611
+ self.hours_list.append(obj_)
1612
+ obj_.original_tagname_ = 'hours-list'
1613
+ # end class post_office_detail
1614
+
1615
+
1616
+ class post_officeType(GeneratedsSuper):
1617
+ __hash__ = GeneratedsSuper.__hash__
1618
+ subclass = None
1619
+ superclass = None
1620
+ def __init__(self, address=None, distance=None, location=None, name=None, office_id=None, bilingual_designation=None, link=None, gds_collector_=None, **kwargs_):
1621
+ self.gds_collector_ = gds_collector_
1622
+ self.gds_elementtree_node_ = None
1623
+ self.original_tagname_ = None
1624
+ self.parent_object_ = kwargs_.get('parent_object_')
1625
+ self.ns_prefix_ = None
1626
+ self.address = address
1627
+ self.address_nsprefix_ = None
1628
+ self.distance = distance
1629
+ self.validate_distanceType(self.distance)
1630
+ self.distance_nsprefix_ = None
1631
+ self.location = location
1632
+ self.validate_LocationType(self.location)
1633
+ self.location_nsprefix_ = None
1634
+ self.name = name
1635
+ self.validate_NameType(self.name)
1636
+ self.name_nsprefix_ = None
1637
+ self.office_id = office_id
1638
+ self.validate_OfficeIdType(self.office_id)
1639
+ self.office_id_nsprefix_ = None
1640
+ self.bilingual_designation = bilingual_designation
1641
+ self.bilingual_designation_nsprefix_ = None
1642
+ self.link = link
1643
+ self.link_nsprefix_ = None
1644
+ def factory(*args_, **kwargs_):
1645
+ if CurrentSubclassModule_ is not None:
1646
+ subclass = getSubclassFromModule_(
1647
+ CurrentSubclassModule_, post_officeType)
1648
+ if subclass is not None:
1649
+ return subclass(*args_, **kwargs_)
1650
+ if post_officeType.subclass:
1651
+ return post_officeType.subclass(*args_, **kwargs_)
1652
+ else:
1653
+ return post_officeType(*args_, **kwargs_)
1654
+ factory = staticmethod(factory)
1655
+ def get_ns_prefix_(self):
1656
+ return self.ns_prefix_
1657
+ def set_ns_prefix_(self, ns_prefix):
1658
+ self.ns_prefix_ = ns_prefix
1659
+ def get_address(self):
1660
+ return self.address
1661
+ def set_address(self, address):
1662
+ self.address = address
1663
+ def get_distance(self):
1664
+ return self.distance
1665
+ def set_distance(self, distance):
1666
+ self.distance = distance
1667
+ def get_location(self):
1668
+ return self.location
1669
+ def set_location(self, location):
1670
+ self.location = location
1671
+ def get_name(self):
1672
+ return self.name
1673
+ def set_name(self, name):
1674
+ self.name = name
1675
+ def get_office_id(self):
1676
+ return self.office_id
1677
+ def set_office_id(self, office_id):
1678
+ self.office_id = office_id
1679
+ def get_bilingual_designation(self):
1680
+ return self.bilingual_designation
1681
+ def set_bilingual_designation(self, bilingual_designation):
1682
+ self.bilingual_designation = bilingual_designation
1683
+ def get_link(self):
1684
+ return self.link
1685
+ def set_link(self, link):
1686
+ self.link = link
1687
+ def validate_distanceType(self, value):
1688
+ result = True
1689
+ # Validate type distanceType, a restriction on xsd:decimal.
1690
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1691
+ if not isinstance(value, decimal_.Decimal):
1692
+ lineno = self.gds_get_node_lineno_()
1693
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (decimal_.Decimal)' % {"value": value, "lineno": lineno, })
1694
+ return False
1695
+ if value < 0:
1696
+ lineno = self.gds_get_node_lineno_()
1697
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd minInclusive restriction on distanceType' % {"value": value, "lineno": lineno} )
1698
+ result = False
1699
+ if value > 99999.99:
1700
+ lineno = self.gds_get_node_lineno_()
1701
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxInclusive restriction on distanceType' % {"value": value, "lineno": lineno} )
1702
+ result = False
1703
+ return result
1704
+ def validate_LocationType(self, value):
1705
+ result = True
1706
+ # Validate type LocationType, a restriction on xsd:normalizedString.
1707
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1708
+ if not isinstance(value, str):
1709
+ lineno = self.gds_get_node_lineno_()
1710
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1711
+ return False
1712
+ if len(value) > 40:
1713
+ lineno = self.gds_get_node_lineno_()
1714
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxLength restriction on LocationType' % {"value": value, "lineno": lineno} )
1715
+ result = False
1716
+ return result
1717
+ def validate_NameType(self, value):
1718
+ result = True
1719
+ # Validate type NameType, a restriction on xsd:normalizedString.
1720
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1721
+ if not isinstance(value, str):
1722
+ lineno = self.gds_get_node_lineno_()
1723
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1724
+ return False
1725
+ if len(value) > 40:
1726
+ lineno = self.gds_get_node_lineno_()
1727
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd maxLength restriction on NameType' % {"value": value, "lineno": lineno} )
1728
+ result = False
1729
+ return result
1730
+ def validate_OfficeIdType(self, value):
1731
+ result = True
1732
+ # Validate type OfficeIdType, a restriction on xsd:normalizedString.
1733
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1734
+ if not isinstance(value, str):
1735
+ lineno = self.gds_get_node_lineno_()
1736
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1737
+ return False
1738
+ if not self.gds_validate_simple_patterns(
1739
+ self.validate_OfficeIdType_patterns_, value):
1740
+ self.gds_collector_.add_message('Value "%s" does not match xsd pattern restrictions: %s' % (encode_str_2_3(value), self.validate_OfficeIdType_patterns_, ))
1741
+ result = False
1742
+ return result
1743
+ validate_OfficeIdType_patterns_ = [['^(\\d{10})$']]
1744
+ def has__content(self):
1745
+ if (
1746
+ self.address is not None or
1747
+ self.distance is not None or
1748
+ self.location is not None or
1749
+ self.name is not None or
1750
+ self.office_id is not None or
1751
+ self.bilingual_designation is not None or
1752
+ self.link is not None
1753
+ ):
1754
+ return True
1755
+ else:
1756
+ return False
1757
+ def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='post-officeType', pretty_print=True):
1758
+ imported_ns_def_ = GenerateDSNamespaceDefs_.get('post-officeType')
1759
+ if imported_ns_def_ is not None:
1760
+ namespacedef_ = imported_ns_def_
1761
+ if pretty_print:
1762
+ eol_ = '\n'
1763
+ else:
1764
+ eol_ = ''
1765
+ if self.original_tagname_ is not None and name_ == 'post-officeType':
1766
+ name_ = self.original_tagname_
1767
+ if UseCapturedNS_ and self.ns_prefix_:
1768
+ namespaceprefix_ = self.ns_prefix_ + ':'
1769
+ showIndent(outfile, level, pretty_print)
1770
+ outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1771
+ already_processed = set()
1772
+ self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='post-officeType')
1773
+ if self.has__content():
1774
+ outfile.write('>%s' % (eol_, ))
1775
+ self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='post-officeType', pretty_print=pretty_print)
1776
+ showIndent(outfile, level, pretty_print)
1777
+ outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
1778
+ else:
1779
+ outfile.write('/>%s' % (eol_, ))
1780
+ def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='post-officeType'):
1781
+ pass
1782
+ def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='post-officeType', fromsubclass_=False, pretty_print=True):
1783
+ if pretty_print:
1784
+ eol_ = '\n'
1785
+ else:
1786
+ eol_ = ''
1787
+ if self.address is not None:
1788
+ namespaceprefix_ = self.address_nsprefix_ + ':' if (UseCapturedNS_ and self.address_nsprefix_) else ''
1789
+ self.address.export(outfile, level, namespaceprefix_, namespacedef_='', name_='address', pretty_print=pretty_print)
1790
+ if self.distance is not None:
1791
+ namespaceprefix_ = self.distance_nsprefix_ + ':' if (UseCapturedNS_ and self.distance_nsprefix_) else ''
1792
+ showIndent(outfile, level, pretty_print)
1793
+ outfile.write('<%sdistance>%s</%sdistance>%s' % (namespaceprefix_ , self.gds_format_decimal(self.distance, input_name='distance'), namespaceprefix_ , eol_))
1794
+ if self.location is not None:
1795
+ namespaceprefix_ = self.location_nsprefix_ + ':' if (UseCapturedNS_ and self.location_nsprefix_) else ''
1796
+ showIndent(outfile, level, pretty_print)
1797
+ outfile.write('<%slocation>%s</%slocation>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.location), input_name='location')), namespaceprefix_ , eol_))
1798
+ if self.name is not None:
1799
+ namespaceprefix_ = self.name_nsprefix_ + ':' if (UseCapturedNS_ and self.name_nsprefix_) else ''
1800
+ showIndent(outfile, level, pretty_print)
1801
+ outfile.write('<%sname>%s</%sname>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.name), input_name='name')), namespaceprefix_ , eol_))
1802
+ if self.office_id is not None:
1803
+ namespaceprefix_ = self.office_id_nsprefix_ + ':' if (UseCapturedNS_ and self.office_id_nsprefix_) else ''
1804
+ showIndent(outfile, level, pretty_print)
1805
+ outfile.write('<%soffice-id>%s</%soffice-id>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.office_id), input_name='office-id')), namespaceprefix_ , eol_))
1806
+ if self.bilingual_designation is not None:
1807
+ namespaceprefix_ = self.bilingual_designation_nsprefix_ + ':' if (UseCapturedNS_ and self.bilingual_designation_nsprefix_) else ''
1808
+ showIndent(outfile, level, pretty_print)
1809
+ outfile.write('<%sbilingual-designation>%s</%sbilingual-designation>%s' % (namespaceprefix_ , self.gds_format_boolean(self.bilingual_designation, input_name='bilingual-designation'), namespaceprefix_ , eol_))
1810
+ if self.link is not None:
1811
+ namespaceprefix_ = self.link_nsprefix_ + ':' if (UseCapturedNS_ and self.link_nsprefix_) else ''
1812
+ showIndent(outfile, level, pretty_print)
1813
+ outfile.write('<%slink>%s</%slink>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.link), input_name='link')), namespaceprefix_ , eol_))
1814
+ def build(self, node, gds_collector_=None):
1815
+ self.gds_collector_ = gds_collector_
1816
+ if SaveElementTreeNode:
1817
+ self.gds_elementtree_node_ = node
1818
+ already_processed = set()
1819
+ self.ns_prefix_ = node.prefix
1820
+ self._buildAttributes(node, node.attrib, already_processed)
1821
+ for child in node:
1822
+ nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1823
+ self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
1824
+ return self
1825
+ def _buildAttributes(self, node, attrs, already_processed):
1826
+ pass
1827
+ def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
1828
+ if nodeName_ == 'address':
1829
+ obj_ = PostOfficeAddressType.factory(parent_object_=self)
1830
+ obj_.build(child_, gds_collector_=gds_collector_)
1831
+ self.address = obj_
1832
+ obj_.original_tagname_ = 'address'
1833
+ elif nodeName_ == 'distance' and child_.text:
1834
+ sval_ = child_.text
1835
+ fval_ = self.gds_parse_decimal(sval_, node, 'distance')
1836
+ fval_ = self.gds_validate_decimal(fval_, node, 'distance')
1837
+ self.distance = fval_
1838
+ self.distance_nsprefix_ = child_.prefix
1839
+ # validate type distanceType
1840
+ self.validate_distanceType(self.distance)
1841
+ elif nodeName_ == 'location':
1842
+ value_ = child_.text
1843
+ value_ = self.gds_parse_string(value_, node, 'location')
1844
+ value_ = self.gds_validate_string(value_, node, 'location')
1845
+ self.location = value_
1846
+ self.location_nsprefix_ = child_.prefix
1847
+ # validate type LocationType
1848
+ self.validate_LocationType(self.location)
1849
+ elif nodeName_ == 'name':
1850
+ value_ = child_.text
1851
+ value_ = self.gds_parse_string(value_, node, 'name')
1852
+ value_ = self.gds_validate_string(value_, node, 'name')
1853
+ self.name = value_
1854
+ self.name_nsprefix_ = child_.prefix
1855
+ # validate type NameType
1856
+ self.validate_NameType(self.name)
1857
+ elif nodeName_ == 'office-id':
1858
+ value_ = child_.text
1859
+ value_ = self.gds_parse_string(value_, node, 'office_id')
1860
+ value_ = self.gds_validate_string(value_, node, 'office_id')
1861
+ self.office_id = value_
1862
+ self.office_id_nsprefix_ = child_.prefix
1863
+ # validate type OfficeIdType
1864
+ self.validate_OfficeIdType(self.office_id)
1865
+ elif nodeName_ == 'bilingual-designation':
1866
+ sval_ = child_.text
1867
+ ival_ = self.gds_parse_boolean(sval_, node, 'bilingual_designation')
1868
+ ival_ = self.gds_validate_boolean(ival_, node, 'bilingual_designation')
1869
+ self.bilingual_designation = ival_
1870
+ self.bilingual_designation_nsprefix_ = child_.prefix
1871
+ elif nodeName_ == 'link':
1872
+ value_ = child_.text
1873
+ value_ = self.gds_parse_string(value_, node, 'link')
1874
+ value_ = self.gds_validate_string(value_, node, 'link')
1875
+ self.link = value_
1876
+ self.link_nsprefix_ = child_.prefix
1877
+ # end class post_officeType
1878
+
1879
+
1880
+ class hours_listType(GeneratedsSuper):
1881
+ __hash__ = GeneratedsSuper.__hash__
1882
+ subclass = None
1883
+ superclass = None
1884
+ def __init__(self, day=None, time=None, gds_collector_=None, **kwargs_):
1885
+ self.gds_collector_ = gds_collector_
1886
+ self.gds_elementtree_node_ = None
1887
+ self.original_tagname_ = None
1888
+ self.parent_object_ = kwargs_.get('parent_object_')
1889
+ self.ns_prefix_ = None
1890
+ self.day = day
1891
+ self.validate_dayType(self.day)
1892
+ self.day_nsprefix_ = None
1893
+ if time is None:
1894
+ self.time = []
1895
+ else:
1896
+ self.time = time
1897
+ self.time_nsprefix_ = None
1898
+ def factory(*args_, **kwargs_):
1899
+ if CurrentSubclassModule_ is not None:
1900
+ subclass = getSubclassFromModule_(
1901
+ CurrentSubclassModule_, hours_listType)
1902
+ if subclass is not None:
1903
+ return subclass(*args_, **kwargs_)
1904
+ if hours_listType.subclass:
1905
+ return hours_listType.subclass(*args_, **kwargs_)
1906
+ else:
1907
+ return hours_listType(*args_, **kwargs_)
1908
+ factory = staticmethod(factory)
1909
+ def get_ns_prefix_(self):
1910
+ return self.ns_prefix_
1911
+ def set_ns_prefix_(self, ns_prefix):
1912
+ self.ns_prefix_ = ns_prefix
1913
+ def get_day(self):
1914
+ return self.day
1915
+ def set_day(self, day):
1916
+ self.day = day
1917
+ def get_time(self):
1918
+ return self.time
1919
+ def set_time(self, time):
1920
+ self.time = time
1921
+ def add_time(self, value):
1922
+ self.time.append(value)
1923
+ def insert_time_at(self, index, value):
1924
+ self.time.insert(index, value)
1925
+ def replace_time_at(self, index, value):
1926
+ self.time[index] = value
1927
+ def validate_dayType(self, value):
1928
+ result = True
1929
+ # Validate type dayType, a restriction on xsd:normalizedString.
1930
+ if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
1931
+ if not isinstance(value, str):
1932
+ lineno = self.gds_get_node_lineno_()
1933
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
1934
+ return False
1935
+ value = value
1936
+ enumerations = ['1', '2', '3', '4', '5', '6', '7']
1937
+ if value not in enumerations:
1938
+ lineno = self.gds_get_node_lineno_()
1939
+ self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on dayType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
1940
+ result = False
1941
+ return result
1942
+ def has__content(self):
1943
+ if (
1944
+ self.day is not None or
1945
+ self.time
1946
+ ):
1947
+ return True
1948
+ else:
1949
+ return False
1950
+ def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='hours-listType', pretty_print=True):
1951
+ imported_ns_def_ = GenerateDSNamespaceDefs_.get('hours-listType')
1952
+ if imported_ns_def_ is not None:
1953
+ namespacedef_ = imported_ns_def_
1954
+ if pretty_print:
1955
+ eol_ = '\n'
1956
+ else:
1957
+ eol_ = ''
1958
+ if self.original_tagname_ is not None and name_ == 'hours-listType':
1959
+ name_ = self.original_tagname_
1960
+ if UseCapturedNS_ and self.ns_prefix_:
1961
+ namespaceprefix_ = self.ns_prefix_ + ':'
1962
+ showIndent(outfile, level, pretty_print)
1963
+ outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1964
+ already_processed = set()
1965
+ self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='hours-listType')
1966
+ if self.has__content():
1967
+ outfile.write('>%s' % (eol_, ))
1968
+ self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='hours-listType', pretty_print=pretty_print)
1969
+ showIndent(outfile, level, pretty_print)
1970
+ outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
1971
+ else:
1972
+ outfile.write('/>%s' % (eol_, ))
1973
+ def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='hours-listType'):
1974
+ pass
1975
+ def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='hours-listType', fromsubclass_=False, pretty_print=True):
1976
+ if pretty_print:
1977
+ eol_ = '\n'
1978
+ else:
1979
+ eol_ = ''
1980
+ if self.day is not None:
1981
+ namespaceprefix_ = self.day_nsprefix_ + ':' if (UseCapturedNS_ and self.day_nsprefix_) else ''
1982
+ showIndent(outfile, level, pretty_print)
1983
+ outfile.write('<%sday>%s</%sday>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.day), input_name='day')), namespaceprefix_ , eol_))
1984
+ for time_ in self.time:
1985
+ namespaceprefix_ = self.time_nsprefix_ + ':' if (UseCapturedNS_ and self.time_nsprefix_) else ''
1986
+ showIndent(outfile, level, pretty_print)
1987
+ outfile.write('<%stime>%s</%stime>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(time_), input_name='time')), namespaceprefix_ , eol_))
1988
+ def build(self, node, gds_collector_=None):
1989
+ self.gds_collector_ = gds_collector_
1990
+ if SaveElementTreeNode:
1991
+ self.gds_elementtree_node_ = node
1992
+ already_processed = set()
1993
+ self.ns_prefix_ = node.prefix
1994
+ self._buildAttributes(node, node.attrib, already_processed)
1995
+ for child in node:
1996
+ nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1997
+ self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
1998
+ return self
1999
+ def _buildAttributes(self, node, attrs, already_processed):
2000
+ pass
2001
+ def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
2002
+ if nodeName_ == 'day':
2003
+ value_ = child_.text
2004
+ value_ = self.gds_parse_string(value_, node, 'day')
2005
+ value_ = self.gds_validate_string(value_, node, 'day')
2006
+ self.day = value_
2007
+ self.day_nsprefix_ = child_.prefix
2008
+ # validate type dayType
2009
+ self.validate_dayType(self.day)
2010
+ elif nodeName_ == 'time':
2011
+ value_ = child_.text
2012
+ value_ = self.gds_parse_string(value_, node, 'time')
2013
+ value_ = self.gds_validate_string(value_, node, 'time')
2014
+ self.time.append(value_)
2015
+ self.time_nsprefix_ = child_.prefix
2016
+ # end class hours_listType
2017
+
2018
+
2019
+ #
2020
+ # End data representation classes.
2021
+ #
2022
+
2023
+
2024
+ GDSClassesMapping = {
2025
+ }
2026
+
2027
+
2028
+ USAGE_TEXT = """
2029
+ Usage: python <Parser>.py [ -s ] <in_xml_file>
2030
+ """
2031
+
2032
+
2033
+ def usage():
2034
+ print(USAGE_TEXT)
2035
+ sys.exit(1)
2036
+
2037
+
2038
+ def get_root_tag(node):
2039
+ tag = Tag_pattern_.match(node.tag).groups()[-1]
2040
+ prefix_tag = TagNamePrefix + tag
2041
+ rootClass = GDSClassesMapping.get(prefix_tag)
2042
+ if rootClass is None:
2043
+ rootClass = globals().get(prefix_tag)
2044
+ return tag, rootClass
2045
+
2046
+
2047
+ def get_required_ns_prefix_defs(rootNode):
2048
+ '''Get all name space prefix definitions required in this XML doc.
2049
+ Return a dictionary of definitions and a char string of definitions.
2050
+ '''
2051
+ nsmap = {
2052
+ prefix: uri
2053
+ for node in rootNode.iter()
2054
+ for (prefix, uri) in node.nsmap.items()
2055
+ if prefix is not None
2056
+ }
2057
+ namespacedefs = ' '.join([
2058
+ 'xmlns:{}="{}"'.format(prefix, uri)
2059
+ for prefix, uri in nsmap.items()
2060
+ ])
2061
+ return nsmap, namespacedefs
2062
+
2063
+
2064
+ def parse(inFileName, silence=False, print_warnings=True):
2065
+ global CapturedNsmap_
2066
+ gds_collector = GdsCollector_()
2067
+ parser = None
2068
+ doc = parsexml_(inFileName, parser)
2069
+ rootNode = doc.getroot()
2070
+ rootTag, rootClass = get_root_tag(rootNode)
2071
+ if rootClass is None:
2072
+ rootTag = 'post_office_list'
2073
+ rootClass = post_office_list
2074
+ rootObj = rootClass.factory()
2075
+ rootObj.build(rootNode, gds_collector_=gds_collector)
2076
+ CapturedNsmap_, namespacedefs = get_required_ns_prefix_defs(rootNode)
2077
+ if not SaveElementTreeNode:
2078
+ doc = None
2079
+ rootNode = None
2080
+ if not silence:
2081
+ sys.stdout.write('<?xml version="1.0" ?>\n')
2082
+ rootObj.export(
2083
+ sys.stdout, 0, name_=rootTag,
2084
+ namespacedef_=namespacedefs,
2085
+ pretty_print=True)
2086
+ if print_warnings and len(gds_collector.get_messages()) > 0:
2087
+ separator = ('-' * 50) + '\n'
2088
+ sys.stderr.write(separator)
2089
+ sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
2090
+ len(gds_collector.get_messages()), ))
2091
+ gds_collector.write_messages(sys.stderr)
2092
+ sys.stderr.write(separator)
2093
+ return rootObj
2094
+
2095
+
2096
+ def parseEtree(inFileName, silence=False, print_warnings=True,
2097
+ mapping=None, reverse_mapping=None, nsmap=None):
2098
+ parser = None
2099
+ doc = parsexml_(inFileName, parser)
2100
+ gds_collector = GdsCollector_()
2101
+ rootNode = doc.getroot()
2102
+ rootTag, rootClass = get_root_tag(rootNode)
2103
+ if rootClass is None:
2104
+ rootTag = 'post_office_list'
2105
+ rootClass = post_office_list
2106
+ rootObj = rootClass.factory()
2107
+ rootObj.build(rootNode, gds_collector_=gds_collector)
2108
+ if mapping is None:
2109
+ mapping = {}
2110
+ if reverse_mapping is None:
2111
+ reverse_mapping = {}
2112
+ rootElement = rootObj.to_etree(
2113
+ None, name_=rootTag, mapping_=mapping,
2114
+ reverse_mapping_=reverse_mapping, nsmap_=nsmap)
2115
+ reverse_node_mapping = rootObj.gds_reverse_node_mapping(mapping)
2116
+ # Enable Python to collect the space used by the DOM.
2117
+ if not SaveElementTreeNode:
2118
+ doc = None
2119
+ rootNode = None
2120
+ if not silence:
2121
+ content = etree_.tostring(
2122
+ rootElement, pretty_print=True,
2123
+ xml_declaration=True, encoding="utf-8")
2124
+ sys.stdout.write(str(content))
2125
+ sys.stdout.write('\n')
2126
+ if print_warnings and len(gds_collector.get_messages()) > 0:
2127
+ separator = ('-' * 50) + '\n'
2128
+ sys.stderr.write(separator)
2129
+ sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
2130
+ len(gds_collector.get_messages()), ))
2131
+ gds_collector.write_messages(sys.stderr)
2132
+ sys.stderr.write(separator)
2133
+ return rootObj, rootElement, mapping, reverse_node_mapping
2134
+
2135
+
2136
+ def parseString(inString, silence=False, print_warnings=True):
2137
+ '''Parse a string, create the object tree, and export it.
2138
+
2139
+ Arguments:
2140
+ - inString -- A string. This XML fragment should not start
2141
+ with an XML declaration containing an encoding.
2142
+ - silence -- A boolean. If False, export the object.
2143
+ Returns -- The root object in the tree.
2144
+ '''
2145
+ parser = None
2146
+ rootNode= parsexmlstring_(inString, parser)
2147
+ gds_collector = GdsCollector_()
2148
+ rootTag, rootClass = get_root_tag(rootNode)
2149
+ if rootClass is None:
2150
+ rootTag = 'post_office_list'
2151
+ rootClass = post_office_list
2152
+ rootObj = rootClass.factory()
2153
+ rootObj.build(rootNode, gds_collector_=gds_collector)
2154
+ if not SaveElementTreeNode:
2155
+ rootNode = None
2156
+ if not silence:
2157
+ sys.stdout.write('<?xml version="1.0" ?>\n')
2158
+ rootObj.export(
2159
+ sys.stdout, 0, name_=rootTag,
2160
+ namespacedef_='')
2161
+ if print_warnings and len(gds_collector.get_messages()) > 0:
2162
+ separator = ('-' * 50) + '\n'
2163
+ sys.stderr.write(separator)
2164
+ sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
2165
+ len(gds_collector.get_messages()), ))
2166
+ gds_collector.write_messages(sys.stderr)
2167
+ sys.stderr.write(separator)
2168
+ return rootObj
2169
+
2170
+
2171
+ def parseLiteral(inFileName, silence=False, print_warnings=True):
2172
+ parser = None
2173
+ doc = parsexml_(inFileName, parser)
2174
+ gds_collector = GdsCollector_()
2175
+ rootNode = doc.getroot()
2176
+ rootTag, rootClass = get_root_tag(rootNode)
2177
+ if rootClass is None:
2178
+ rootTag = 'post_office_list'
2179
+ rootClass = post_office_list
2180
+ rootObj = rootClass.factory()
2181
+ rootObj.build(rootNode, gds_collector_=gds_collector)
2182
+ # Enable Python to collect the space used by the DOM.
2183
+ if not SaveElementTreeNode:
2184
+ doc = None
2185
+ rootNode = None
2186
+ if not silence:
2187
+ sys.stdout.write('#from postoffice import *\n\n')
2188
+ sys.stdout.write('import postoffice as model_\n\n')
2189
+ sys.stdout.write('rootObj = model_.rootClass(\n')
2190
+ rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
2191
+ sys.stdout.write(')\n')
2192
+ if print_warnings and len(gds_collector.get_messages()) > 0:
2193
+ separator = ('-' * 50) + '\n'
2194
+ sys.stderr.write(separator)
2195
+ sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
2196
+ len(gds_collector.get_messages()), ))
2197
+ gds_collector.write_messages(sys.stderr)
2198
+ sys.stderr.write(separator)
2199
+ return rootObj
2200
+
2201
+
2202
+ def main():
2203
+ args = sys.argv[1:]
2204
+ if len(args) == 1:
2205
+ parse(args[0])
2206
+ else:
2207
+ usage()
2208
+
2209
+
2210
+ if __name__ == '__main__':
2211
+ #import pdb; pdb.set_trace()
2212
+ main()
2213
+
2214
+ RenameMappings_ = {
2215
+ }
2216
+
2217
+ #
2218
+ # Mapping of namespaces to types defined in them
2219
+ # and the file in which each is defined.
2220
+ # simpleTypes are marked "ST" and complexTypes "CT".
2221
+ NamespaceToDefMappings_ = {'http://www.canadapost.ca/ws/postoffice': [('LocationType',
2222
+ './schemas/postoffice.xsd',
2223
+ 'ST'),
2224
+ ('NameType',
2225
+ './schemas/postoffice.xsd',
2226
+ 'ST'),
2227
+ ('OfficeIdType',
2228
+ './schemas/postoffice.xsd',
2229
+ 'ST'),
2230
+ ('PostOfficeAddressType',
2231
+ './schemas/postoffice.xsd',
2232
+ 'CT')]}
2233
+
2234
+ __all__ = [
2235
+ "PostOfficeAddressType",
2236
+ "hours_listType",
2237
+ "post_officeType",
2238
+ "post_office_detail",
2239
+ "post_office_list"
2240
+ ]