py2docfx 0.1.11.dev1917708__py3-none-any.whl → 0.1.11.dev1919119__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.
@@ -26,4 +26,9 @@ class ClassWithCodeSummary:
26
26
  }
27
27
  ]
28
28
  }
29
+ """
30
+
31
+ class ClassWithAngleBracketSummary:
32
+ """
33
+ Test Method with param docstring containing angle bracket: link https://<variable>.foo.net/boo
29
34
  """
@@ -3,7 +3,7 @@ import sys
3
3
 
4
4
  sys.path.insert(0, os.path.abspath('.'))
5
5
 
6
- extensions = ['sphinx.ext.autodoc']
6
+ extensions = ['sphinx.ext.autodoc', 'yaml_builder']
7
7
 
8
8
  class includeTest:
9
9
  pass
@@ -0,0 +1,19 @@
1
+ class TestClassA():
2
+ """Test Class A
3
+ some summary to ensure class parameters and constructor parametes are put in two field lists
4
+
5
+ """
6
+ def __init__(self) -> None:
7
+ pass
8
+
9
+ def method_param_docstring_contain_angle_bracket(self):
10
+ """Test Method with param docstring containing angle bracket
11
+
12
+ :param str paramE: Test Param E, link https://<variable>.foo.net/boo
13
+ """
14
+ pass
15
+
16
+ def method_docstring_contain_angle_bracket(self):
17
+ """Test Method with param docstring containing angle bracket: link https://<variable>.foo.net/boo
18
+ """
19
+ pass
@@ -0,0 +1,24 @@
1
+ import os
2
+ import sys
3
+
4
+ sys.path.insert(0, os.path.abspath('.'))
5
+
6
+ extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon', 'yaml_builder']
7
+
8
+ class includeTest:
9
+ pass
10
+
11
+ # The suffix of source filenames.
12
+ source_suffix = '.rst'
13
+
14
+ autodoc_mock_imports = [
15
+ 'dummy'
16
+ ]
17
+
18
+ nitpicky = True
19
+
20
+ autodoc_default_options = {
21
+ 'inherited-members': True
22
+ }
23
+
24
+ napoleon_preprocess_types = True
@@ -17,12 +17,5 @@ class SampleClass():
17
17
  """
18
18
  pass
19
19
 
20
- def dummy_summary3(self):
21
- """
22
- This is a bare URL that shouldn't be transformed into a link
23
- because it's in the exclusion list: https://management.azure.com
24
- """
25
- pass
26
-
27
20
  pass
28
21
 
@@ -42,3 +42,21 @@ def test_classWithCodeSummary_checkLastLineBracket(app):
42
42
  summary = app.env.docfx_info_field_data[objectToGenXml]['summary']
43
43
  summaryList = [line for line in summary.splitlines() if line]
44
44
  assert (summaryList[-1] == '}') # Translator shouldn't skip last line of bracket (even there's no alphabet =or digit in this line)
45
+
46
+
47
+ @pytest.mark.sphinx('yaml', testroot='translator-contents')
48
+ def test_classWithAngleBracketSummary_checkSummary(app):
49
+ # Test data definition
50
+ objectToGenXml = 'code_with_docstring.ClassWithAngleBracketSummary'
51
+ objectToGenXmlType = 'class'
52
+
53
+ # Arrange
54
+ prepare_app_envs(app, objectToGenXml)
55
+ doctree = load_rst_transform_to_doctree(app, objectToGenXmlType, objectToGenXml)
56
+
57
+ # Act
58
+ translator(app, '', doctree)
59
+
60
+ # Assert
61
+ summary = app.env.docfx_info_field_data[objectToGenXml]['summary']
62
+ assert summary == 'Test Method with param docstring containing angle bracket: link [https:/](https:/)/&lt;variable&gt;.foo.net/boo'
@@ -0,0 +1,42 @@
1
+ import pytest
2
+
3
+ from sphinx.testing import restructuredtext
4
+ from sphinx.io import SphinxStandaloneReader
5
+ from sphinx import addnodes
6
+ from translator import translator
7
+
8
+ from .utils.test_utils import prepare_app_envs,load_rst_transform_to_doctree
9
+
10
+ @pytest.mark.sphinx('yaml', testroot='translator-method')
11
+ def test_paramDocstringContainingAngleBrackets_checkEncoded(app):
12
+ # Test data definition
13
+ objectToGenXml = 'code_with_docstring.TestClassA.method_param_docstring_contain_angle_bracket'
14
+ objectToGenXmlType = 'function'
15
+
16
+ # Arrange
17
+ prepare_app_envs(app, objectToGenXml)
18
+ doctree = load_rst_transform_to_doctree(app, objectToGenXmlType, objectToGenXml)
19
+
20
+ # Act
21
+ translator(app, '', doctree)
22
+
23
+ # Assert
24
+ summary = app.env.docfx_info_field_data[objectToGenXml]['parameters'][0]['description']
25
+ assert (summary == '**paramE** (<xref:str>) -- Test Param E, link [https:/](https:/)/&lt;variable&gt;.foo.net/boo')
26
+
27
+ @pytest.mark.sphinx('yaml', testroot='translator-method')
28
+ def test_docstringContainingAngleBrackets_checkEncoded(app):
29
+ # Test data definition
30
+ objectToGenXml = 'code_with_docstring.TestClassA.method_docstring_contain_angle_bracket'
31
+ objectToGenXmlType = 'function'
32
+
33
+ # Arrange
34
+ prepare_app_envs(app, objectToGenXml)
35
+ doctree = load_rst_transform_to_doctree(app, objectToGenXmlType, objectToGenXml)
36
+
37
+ # Act
38
+ translator(app, '', doctree)
39
+
40
+ # Assert
41
+ summary = app.env.docfx_info_field_data[objectToGenXml]['summary']
42
+ assert summary == 'Test Method with param docstring containing angle bracket: link [https:/](https:/)/&lt;variable&gt;.foo.net/boo'
@@ -20,7 +20,6 @@ def test_http_link_in_summary_should_not_nest_parenthesis(app):
20
20
  class_summary_result = transform_node(app, doctree[1][1][0])
21
21
  method1_summary_result = transform_node(app, doctree[1][1][2][1])
22
22
  method2_summary_result = transform_node(app, doctree[1][1][4][1])
23
- method3_summary_result = transform_node(app, doctree[1][1][6][1])
24
23
 
25
24
  # Assert
26
25
  # Shouldn't see something like [title]((link))
@@ -29,10 +28,7 @@ def test_http_link_in_summary_should_not_nest_parenthesis(app):
29
28
  "We should not generate nested parenthesis causing docs validation warnings\n")
30
29
  method2_summary_expected = ("\n\n This isn't a content issue link ([https://www.microsoft.com](https://www.microsoft.com))\n "
31
30
  "Should expect a transformed Markdown link.\n")
32
- method3_summary_expected = ("\n\n This is a bare URL that shouldn't be transformed into a link\n "
33
- "because it's in the exclusion list: https://management.azure.com\n")
34
31
  assert(class_summary_expected == class_summary_result)
35
32
  assert(method1_summary_expected == method1_summary_result)
36
33
  assert(method2_summary_expected == method2_summary_result)
37
- assert(method3_summary_expected == method3_summary_result)
38
34
 
@@ -3,4 +3,15 @@ def is_inline_text_children_of_versionmodified(node):
3
3
  if hasattr(node.parent, 'parent') and node.parent.parent is not None:
4
4
  if node.parent.parent.tagname == 'versionmodified':
5
5
  return True
6
- return False
6
+ return False
7
+
8
+ def replace_special_unicode(text):
9
+ text = text.replace('\u201c', '"')
10
+ text = text.replace('\u201d', '"')
11
+ text = text.replace('\u2018', "'")
12
+ text = text.replace('\u2019', "'")
13
+ text = text.replace('\u2026', "...")
14
+ return text
15
+
16
+ def replace_angle_brackets_with_html_entities(text):
17
+ return text.replace('<', '&lt;').replace('>', '&gt;')
@@ -183,15 +183,6 @@ class MarkdownTranslator(nodes.NodeVisitor):
183
183
  sectionchars = '*=-~"+`'
184
184
  xref_template = "<xref:{0}>"
185
185
 
186
- # URLs that shouldn't be automatically rendered as hyperlinks if found bare. Included because they appear
187
- # frequently, get flagged by the broken link validator and/or there's no value to the user in
188
- # making them clickable links.
189
- urls_that_shouldnt_be_rendered_as_links = {
190
- "https://management.azure.com",
191
- "https://management.chinacloudapi.cn",
192
- "https://management.usgovcloudapi.net"
193
- }
194
-
195
186
  def __init__(self, document, builder):
196
187
  self.invdata = []
197
188
  nodes.NodeVisitor.__init__(self, document)
@@ -934,10 +925,7 @@ class MarkdownTranslator(nodes.NodeVisitor):
934
925
  match_content_issue_pattern = True
935
926
  ref_string = node.attributes["refuri"]
936
927
  if not match_content_issue_pattern:
937
- if inner_text == node.attributes['refuri'] and inner_text in cls.urls_that_shouldnt_be_rendered_as_links:
938
- ref_string = inner_text
939
- else:
940
- ref_string = '[{}]({})'.format(node.astext(), node.attributes['refuri'])
928
+ ref_string = '[{}]({})'.format(node.astext(), node.attributes['refuri'])
941
929
  else:
942
930
  # only use id in class and func refuri if its id exists
943
931
  # otherwise, remove '.html#' in refuri
@@ -1056,7 +1044,8 @@ class MarkdownTranslator(nodes.NodeVisitor):
1056
1044
  return text
1057
1045
 
1058
1046
  def visit_Text(self, node):
1059
- text = self.replace_special_unicode(node.astext())
1047
+ text = write_utils.replace_special_unicode(node.astext())
1048
+ text = write_utils.replace_angle_brackets_with_html_entities(text)
1060
1049
  if write_utils.is_inline_text_children_of_versionmodified(node.parent):
1061
1050
  text = text.strip(' ')
1062
1051
  self.add_text(text)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py2docfx
3
- Version: 0.1.11.dev1917708
3
+ Version: 0.1.11.dev1919119
4
4
  Summary: A package built based on Sphinx which download source code package and generate yaml files supported by docfx.
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -69,8 +69,8 @@ py2docfx/docfx_yaml/return_type_utils.py,sha256=nmdCUOvwdYk2jF6RqmOvU6gjXmXUTPUe
69
69
  py2docfx/docfx_yaml/settings.py,sha256=JQZNwFebczl-zn8Yk2taAGANRi-Hw8hywtDWxqXXFyQ,373
70
70
  py2docfx/docfx_yaml/translator.py,sha256=IXxrOEF2L1gZjGciimyrNHRHQUf1Xy3vr2UUR5i2vyM,25961
71
71
  py2docfx/docfx_yaml/utils.py,sha256=m5jC_qP2NKqzUx_z0zgZ-HAmxQdNTpJYKkL_F9vGeII,1555
72
- py2docfx/docfx_yaml/write_utils.py,sha256=q5qoYWw6GVDV8a3E8IxcSLWnN9sAer42VFRgadHBkgk,305
73
- py2docfx/docfx_yaml/writer.py,sha256=UMdqVym5WJVLuNOfB1o9Xh7jgwVTtpKutjly4Ts6OAo,35689
72
+ py2docfx/docfx_yaml/write_utils.py,sha256=dmE6Jrb8IEkfJ6kv2j0vBHS5qMVi7jbDINPzLurhGZk,677
73
+ py2docfx/docfx_yaml/writer.py,sha256=pIeYdXrU_xGnv6OjEyGYrgDCHt6dBrprYux-YZaaY_4,35120
74
74
  py2docfx/docfx_yaml/yaml_builder.py,sha256=qSxXVS4iFCc1ZdL5QzLrv8hy3LHIQCrhO4WcTp01vag,2575
75
75
  py2docfx/docfx_yaml/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
76
  py2docfx/docfx_yaml/tests/conftest.py,sha256=CykkZxaDZ-3a1EIQdGBieSmHL9FdyTE2xTJZe9QgKcg,1214
@@ -78,15 +78,16 @@ py2docfx/docfx_yaml/tests/test_build_finished.py,sha256=PSyWuY_XWmNeSjQl4kBwHUWp
78
78
  py2docfx/docfx_yaml/tests/test_method_arguments.py,sha256=Cvj9aoADtacKciVN8nempXW-KQL8nujSa9GNVuk6l_8,1578
79
79
  py2docfx/docfx_yaml/tests/test_numpy_syntax.py,sha256=ssb3J_-Jzjybhh4eycCA_LkXbGflyZyIUAiTjlEYLiw,863
80
80
  py2docfx/docfx_yaml/tests/test_translator_attributes.py,sha256=qZCsQGffq31k3UzpXkJpycplOXIq9gi2SxY6vu0DTfw,5224
81
- py2docfx/docfx_yaml/tests/test_translator_contents.py,sha256=lVCWbBIQk2oPFqsKK9gIb-b5DixutMabWjP7x03oj4s,1746
81
+ py2docfx/docfx_yaml/tests/test_translator_contents.py,sha256=6Nb0nftqi8YXbmyTMsEKYWVmWc-HWqkiKz7gWNHsxQE,2432
82
82
  py2docfx/docfx_yaml/tests/test_translator_data.py,sha256=zSVs3AT_TeAx1mrEYNTpy3Xy-FPrwwi93ly2EFclw5U,984
83
83
  py2docfx/docfx_yaml/tests/test_translator_exceptions.py,sha256=A2zAcJOBGchDBNIDr15uD3lzLfVldJKYSAl0e1CD5Ds,10481
84
84
  py2docfx/docfx_yaml/tests/test_translator_fieldlists.py,sha256=tDJ1l0c16oYfAlEIcidqEMwaXcX83Fg-rajpLtb2Wnk,1198
85
+ py2docfx/docfx_yaml/tests/test_translator_method.py,sha256=VQFAUX__WWLmJA6AQPLH8dUnXzeQirdvONZUIwwym-Q,1674
85
86
  py2docfx/docfx_yaml/tests/test_translator_numpy_returns.py,sha256=nmC70WUqCRcB1tkRG9iq8mBuIcZKwGhK09StEvq0zf8,2970
86
87
  py2docfx/docfx_yaml/tests/test_translator_rst_returns.py,sha256=BL3nOMMTPzNPJk-P9oMANiXnJ7ocuiecbFHH4DU1n40,2942
87
88
  py2docfx/docfx_yaml/tests/test_translator_signatures.py,sha256=DM51EOb4UXLkrO1-4cQQQvvX210goAsnxKJH-4A2U2Q,1537
88
89
  py2docfx/docfx_yaml/tests/test_writer_table.py,sha256=UnGYXQ-QVxin_e-HGZAHdg1LSFV0qc480ZNsqPN9OYc,1444
89
- py2docfx/docfx_yaml/tests/test_writer_uri.py,sha256=-TsN_eWEWzWpFy8xGnxPWP2Oqb8ikvI_Y4Syl4PVhMI,2091
90
+ py2docfx/docfx_yaml/tests/test_writer_uri.py,sha256=L9eFHZndD6H7nkznJ9Bw0v8xh9IegDlhhGFHBz9EHmM,1745
90
91
  py2docfx/docfx_yaml/tests/test_writer_versions.py,sha256=0-0VTMhbZ4ml9ryu1gYnu0mM2yIEKsBuFYb2F6grzTE,2995
91
92
  py2docfx/docfx_yaml/tests/roots/test-build-finished/code_with_signature_and_docstring.py,sha256=qvcKWL68C2aDTP8JT022nMV4EdZ50vhxVshMrHVO2sY,449
92
93
  py2docfx/docfx_yaml/tests/roots/test-build-finished/conf.py,sha256=L8vIFmO546PCQks50Gif_uTBwC3cppohXrQaogfyRF8,410
@@ -100,8 +101,8 @@ py2docfx/docfx_yaml/tests/roots/test-translator-attributes/code_with_docstring3.
100
101
  py2docfx/docfx_yaml/tests/roots/test-translator-attributes/code_with_import.py,sha256=VySauK2eitQYigPZUsrlK8l4ab2SJPOYPQnBoKHgLTo,297
101
102
  py2docfx/docfx_yaml/tests/roots/test-translator-attributes/conf.py,sha256=rFV8j1gOtlc2ubfcNf-qi6F1904_G4jMd_5e2fLzip0,358
102
103
  py2docfx/docfx_yaml/tests/roots/test-translator-attributes/refered_objects.py,sha256=DJaX52mnHw9W3GSqKh75CYK87g4CczXNNjFO496Ai2U,79
103
- py2docfx/docfx_yaml/tests/roots/test-translator-contents/code_with_docstring.py,sha256=yPH0kaYzmroxuCO3ZRq5KLb10IqxqROY4io0B58Welc,712
104
- py2docfx/docfx_yaml/tests/roots/test-translator-contents/conf.py,sha256=avcbnIOV2mlGQwhMQJZC4W6UGRBRhnq1QBxjPWlySxQ,260
104
+ py2docfx/docfx_yaml/tests/roots/test-translator-contents/code_with_docstring.py,sha256=ffSheCUinQydQqt1Vm4VBaCtf5ECZFUkBG4APCz5xp8,869
105
+ py2docfx/docfx_yaml/tests/roots/test-translator-contents/conf.py,sha256=qnFx2JWf3soFQYBAG1S5jSLNoAjMbeRjsthOIcAenx0,276
105
106
  py2docfx/docfx_yaml/tests/roots/test-translator-data/code_with_data.py,sha256=F5-o_cBTjLGzUmk2PEEY60zQz7B0YLe4-yDbEZrvwac,372
106
107
  py2docfx/docfx_yaml/tests/roots/test-translator-data/conf.py,sha256=avcbnIOV2mlGQwhMQJZC4W6UGRBRhnq1QBxjPWlySxQ,260
107
108
  py2docfx/docfx_yaml/tests/roots/test-translator-exceptions/code_with_docstring.py,sha256=vRbnBpO9YFCz7ZlNvUNh7l-ILBiwhzpN2mPm-rtKNQs,3543
@@ -109,6 +110,8 @@ py2docfx/docfx_yaml/tests/roots/test-translator-exceptions/conf.py,sha256=avcbnI
109
110
  py2docfx/docfx_yaml/tests/roots/test-translator-exceptions/refered_objects.py,sha256=zTnP-R7nxTxZr2yHurKKQSPFSY9gz3_vmFI0OotI3_U,124
110
111
  py2docfx/docfx_yaml/tests/roots/test-translator-fieldlists/code_with_multiple_fieldlists.py,sha256=llu95FRqwjtwrMdR1enMB1Lso59CYJBmUPQy6LvGGAA,502
111
112
  py2docfx/docfx_yaml/tests/roots/test-translator-fieldlists/conf.py,sha256=KrvMHOj1LCdodwNwUsdCI_OMM-Bf_lpiUREk4egQWms,388
113
+ py2docfx/docfx_yaml/tests/roots/test-translator-method/code_with_docstring.py,sha256=6V40cvO6Dj85R-bfKDkKlF8FDkfY1p_EAtB6Nh4OKKE,640
114
+ py2docfx/docfx_yaml/tests/roots/test-translator-method/conf.py,sha256=A-QZx8-7Zg3_6X42F3LSyG5Nx0AoYkbKB2QbnM33PB0,402
112
115
  py2docfx/docfx_yaml/tests/roots/test-translator-returns/code_with_returns_numpy.py,sha256=OGHOCBmRENAp4_MLYgyUsU2z7cm_hQx6Jtb8PSIs1Uo,748
113
116
  py2docfx/docfx_yaml/tests/roots/test-translator-returns/code_with_returns_rst.py,sha256=sQ1gV9lN33NjXFetGrUNLD6qCJF9v7BMYBQnDLa2Kdo,644
114
117
  py2docfx/docfx_yaml/tests/roots/test-translator-returns/conf.py,sha256=A-QZx8-7Zg3_6X42F3LSyG5Nx0AoYkbKB2QbnM33PB0,402
@@ -118,12 +121,12 @@ py2docfx/docfx_yaml/tests/roots/test-translator-signatures/conf.py,sha256=avcbnI
118
121
  py2docfx/docfx_yaml/tests/roots/test-translator-signatures/refered_objects.py,sha256=DJaX52mnHw9W3GSqKh75CYK87g4CczXNNjFO496Ai2U,79
119
122
  py2docfx/docfx_yaml/tests/roots/test-writer-table/code_with_table_desc.py,sha256=J4eFvXsymgFvjnwVUY0APtUGwuxvt-AFJjTaEaQ7zMQ,574
120
123
  py2docfx/docfx_yaml/tests/roots/test-writer-table/conf.py,sha256=avcbnIOV2mlGQwhMQJZC4W6UGRBRhnq1QBxjPWlySxQ,260
121
- py2docfx/docfx_yaml/tests/roots/test-writer-uri/code_with_uri.py,sha256=GSz1B0xiXSaddkrniVBXzW7R4jDuPq1sWU7ByBH6MxA,754
124
+ py2docfx/docfx_yaml/tests/roots/test-writer-uri/code_with_uri.py,sha256=bzWTZpY2yf_By2bOSl1GFaY3BsZpkAvwQuGztlcHKkQ,537
122
125
  py2docfx/docfx_yaml/tests/roots/test-writer-uri/conf.py,sha256=avcbnIOV2mlGQwhMQJZC4W6UGRBRhnq1QBxjPWlySxQ,260
123
126
  py2docfx/docfx_yaml/tests/roots/test-writer-versions/code_with_version_directives.py,sha256=UuizbrJPaG_PcaH18BvbI9KQevOaLd4SslpnzMSqcrE,1030
124
127
  py2docfx/docfx_yaml/tests/roots/test-writer-versions/conf.py,sha256=SCEKrm9VigArfdgf-GAieJD-40d0ctT6urmGIjFOZLM,404
125
128
  py2docfx/docfx_yaml/tests/utils/test_utils.py,sha256=d0OYSUQ6NyoZx5mlLdNGGNhiNmmQhjVT4hQ6jY3VE_M,3383
126
- py2docfx-0.1.11.dev1917708.dist-info/METADATA,sha256=YkTpFHkpn8q7txyG9hsXwk0xPsIV_zljimJhBOlYYD0,601
127
- py2docfx-0.1.11.dev1917708.dist-info/WHEEL,sha256=bFJAMchF8aTQGUgMZzHJyDDMPTO3ToJ7x23SLJa1SVo,92
128
- py2docfx-0.1.11.dev1917708.dist-info/top_level.txt,sha256=5dH2uP81dczt_qQJ38wiZ-gzoVWasfiJALWRSjdbnYU,9
129
- py2docfx-0.1.11.dev1917708.dist-info/RECORD,,
129
+ py2docfx-0.1.11.dev1919119.dist-info/METADATA,sha256=nl8d3aHBYbBZ3F5H5wok0s3NbJHjx8dDEvYO-GNSIfc,601
130
+ py2docfx-0.1.11.dev1919119.dist-info/WHEEL,sha256=bFJAMchF8aTQGUgMZzHJyDDMPTO3ToJ7x23SLJa1SVo,92
131
+ py2docfx-0.1.11.dev1919119.dist-info/top_level.txt,sha256=5dH2uP81dczt_qQJ38wiZ-gzoVWasfiJALWRSjdbnYU,9
132
+ py2docfx-0.1.11.dev1919119.dist-info/RECORD,,