wipo-gbd-transformation 1.1.49__py3-none-any.whl → 1.1.50__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.

Potentially problematic release.


This version of wipo-gbd-transformation might be problematic. Click here for more details.

Files changed (81) hide show
  1. gbdtransformation/brands/sgtm/filters.py +1 -1
  2. gbdtransformation/designs/__init__.py +2 -3
  3. gbdtransformation/designs/bnid/__init__.py +5 -0
  4. gbdtransformation/designs/bnid/filters.py +49 -0
  5. gbdtransformation/designs/bnid/schema +80 -0
  6. gbdtransformation/designs/bnid/template.yml +1 -0
  7. gbdtransformation/designs/bwid/__init__.py +6 -0
  8. gbdtransformation/designs/bwid/filters.py +52 -0
  9. gbdtransformation/designs/bwid/schema +101 -0
  10. gbdtransformation/designs/bwid/template.yml +1 -0
  11. gbdtransformation/designs/crid/__init__.py +5 -0
  12. gbdtransformation/designs/crid/filters.py +50 -0
  13. gbdtransformation/designs/crid/schema +94 -0
  14. gbdtransformation/designs/crid/template.yml +1 -0
  15. gbdtransformation/designs/cuid/__init__.py +5 -0
  16. gbdtransformation/designs/cuid/filters.py +47 -0
  17. gbdtransformation/designs/cuid/schema +98 -0
  18. gbdtransformation/designs/cuid/template.yml +1 -0
  19. gbdtransformation/designs/egid/__init__.py +5 -0
  20. gbdtransformation/designs/egid/filters.py +49 -0
  21. gbdtransformation/designs/egid/schema +82 -0
  22. gbdtransformation/designs/egid/template.yml +1 -0
  23. gbdtransformation/designs/filters.py +13 -1
  24. gbdtransformation/designs/idid/__init__.py +5 -0
  25. gbdtransformation/designs/idid/filters.py +54 -0
  26. gbdtransformation/designs/idid/schema +102 -0
  27. gbdtransformation/designs/idid/template.yml +1 -0
  28. gbdtransformation/designs/ipas/filters.py +1 -1
  29. gbdtransformation/designs/ipas/template.yml +85 -76
  30. gbdtransformation/designs/joid/__init__.py +6 -0
  31. gbdtransformation/designs/joid/filters.py +49 -0
  32. gbdtransformation/designs/joid/schema +97 -0
  33. gbdtransformation/designs/joid/template.yml +1 -0
  34. gbdtransformation/designs/keid/__init__.py +5 -0
  35. gbdtransformation/designs/keid/filters.py +49 -0
  36. gbdtransformation/designs/keid/schema +99 -0
  37. gbdtransformation/designs/keid/template.yml +1 -0
  38. gbdtransformation/designs/khid/__init__.py +5 -0
  39. gbdtransformation/designs/khid/filters.py +50 -0
  40. gbdtransformation/designs/khid/schema +100 -0
  41. gbdtransformation/designs/khid/template.yml +1 -0
  42. gbdtransformation/designs/laid/__init__.py +5 -0
  43. gbdtransformation/designs/laid/filters.py +49 -0
  44. gbdtransformation/designs/laid/schema +94 -0
  45. gbdtransformation/designs/laid/template.yml +1 -0
  46. gbdtransformation/designs/mnid/__init__.py +6 -0
  47. gbdtransformation/designs/mnid/filters.py +49 -0
  48. gbdtransformation/designs/mnid/schema +98 -0
  49. gbdtransformation/designs/mnid/template.yml +1 -0
  50. gbdtransformation/designs/myid/__init__.py +5 -0
  51. gbdtransformation/designs/myid/filters.py +48 -0
  52. gbdtransformation/designs/myid/schema +95 -0
  53. gbdtransformation/designs/myid/template.yml +1 -0
  54. gbdtransformation/designs/phid/__init__.py +5 -0
  55. gbdtransformation/designs/phid/filters.py +58 -0
  56. gbdtransformation/designs/phid/schema +95 -0
  57. gbdtransformation/designs/phid/template.yml +1 -0
  58. gbdtransformation/designs/sgid/__init__.py +6 -0
  59. gbdtransformation/designs/sgid/filters.py +53 -0
  60. gbdtransformation/designs/sgid/schema +115 -0
  61. gbdtransformation/designs/sgid/template.yml +1 -0
  62. gbdtransformation/designs/thid/__init__.py +4 -0
  63. gbdtransformation/designs/thid/filters.py +52 -0
  64. gbdtransformation/designs/thid/schema +98 -0
  65. gbdtransformation/designs/thid/template.yml +1 -0
  66. gbdtransformation/designs/tnid/__init__.py +5 -0
  67. gbdtransformation/designs/tnid/filters.py +54 -0
  68. gbdtransformation/designs/tnid/schema +96 -0
  69. gbdtransformation/designs/tnid/template.yml +1 -0
  70. gbdtransformation/designs/woid/__init__.py +2 -0
  71. gbdtransformation/designs/woid/filters.py +342 -0
  72. gbdtransformation/designs/woid/schema +592 -0
  73. gbdtransformation/designs/woid/template.yml +342 -0
  74. gbdtransformation/designs/xxid/template.yml +211 -123
  75. gbdtransformation/execs.py +8 -2
  76. {wipo_gbd_transformation-1.1.49.dist-info → wipo_gbd_transformation-1.1.50.dist-info}/METADATA +2 -1
  77. {wipo_gbd_transformation-1.1.49.dist-info → wipo_gbd_transformation-1.1.50.dist-info}/RECORD +81 -13
  78. {wipo_gbd_transformation-1.1.49.dist-info → wipo_gbd_transformation-1.1.50.dist-info}/LICENSE.md +0 -0
  79. {wipo_gbd_transformation-1.1.49.dist-info → wipo_gbd_transformation-1.1.50.dist-info}/WHEEL +0 -0
  80. {wipo_gbd_transformation-1.1.49.dist-info → wipo_gbd_transformation-1.1.50.dist-info}/entry_points.txt +0 -0
  81. {wipo_gbd_transformation-1.1.49.dist-info → wipo_gbd_transformation-1.1.50.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,49 @@
1
+ # standard gbd definitions
2
+ import gbdtransformation.designs.ipas.filters as ipas
3
+
4
+
5
+ # namespaces defined in XML and to be ignored in procecssing
6
+ ignore_namespace = [
7
+ 'http://www.wipo.int/standards/XMLSchema/designs',
8
+ 'http://www.wipo.int/standards/XMLSchema/wo-designs'
9
+ ]
10
+ def get_appdate(appdate, appnum):
11
+ return appdate
12
+
13
+ def get_designs_count(design, header):
14
+ return '1'
15
+
16
+ def get_designs_pos(design, header):
17
+ return '1'
18
+
19
+ def translate_kind(desgin, header):
20
+ code = header.TransactionCode.lower()
21
+ subcode = header.TransactionSubCode.lower()
22
+ if code == 'نموذج صناعي':
23
+ return 'Industrial Design'
24
+ raise Exception('Type "%s" "%s" is not mapped.' % (code, subcode))
25
+
26
+ def translate_status(design):
27
+ status = design.DesignCurrentStatusCode
28
+
29
+ return ipas.translate_status(status)
30
+
31
+
32
+ def get_registration_nb(design, idstatus):
33
+ if design.RegistrationNumber:
34
+ return design.RegistrationNumber
35
+
36
+ return None
37
+
38
+
39
+ def get_expiry_date(design, idstatus):
40
+ return ipas.get_expiry_date(design, idstatus)
41
+
42
+ def get_registration_date(design, idstatus):
43
+ return ipas.get_registration_date(design, idstatus)
44
+
45
+ def is_international(header):
46
+ return False
47
+
48
+ def get_ir_refnum(appnum):
49
+ return appnum
@@ -0,0 +1,82 @@
1
+ /Transaction
2
+ __/DesignTransactionBody
3
+ ____/TransactionContentDetails
4
+ ______/TransactionCode
5
+ ______/TransactionData
6
+ ________/DesignApplicationDetails
7
+ __________/DesignApplication
8
+ ____________/ApplicantDetails
9
+ ______________/ApplicantKey
10
+ ____________/DesignApplicationDate
11
+ ____________/DesignApplicationLanguageCode
12
+ ____________/DesignApplicationNumber
13
+ ____________/DesignDetails
14
+ ______________/Design
15
+ ________________/ApplicantDetails
16
+ __________________/Applicant
17
+ ____________________/ApplicantAddressBook
18
+ ______________________/FormattedNameAddress
19
+ ________________________/Address
20
+ __________________________/AddressCountryCode
21
+ __________________________/FreeFormatAddress
22
+ ____________________________/FreeFormatAddressLine
23
+ ________________________/Name
24
+ __________________________/FreeFormatName
25
+ ____________________________/FreeFormatNameDetails
26
+ ______________________________/FreeFormatNameLine
27
+ ______________________________/FreeFormatNameLine[@languageCode=ar]
28
+ ________________/DesignCurrentStatusCode
29
+ ________________/DesignCurrentStatusDate
30
+ ________________/DesignDescription
31
+ ________________/DesignIdentifier
32
+ ________________/DesignRepresentationSheetDetails
33
+ __________________/DesignRepresentationSheet
34
+ ____________________/RepresentationSheetFilename
35
+ ________________/DesignSpecimenDetails
36
+ __________________/DesignSpecimen
37
+ ____________________/SpecimenDescription
38
+ ____________________/SpecimenDescription[@languageCode=ar]
39
+ ____________________/SpecimenIdentifier
40
+ ________________/DesignTitle
41
+ ________________/DesignTitle[@languageCode=ar]
42
+ ________________/DesignTitle[@languageCode=en]
43
+ ________________/DesignTitle[@sequenceNumber=1]
44
+ ________________/ExpiryDate
45
+ ________________/IndicationProductDetails
46
+ __________________/IndicationProduct
47
+ ____________________/ClassDescriptionDetails
48
+ ______________________/ClassDescription
49
+ ________________________/ClassNumber
50
+ ________________________/ProductDescription
51
+ ____________________/ClassificationKindCode
52
+ ____________________/ClassificationVersion
53
+ ________________/NoveltyStatement
54
+ ________________/NoveltyStatement[@languageCode=ar]
55
+ ________________/NoveltyStatement[@languageCode=en]
56
+ ________________/PriorityDetails
57
+ __________________/Priority
58
+ ____________________/PriorityCountryCode
59
+ ____________________/PriorityDate
60
+ ____________________/PriorityNumber
61
+ ________________/PublicationDetails
62
+ __________________/Publication
63
+ ____________________/PublicationDate
64
+ ____________________/PublicationIdentifier
65
+ ________________/RegistrationDate
66
+ ________________/RegistrationNumber
67
+ ________________/RepresentativeDetails
68
+ __________________/Representative
69
+ ____________________/RepresentativeAddressBook
70
+ ______________________/FormattedNameAddress
71
+ ________________________/Address
72
+ __________________________/AddressCountryCode
73
+ __________________________/FreeFormatAddress
74
+ ____________________________/FreeFormatAddressLine
75
+ ________________________/Name
76
+ __________________________/FreeFormatName
77
+ ____________________________/FreeFormatNameDetails
78
+ ______________________________/FreeFormatNameLine
79
+ ______________________________/FreeFormatNameLine[@languageCode=ar]
80
+ ____________/RegistrationOfficeCode
81
+ ______/TransactionIdentifier
82
+ ______/TransactionSubCode
@@ -0,0 +1 @@
1
+ {% include "ipas/template.yml" %}
@@ -6,6 +6,18 @@ def parseStatus(status):
6
6
  """ Function is here to be overriden in child elements( e.g BRTM)"""
7
7
  return status
8
8
 
9
+ def pad_locarno(data, separator='-'):
10
+ """Convert to locarno style with padding"""
11
+ if separator in data:
12
+ slice = data.split(separator)
13
+ return slice[0].zfill(2) + '-' + pad_locarno('-'.join(slice[1:]))
14
+ return data.zfill(2)
15
+
16
+ def should_display_language(lang, payload):
17
+ if payload:
18
+ return lang
19
+ return None
20
+
9
21
  def st13(appnum, office, pos, type='Design', appdate=None, roffice=None, sanitize=True):
10
22
  if not appnum:
11
23
  return None
@@ -43,7 +55,7 @@ def st13(appnum, office, pos, type='Design', appdate=None, roffice=None, sanitiz
43
55
  appnum = special_chars.sub('', appnum)
44
56
 
45
57
  # reference office (only relevant for inerantional)
46
- if roffice:
58
+ if roffice and roffice != office:
47
59
  appnum = '%s%s' % (roffice.upper(), appnum)
48
60
 
49
61
  st13 = '%s%s' % (office.upper(), prefix)
@@ -0,0 +1,5 @@
1
+ render = 'JSON'
2
+ source = 'national'
3
+
4
+ # AID2018000076
5
+ appnum_mask = ['A(\\d*)', 'AID\\d{4}(\\d*)']
@@ -0,0 +1,54 @@
1
+ # standard gbd definitions
2
+ import gbdtransformation.designs.ipas.filters as ipas
3
+ import re
4
+
5
+ # namespaces defined in XML and to be ignored in procecssing
6
+ ignore_namespace = [
7
+ 'http://www.wipo.int/standards/XMLSchema/designs',
8
+ 'http://www.wipo.int/standards/XMLSchema/wo-designs'
9
+ ]
10
+ def get_appdate(appdate, appnum):
11
+ mask = 'AID(\\d{4})\\d*'
12
+ regex = re.compile('^%s$' % mask)
13
+ matches = regex.search(appnum)
14
+ if matches:
15
+ return ''.join(matches.groups())
16
+ return appdate
17
+
18
+ def get_designs_count(design, header):
19
+ return '1'
20
+
21
+ def get_designs_pos(design, header):
22
+ return '1'
23
+
24
+ def translate_kind(desgin, header):
25
+ code = header.TransactionCode.lower()
26
+ subcode = header.TransactionSubCode.lower()
27
+ if code == 'desain industri':
28
+ return 'Industrial Design'
29
+ raise Exception('Type "%s" "%s" is not mapped.' % (code, subcode))
30
+
31
+ def translate_status(design):
32
+ status = design.DesignCurrentStatusCode
33
+
34
+ return ipas.translate_status(status)
35
+
36
+
37
+ def get_registration_nb(design, idstatus):
38
+ if design.RegistrationNumber:
39
+ return design.RegistrationNumber
40
+
41
+ return None
42
+
43
+
44
+ def get_expiry_date(design, idstatus):
45
+ return ipas.get_expiry_date(design, idstatus)
46
+
47
+ def get_registration_date(design, idstatus):
48
+ return ipas.get_registration_date(design, idstatus)
49
+
50
+ def is_international(header):
51
+ return False
52
+
53
+ def get_ir_refnum(appnum):
54
+ return appnum
@@ -0,0 +1,102 @@
1
+ /Transaction
2
+ __/DesignTransactionBody
3
+ ____/TransactionContentDetails
4
+ ______/TransactionCode
5
+ ______/TransactionData
6
+ ________/DesignApplicationDetails
7
+ __________/DesignApplication
8
+ ____________/ApplicantDetails
9
+ ______________/ApplicantKey
10
+ ____________/DesignApplicationDate
11
+ ____________/DesignApplicationLanguageCode
12
+ ____________/DesignApplicationNumber
13
+ ____________/DesignDetails
14
+ ______________/Design
15
+ ________________/ApplicantDetails
16
+ __________________/Applicant
17
+ ____________________/ApplicantAddressBook
18
+ ______________________/FormattedNameAddress
19
+ ________________________/Address
20
+ __________________________/AddressCountryCode
21
+ __________________________/FreeFormatAddress
22
+ ____________________________/FreeFormatAddressLine
23
+ ________________________/Name
24
+ __________________________/FreeFormatName
25
+ ____________________________/FreeFormatNameDetails
26
+ ______________________________/FreeFormatNameLine
27
+ ______________________________/FreeFormatNameLine[@languageCode=in]
28
+ ________________/DesignCurrentStatusCode
29
+ ________________/DesignCurrentStatusDate
30
+ ________________/DesignDescription
31
+ ________________/DesignEventDetails
32
+ __________________/DesignEvent
33
+ ____________________/DesignEventCode
34
+ ____________________/DesignEventDate
35
+ ____________________/OfficeSpecificDesignEventCode
36
+ ____________________/OfficeSpecificDesignEventDescription
37
+ ____________________/OfficeSpecificDesignEventDescription[@languageCode=in]
38
+ ____________________/OfficeSpecificDesignEventName
39
+ ________________/DesignIdentifier
40
+ ________________/DesignRepresentationSheetDetails
41
+ __________________/DesignRepresentationSheet
42
+ ____________________/RepresentationSheetFilename
43
+ ________________/DesignSpecimenDetails
44
+ __________________/DesignSpecimen
45
+ ____________________/SpecimenDescription
46
+ ____________________/SpecimenDescription[@languageCode=in]
47
+ ____________________/SpecimenIdentifier
48
+ ________________/DesignTitle
49
+ ________________/DesignTitle[@languageCode=in]
50
+ ________________/DesignTitle[@sequenceNumber=1]
51
+ ________________/DesignerDetails
52
+ __________________/Designer
53
+ ____________________/DesignerAddressBook
54
+ ______________________/FormattedNameAddress
55
+ ________________________/Address
56
+ __________________________/AddressCountryCode
57
+ __________________________/FreeFormatAddress
58
+ ____________________________/FreeFormatAddressLine
59
+ ________________________/Name
60
+ __________________________/FreeFormatName
61
+ ____________________________/FreeFormatNameDetails
62
+ ______________________________/FreeFormatNameLine
63
+ ______________________________/FreeFormatNameLine[@languageCode=in]
64
+ ________________/ExpiryDate
65
+ ________________/IndicationProductDetails
66
+ __________________/IndicationProduct
67
+ ____________________/ClassDescriptionDetails
68
+ ______________________/ClassDescription
69
+ ________________________/ClassNumber
70
+ ________________________/ProductDescription
71
+ ____________________/ClassificationKindCode
72
+ ____________________/ClassificationVersion
73
+ ________________/NoveltyStatement
74
+ ________________/NoveltyStatement[@languageCode=]
75
+ ________________/NoveltyStatement[@languageCode=in]
76
+ ________________/PriorityDetails
77
+ __________________/Priority
78
+ ____________________/PriorityCountryCode
79
+ ____________________/PriorityDate
80
+ ____________________/PriorityNumber
81
+ ________________/PublicationDetails
82
+ __________________/Publication
83
+ ____________________/PublicationDate
84
+ ____________________/PublicationIdentifier
85
+ ________________/RegistrationDate
86
+ ________________/RegistrationNumber
87
+ ________________/RepresentativeDetails
88
+ __________________/Representative
89
+ ____________________/RepresentativeAddressBook
90
+ ______________________/FormattedNameAddress
91
+ ________________________/Address
92
+ __________________________/AddressCountryCode
93
+ __________________________/FreeFormatAddress
94
+ ____________________________/FreeFormatAddressLine
95
+ ________________________/Name
96
+ __________________________/FreeFormatName
97
+ ____________________________/FreeFormatNameDetails
98
+ ______________________________/FreeFormatNameLine
99
+ ______________________________/FreeFormatNameLine[@languageCode=in]
100
+ ____________/RegistrationOfficeCode
101
+ ______/TransactionIdentifier
102
+ ______/TransactionSubCode
@@ -0,0 +1 @@
1
+ {% include "ipas/template.yml" %}
@@ -1,4 +1,4 @@
1
- # standard gbd definitions
1
+ # standard gdd definitions
2
2
  from gbdtransformation.designs import kinds as std_kinds
3
3
  from gbdtransformation.designs import status as std_status
4
4
 
@@ -7,30 +7,35 @@
7
7
  {% set design_pos = design | get_designs_pos(header) %}
8
8
  {% set kind = design | translate_kind(header) %}
9
9
  type: 'DESIGN'
10
- subtype: 'Open'
11
- designGrouping: 'Multiple'
10
+ subtype: 'OPEN'
11
+ designGrouping: 'MULTIPLE'
12
12
  designsCount: {{ design_count }}
13
- designPos: {{ design_pos }}
14
13
  kind:
15
14
  - {{kind}}
16
15
  registrationOfficeCode: {{ design.RegistrationOfficeCode }}
17
16
  designatedCountries:
17
+ {% if design.DesignatedCountryDetails %}
18
+ {% call(designations) match('DesignatedCountry', design.DesignatedCountryDetails) %}
19
+ - {{ designations.DesignatedCountryCode }}
20
+ {% endcall %}
21
+ {% else %}
18
22
  - {{ design.RegistrationOfficeCode }}
19
-
23
+ {% endif %}
20
24
  reference:
21
25
  {% if header | is_international %}
22
- office: WO
23
26
  registration:
24
27
  - number: {{ design.DesignApplicationNumber | get_ir_refnum }}
25
- {% endif %}
28
+ office: WO
29
+ {% endif %}
26
30
  {% if not kind == 'Industrial Design' %}
27
- office: {{ design.RegistrationNumber }}
31
+ registration:
32
+ - number: {{ design.RegistrationNumber }}
28
33
  {% endif %}
29
34
 
30
35
  {% set idstatus = design.DesignDetails.Design | translate_status %}
31
36
  {% set appdate = design.DesignApplicationDate | get_appdate(design.DesignApplicationNumber) %}
32
37
 
33
- st13: {{ design.DesignApplicationNumber | st13(design.RegistrationOfficeCode, design_pos, appdate=appdate) }}
38
+ st13: {{ design.DesignApplicationNumber | st13(design.RegistrationOfficeCode, design_pos, appdate=appdate, roffice=design.ReceivingOfficeCode) }}
34
39
 
35
40
  applicationNumber: {{ design.DesignApplicationNumber }}
36
41
  applicationDate: {{ design.DesignApplicationDate }}
@@ -41,20 +46,6 @@ expiryDate: {{ design.DesignDetails.Design | get_expiry_date(idstatus) }}
41
46
 
42
47
  applicationLanguageCode: {{ design.DesignApplicationLanguageCode }}
43
48
 
44
- officeStatus: {{ design.DesignDetails.Design.DesignCurrentStatusCode | parseStatus }}
45
- gbdStatus: {{ idstatus }}
46
- statusDate: {{ design.DesignDetails.Design.DesignCurrentStatusDate }}
47
-
48
- designDescription:
49
- - languageCode: {{ design.DesignDetails.Design.DesignDescription | guess_language(design.DesignApplicationLanguageCode) }}
50
- text: {{ design.DesignDetails.Design.DesignDescription }}
51
-
52
- designImageDetails:
53
- {% call(sheet) match('DesignRepresentationSheetDetails.DesignRepresentationSheet', design.DesignDetails.Design) %}
54
- {% call(img) match('RepresentationSheetFilename',sheet) %}
55
- - name: {{ img }}
56
- {% endcall %}
57
- {% endcall %}
58
49
  applicants:
59
50
  {% call(applicant) match('ApplicantDetails.Applicant', design.DesignDetails.Design) %}
60
51
  {% call(details) match('ApplicantAddressBook.FormattedNameAddress.Name.FreeFormatName', applicant) %}
@@ -101,65 +92,83 @@ representatives:
101
92
  {% endcall %}
102
93
  {% endcall %}
103
94
 
104
- designer:
105
- {% call(designer) match('DesignerDetails.Designer', design.DesignDetails.Design) %}
106
- {% call(details) match('DesignerAddressBook.FormattedNameAddress.Name.FreeFormatName', designer) %}
107
- - identifier: {{ details.DesignerIdentifier }}
108
- fullName:
109
- {% call(nameline) match('FreeFormatNameDetails.FreeFormatNameLine', details) %}
110
- - text: {{ nameline }}
111
- languageCode: {{ nameline.__value | guess_language(nameline._languageCode, design.DesignApplicationLanguageCode) }}
112
- {% endcall %}
113
- {% endcall %}
114
- {% call(address) match('DesignerAddressBook.FormattedNameAddress.Address', designer) %}
115
- fullAddress:
116
- {% call(adrline) match('FreeFormatAddress.FreeFormatAddressLine', address) %}
117
- {% if not adrline == '-' %}
118
- - text: {{ adrline }}
119
- languageCode: {{ adrline | guess_language(adrline._languageCode, design.DesignApplicationLanguageCode) }}
120
- {% endif %}
121
- {% endcall %}
122
- countryCode: {{ address.AddressCountryCode | remove_trailing('-', '.') | remove_numerics }}
95
+ designs:
96
+ - designPos: {{ design_pos }}
97
+ officeStatus: {{ design.DesignDetails.Design.DesignCurrentStatusCode | parseStatus }}
98
+ gbdStatus: {{ idstatus }}
99
+ statusDate: {{ design.DesignDetails.Design.DesignCurrentStatusDate }}
100
+
101
+ productIndication:
102
+ {% call(indic) match('DesignTitle', design.DesignDetails.Design) %}
103
+ - languageCode: {{ indic | guess_language(indic._languageCode, design.DesignApplicationLanguageCode) }}
104
+ text: {{ indic }}
123
105
  {% endcall %}
106
+
107
+ designDescription:
108
+ - languageCode: {{ design.DesignDetails.Design.DesignDescription | guess_language(design.DesignApplicationLanguageCode) }}
109
+ text: {{ design.DesignDetails.Design.DesignDescription }}
110
+
111
+ designImageDetails:
112
+ {% call(sheet) match('DesignRepresentationSheetDetails.DesignRepresentationSheet', design.DesignDetails.Design) %}
113
+ {% call(img) match('RepresentationSheetFilename',sheet) %}
114
+ - name: {{ img }}
124
115
  {% endcall %}
116
+ {% endcall %}
117
+
125
118
 
126
- productIndicationClasses:
127
- {% call(indicationProducts) match('IndicationProductDetails.IndicationProduct', design.DesignDetails.Design) %}
128
- - kind: {{ indicationProducts.ClassificationKindCode | lower }}
129
- version: {{ indicationProducts.ClassificationVersion}}
130
- classes:
131
- {% call(code) match('ClassDescriptionDetails.ClassDescription', indicationProducts) %}
132
- - code: {{ code.ClassNumber }}
133
- description: {{ code.ProductDescription}}
119
+ designer:
120
+ {% call(designer) match('DesignerDetails.Designer', design.DesignDetails.Design) %}
121
+ {% call(details) match('DesignerAddressBook.FormattedNameAddress.Name.FreeFormatName', designer) %}
122
+ - identifier: {{ details.DesignerIdentifier }}
123
+ fullName:
124
+ {% call(nameline) match('FreeFormatNameDetails.FreeFormatNameLine', details) %}
125
+ - text: {{ nameline }}
126
+ languageCode: {{ nameline.__value | guess_language(nameline._languageCode, design.DesignApplicationLanguageCode) }}
127
+ {% endcall %}
128
+ {% endcall %}
129
+ {% call(address) match('DesignerAddressBook.FormattedNameAddress.Address', designer) %}
130
+ fullAddress:
131
+ {% call(adrline) match('FreeFormatAddress.FreeFormatAddressLine', address) %}
132
+ {% if not adrline == '-' %}
133
+ - text: {{ adrline }}
134
+ languageCode: {{ adrline | guess_language(adrline._languageCode, design.DesignApplicationLanguageCode) }}
135
+ {% endif %}
136
+ {% endcall %}
137
+ countryCode: {{ address.AddressCountryCode | remove_trailing('-', '.') | remove_numerics }}
138
+ {% endcall %}
139
+ {% endcall %}
140
+
141
+ productIndicationClasses:
142
+ {% call(indicationProducts) match('IndicationProductDetails.IndicationProduct', design.DesignDetails.Design) %}
143
+ - kind: {{ indicationProducts.ClassificationKindCode | lower }}
144
+ version: {{ indicationProducts.ClassificationVersion}}
145
+ classes:
146
+ {% call(code) match('ClassDescriptionDetails.ClassDescription', indicationProducts) %}
147
+ - code: {{ code.ClassNumber }}
148
+ description: {{ code.ProductDescription}}
149
+ {% endcall %}
134
150
  {% endcall %}
135
- {% endcall %}
136
151
 
137
- productIndication:
138
- {% call(indic) match('DesignTitle', design.DesignDetails.Design) %}
139
- - languageCode: {{ indic | guess_language(indic._languageCode, design.DesignApplicationLanguageCode) }}
140
- text: {{ indic }}
141
- {% endcall %}
142
-
143
- noveltyStatement:
144
- {% call(indic) match('NoveltyStatement', design.DesignDetails.Design) %}
145
- - languageCode: {{ indic | remove_trailing('-', '.') | guess_language(indic._languageCode, design.DesignApplicationLanguageCode) }}
146
- text: {{ indic | remove_trailing('-', '.') }}
147
- {% endcall %}
148
-
149
-
150
- priorities:
151
- {% call(priority) match('PriorityDetails.Priority', design.DesignDetails.Design) %}
152
- - countryCode: {{ priority.PriorityCountryCode }}
153
- number: {{ priority.PriorityNumber }}
154
- date: {{ priority.PriorityDate }}
155
- {% endcall %}
156
-
157
- publications:
158
- {% call(pub) match('PublicationDetails.Publication', design.DesignDetails.Design) %}
159
- - identifier: {{ pub.PublicationIdentifier}}
160
- date: {{ pub.PublicationDate}}
161
- section:
162
- {% endcall %}
152
+
153
+ priorities:
154
+ {% call(priority) match('PriorityDetails.Priority', design.DesignDetails.Design) %}
155
+ - countryCode: {{ priority.PriorityCountryCode }}
156
+ number: {{ priority.PriorityNumber }}
157
+ date: {{ priority.PriorityDate }}
158
+ {% endcall %}
159
+
160
+ noveltyStatement:
161
+ {% call(indic) match('NoveltyStatement', design.DesignDetails.Design) %}
162
+ - languageCode: {{ indic | remove_trailing('-', '.') | guess_language(indic._languageCode, design.DesignApplicationLanguageCode) }}
163
+ text: {{ indic | remove_trailing('-', '.') }}
164
+ {% endcall %}
165
+
166
+ publications:
167
+ {% call(pub) match('PublicationDetails.Publication', design.DesignDetails.Design) %}
168
+ - identifier: {{ pub.PublicationIdentifier}}
169
+ date: {{ pub.PublicationDate}}
170
+ section:
171
+ {% endcall %}
163
172
 
164
173
  {% endcall %}
165
174
  {% endcall %}
@@ -0,0 +1,6 @@
1
+ render = 'JSON'
2
+ source = 'national'
3
+
4
+ #JO/D/1996/0625
5
+ appnum_mask = ['(JO)/D/\\d*/(\\d*)',
6
+ '(\\d*)/D/\\d*/(\\d*)']
@@ -0,0 +1,49 @@
1
+ # standard gbd definitions
2
+ import gbdtransformation.designs.ipas.filters as ipas
3
+
4
+
5
+ # namespaces defined in XML and to be ignored in procecssing
6
+ ignore_namespace = [
7
+ 'http://www.wipo.int/standards/XMLSchema/designs',
8
+ 'http://www.wipo.int/standards/XMLSchema/wo-designs'
9
+ ]
10
+ def get_appdate(appdate, appnum):
11
+ return appnum.split('/')[-2]
12
+
13
+ def get_designs_count(design, header):
14
+ return '1'
15
+
16
+ def get_designs_pos(design, header):
17
+ return '1'
18
+
19
+ def translate_kind(desgin, header):
20
+ code = header.TransactionCode.lower()
21
+ subcode = header.TransactionSubCode.lower()
22
+ if code == 'نموذج صناعي':
23
+ return 'Industrial Design'
24
+ raise Exception('Type "%s" "%s" is not mapped.' % (code, subcode))
25
+
26
+ def translate_status(design):
27
+ status = design.DesignCurrentStatusCode
28
+
29
+ return ipas.translate_status(status)
30
+
31
+
32
+ def get_registration_nb(design, idstatus):
33
+ if design.RegistrationNumber:
34
+ return design.RegistrationNumber
35
+
36
+ return None
37
+
38
+
39
+ def get_expiry_date(design, idstatus):
40
+ return ipas.get_expiry_date(design, idstatus)
41
+
42
+ def get_registration_date(design, idstatus):
43
+ return ipas.get_registration_date(design, idstatus)
44
+
45
+ def is_international(header):
46
+ return False
47
+
48
+ def get_ir_refnum(appnum):
49
+ return appnum