arelle-release 2.37.60__py3-none-any.whl → 2.37.61__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 arelle-release might be problematic. Click here for more details.

arelle/ModelDtsObject.py CHANGED
@@ -1690,6 +1690,7 @@ class RelationStatus:
1690
1690
  INEFFECTIVE = 4
1691
1691
 
1692
1692
  arcCustAttrsExclusions = {XbrlConst.xlink, "use","priority","order","weight","preferredLabel"}
1693
+ modelObjectAttrs = frozenset(dir(ModelObject))
1693
1694
 
1694
1695
  class ModelRelationship(ModelObject):
1695
1696
  """
@@ -2086,6 +2087,11 @@ class ModelRelationship(ModelObject):
2086
2087
  self.toModelObject.qname if isinstance(self.toModelObject, ModelObject) else "??",
2087
2088
  self.modelDocument.basename, self.sourceline))
2088
2089
 
2090
+ def __dir__(self):
2091
+ # Ignore ModelObject attributes because most relate to the underlying lxml element,
2092
+ # which ModelRelationship does not have.
2093
+ return [a for a in object.__dir__(self) if a.startswith('__') or a not in modelObjectAttrs]
2094
+
2089
2095
  @property
2090
2096
  def viewConcept(self):
2091
2097
  if isinstance(self.toModelObject, ModelConcept):
arelle/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '2.37.60'
32
- __version_tuple__ = version_tuple = (2, 37, 60)
31
+ __version__ = version = '2.37.61'
32
+ __version_tuple__ = version_tuple = (2, 37, 61)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -12,7 +12,7 @@ import regex
12
12
  from arelle import XbrlConst, XmlUtil
13
13
  from arelle.LinkbaseType import LinkbaseType
14
14
  from arelle.ModelDtsObject import ModelConcept
15
- from arelle.ModelInstanceObject import ModelFact
15
+ from arelle.ModelInstanceObject import ModelFact, ModelInlineFootnote
16
16
  from arelle.ModelObject import ModelObject
17
17
  from arelle.ModelValue import QName
18
18
  from arelle.PrototypeDtsObject import LocPrototype, ArcPrototype
@@ -812,6 +812,115 @@ def rule_gfm_1_3_23(
812
812
  )
813
813
 
814
814
 
815
+ @validation(
816
+ hook=ValidationHook.XBRL_FINALLY,
817
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
818
+ )
819
+ def rule_gfm_1_3_25(
820
+ pluginData: PluginValidationDataExtension,
821
+ val: ValidateXbrl,
822
+ *args: Any,
823
+ **kwargs: Any,
824
+ ) -> Iterable[Validation]:
825
+ """
826
+ EDINET.EC5700W: [GFM 1.3.25] Correct the element name so that it does not end with "Axis", or correct the
827
+ substitutionGroup to "xbrldt:dimensionItem".
828
+
829
+ GFM 1.3.25: The xsd:element substitutionGroup attribute must equal "xbrldt:dimensionItem" if
830
+ and only if the name attribute ends with "Axis".
831
+ """
832
+ for concept in pluginData.getExtensionConcepts(val.modelXbrl):
833
+ if concept.qname.localName.endswith("Axis") != (concept.substitutionGroupQname == XbrlConst.qnXbrldtDimensionItem):
834
+ yield Validation.warning(
835
+ codes='EDINET.EC5700W.GFM.1.3.25',
836
+ msg=_("Modify the element name, '%(conceptName)s', so that it does not end with 'Axis', or modify the substitutionGroup to 'xbrldt:dimensionItem'."),
837
+ conceptName=concept.qname.localName,
838
+ modelObject=concept,
839
+ )
840
+
841
+
842
+ @validation(
843
+ hook=ValidationHook.XBRL_FINALLY,
844
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
845
+ )
846
+ def rule_gfm_1_3_26(
847
+ pluginData: PluginValidationDataExtension,
848
+ val: ValidateXbrl,
849
+ *args: Any,
850
+ **kwargs: Any,
851
+ ) -> Iterable[Validation]:
852
+ """
853
+ EDINET.EC5700W: [GFM 1.3.26] Correct the element name so that it does not end with "Table", or correct the
854
+ substitutionGroup to "xbrldt:hypercubeItem".
855
+
856
+ GFM 1.3.26: The xsd:element name attribute must ends with "Table" if and only if
857
+ substitutionGroup attribute equals "xbrldt:hypercubeItem".
858
+ """
859
+ for concept in pluginData.getExtensionConcepts(val.modelXbrl):
860
+ if concept.qname.localName.endswith("Table") != (concept.substitutionGroupQname == XbrlConst.qnXbrldtHypercubeItem):
861
+ yield Validation.warning(
862
+ codes='EDINET.EC5700W.GFM.1.3.26',
863
+ msg=_("The substitution group 'xbrldt:hypercubeItem' is only allowed with an element name that ends with 'Table'."
864
+ "Please change %(conceptName)s or change the substitutionGroup."),
865
+ conceptName=concept.qname.localName,
866
+ modelObject=concept
867
+ )
868
+
869
+
870
+ @validation(
871
+ hook=ValidationHook.XBRL_FINALLY,
872
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
873
+ )
874
+ def rule_gfm_1_3_28(
875
+ pluginData: PluginValidationDataExtension,
876
+ val: ValidateXbrl,
877
+ *args: Any,
878
+ **kwargs: Any,
879
+ ) -> Iterable[Validation]:
880
+ """
881
+ EDINET.EC5700W: [GFM 1.3.28] If the element name of an element extended by a submitter-specific taxonomy ends with "LineItems",
882
+ set the abstract attribute to "true".
883
+ """
884
+ for concept in pluginData.getExtensionConcepts(val.modelXbrl):
885
+ if concept.qname.localName.endswith("LineItems") and not concept.isAbstract:
886
+ yield Validation.warning(
887
+ codes='EDINET.EC5700W.GFM.1.3.28',
888
+ msg=_("If the element name of an element extended by a submitter-specific taxonomy ends with 'LineItems', "
889
+ "set the abstract attribute to 'true'. For the element, '%(conceptName)s', the abstract attribute is 'false'."),
890
+ conceptName=concept.qname.localName,
891
+ modelObject=concept
892
+ )
893
+
894
+
895
+ @validation(
896
+ hook=ValidationHook.XBRL_FINALLY,
897
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
898
+ )
899
+ def rule_gfm_1_3_29(
900
+ pluginData: PluginValidationDataExtension,
901
+ val: ValidateXbrl,
902
+ *args: Any,
903
+ **kwargs: Any,
904
+ ) -> Iterable[Validation]:
905
+ """
906
+ EDINET.EC5700W: [GFM 1.3.29] If the element name of an element extended by the submitter-specific taxonomy ends with
907
+ "Domain" or "Member", please set the type attribute to "nonnum:domainItemType".
908
+
909
+ GFM 1.3.29: The xsd:element name attribute must end with "Domain" or "Member" if and only
910
+ if the type attribute equals "nonnum:domainItemType".
911
+ """
912
+ for concept in pluginData.getExtensionConcepts(val.modelXbrl):
913
+ isConceptDomain = concept.type.isDomainItemType if concept.type is not None else False
914
+ if ((concept.qname.localName.endswith("Domain") or concept.qname.localName.endswith("Member")) != isConceptDomain):
915
+ yield Validation.warning(
916
+ codes='EDINET.EC5700W.GFM.1.3.29',
917
+ msg=_("The type 'us-types:domainItemType' is only allowed with an element name that ends with 'Domain' or 'Member'. "
918
+ "Please change %(conceptName)s or change the type."),
919
+ conceptName=concept.qname.localName,
920
+ modelObject=concept
921
+ )
922
+
923
+
815
924
  @validation(
816
925
  hook=ValidationHook.XBRL_FINALLY,
817
926
  disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
@@ -1333,3 +1442,62 @@ def rule_gfm_1_8_11(
1333
1442
  msg=_("The definition relationship can not have the xbrldt:usable attribute set to False"),
1334
1443
  modelObject=rel
1335
1444
  )
1445
+
1446
+
1447
+ @validation(
1448
+ hook=ValidationHook.XBRL_FINALLY,
1449
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1450
+ )
1451
+ def rule_gfm_1_9_1(
1452
+ pluginData: PluginValidationDataExtension,
1453
+ val: ValidateXbrl,
1454
+ *args: Any,
1455
+ **kwargs: Any,
1456
+ ) -> Iterable[Validation]:
1457
+ """
1458
+ EDINET.EC5700W: [GFM 1.9.1] References should not be defined for extension concepts.
1459
+ """
1460
+ conceptReferenceSet = val.modelXbrl.relationshipSet(XbrlConst.conceptReference)
1461
+ for modelConcept in conceptReferenceSet.fromModelObjects():
1462
+ if not isinstance(modelConcept, ModelConcept):
1463
+ continue
1464
+ if modelConcept.qname is None or modelConcept.qname.namespaceURI is None:
1465
+ continue
1466
+ if pluginData.isExtensionUri(modelConcept.qname.namespaceURI, val.modelXbrl):
1467
+ yield Validation.warning(
1468
+ codes='EDINET.EC5700W.GFM.1.9.1',
1469
+ msg=_("References should not be defined for extension concepts: %(conceptName)s"),
1470
+ conceptName=modelConcept.qname,
1471
+ modelObject=modelConcept
1472
+ )
1473
+
1474
+
1475
+ @validation(
1476
+ hook=ValidationHook.XBRL_FINALLY,
1477
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1478
+ )
1479
+ def rule_gfm_1_10_14(
1480
+ pluginData: PluginValidationDataExtension,
1481
+ val: ValidateXbrl,
1482
+ *args: Any,
1483
+ **kwargs: Any,
1484
+ ) -> Iterable[Validation]:
1485
+ """
1486
+ EDINET.EC5700W: [GFM 1.10.14] All non-empty footnotes must be referenced by an element
1487
+ """
1488
+ footnotes = set()
1489
+ usedFootnoteIDs = set()
1490
+ for ixdsHtmlRootElt in val.modelXbrl.ixdsHtmlElements:
1491
+ for elt in ixdsHtmlRootElt.iterdescendants(XbrlConst.qnIXbrlFootnote.clarkNotation, XbrlConst.qnIXbrl11Footnote.clarkNotation):
1492
+ if isinstance(elt, ModelInlineFootnote) and elt.value != '':
1493
+ footnotes.add(elt)
1494
+ for rel in val.modelXbrl.relationshipSet("XBRL-footnotes").modelRelationships:
1495
+ if rel.fromModelObject is not None and rel.toModelObject is not None:
1496
+ usedFootnoteIDs.add(rel.toModelObject.footnoteID)
1497
+ for footnote in footnotes:
1498
+ if footnote.footnoteID not in usedFootnoteIDs:
1499
+ yield Validation.warning(
1500
+ codes='EDINET.EC5700W.GFM.1.10.14',
1501
+ msg=_("A non-empty footnote is not referenced by an element"),
1502
+ modelObject=footnote
1503
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arelle-release
3
- Version: 2.37.60
3
+ Version: 2.37.61
4
4
  Summary: An open source XBRL platform.
5
5
  Author-email: "arelle.org" <support@arelle.org>
6
6
  License-Expression: Apache-2.0
@@ -37,7 +37,7 @@ arelle/LinkbaseType.py,sha256=BwRQl4XZFFCopufC2FEMLhYENNTk2JUWVQvnIUsaqtI,3108
37
37
  arelle/LocalViewer.py,sha256=WVrfek_bLeFFxgWITi1EQb6xCQN8O9Ks-ZL16vRncSk,3080
38
38
  arelle/Locale.py,sha256=07IDxv8nIfvhyRRllFdEAKRI3yo1D2v781cTrjb_RoQ,33193
39
39
  arelle/ModelDocument.py,sha256=R4uVfqks2XRDziRPAp_AUFebrAQBf4FgG97nb5h7fAs,130651
40
- arelle/ModelDtsObject.py,sha256=nvHQs4BDmPxY6mqLiBuqIGRJXyA1EqOEGB2f3S6A6w4,88656
40
+ arelle/ModelDtsObject.py,sha256=VUDsq8Ua0a-Hrhu-vFMaajwZLKjjr7xC4e-LAJSz-k0,88968
41
41
  arelle/ModelFormulaObject.py,sha256=-eb0lBYciEeAvvGduIs3AHGNGrxge9_0g1cVT6UUgvc,122560
42
42
  arelle/ModelInstanceObject.py,sha256=77rkxl1FK8OyJhTXkrNv6B_4oEK6IZm9eRQdFDxslGk,74278
43
43
  arelle/ModelManager.py,sha256=QUNcD2LC_YyyGFU8bFTSuzIGI1qpOK55KBlQ697Ep1I,11075
@@ -125,7 +125,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
125
125
  arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
126
126
  arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
127
127
  arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
- arelle/_version.py,sha256=koFp4Z0c56Yr9CtycRp6LnXPGQS-w-XkLeKmAMM0VDM,708
128
+ arelle/_version.py,sha256=KHvyigprh_4GfUyMHpRp8DoND89ZqncU0BKzMo7CvWY,708
129
129
  arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
130
130
  arelle/api/Session.py,sha256=kgSxS7VckA1sQ7xp0pJiK7IK-vRxAdAZKUo8gEx27s8,7549
131
131
  arelle/config/creationSoftwareNames.json,sha256=5MK7XUjfDJ9OpRCCHXeOErJ1SlTBZji4WEcEOdOacx0,3128
@@ -332,7 +332,7 @@ arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
332
332
  arelle/plugin/validate/EDINET/rules/contexts.py,sha256=KPoyWfRaURvxoGVcWP64mTMTAKPMSmQSX06RClCLddw,7590
333
333
  arelle/plugin/validate/EDINET/rules/edinet.py,sha256=1dHYl0nqZ5ql0SaE9Jj95fGegOMlssQNayeebV0iCJQ,13118
334
334
  arelle/plugin/validate/EDINET/rules/frta.py,sha256=N0YglHYZuLD2IuwE26viR2ViwUYjneBuMFU9vlrS0aQ,7616
335
- arelle/plugin/validate/EDINET/rules/gfm.py,sha256=Khiipm6s98RxScd_caU_xpbzFDAnfNy925iDxtCV5zs,50915
335
+ arelle/plugin/validate/EDINET/rules/gfm.py,sha256=XcWjLUxQs521Jbdr3S96RDlJld2m2d3xFFsaRTrP-qM,58037
336
336
  arelle/plugin/validate/EDINET/rules/manifests.py,sha256=MoT9R_a4BzuYdQVbF7RC5wz134Ve68svSdJ3NlpO_AU,4026
337
337
  arelle/plugin/validate/EDINET/rules/upload.py,sha256=YdjVIRTO9Zrmdprx-y0uo6MzHP7YLYYItwbR8AjP_fE,48731
338
338
  arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
@@ -684,9 +684,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
684
684
  arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
685
685
  arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
686
686
  arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
687
- arelle_release-2.37.60.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
688
- arelle_release-2.37.60.dist-info/METADATA,sha256=raUd5lPyMS3Tio2TTVEQ5W-W4Ha-IBqpWvJN3o2jOCc,9327
689
- arelle_release-2.37.60.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
690
- arelle_release-2.37.60.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
691
- arelle_release-2.37.60.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
692
- arelle_release-2.37.60.dist-info/RECORD,,
687
+ arelle_release-2.37.61.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
688
+ arelle_release-2.37.61.dist-info/METADATA,sha256=_DG9yzSHAuG1UQGwzEWLrLD4Ow0SU8Qojx592crUxU0,9327
689
+ arelle_release-2.37.61.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
690
+ arelle_release-2.37.61.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
691
+ arelle_release-2.37.61.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
692
+ arelle_release-2.37.61.dist-info/RECORD,,