wlc 2.1.0__tar.gz → 2.2.0__tar.gz

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 (139) hide show
  1. {wlc-2.1.0 → wlc-2.2.0}/CHANGES.rst +25 -0
  2. {wlc-2.1.0 → wlc-2.2.0}/MANIFEST.in +2 -0
  3. wlc-2.2.0/PKG-INFO +84 -0
  4. wlc-2.2.0/README.md +45 -0
  5. wlc-2.2.0/THREAT_MODEL.md +521 -0
  6. {wlc-2.1.0 → wlc-2.2.0}/pyproject.toml +35 -15
  7. {wlc-2.1.0 → wlc-2.2.0}/tests/test_base.py +87 -4
  8. {wlc-2.1.0 → wlc-2.2.0}/tests/test_config.py +204 -6
  9. wlc-2.2.0/tests/test_download.py +260 -0
  10. {wlc-2.1.0 → wlc-2.2.0}/tests/test_errors.py +18 -1
  11. wlc-2.2.0/tests/test_insecure_ssl.py +103 -0
  12. {wlc-2.1.0 → wlc-2.2.0}/tests/test_main.py +74 -86
  13. {wlc-2.1.0 → wlc-2.2.0}/tests/test_urls.py +77 -1
  14. {wlc-2.1.0 → wlc-2.2.0}/tests/test_wlc.py +88 -5
  15. {wlc-2.1.0 → wlc-2.2.0}/wlc/client.py +56 -33
  16. {wlc-2.1.0 → wlc-2.2.0}/wlc/config.py +169 -23
  17. {wlc-2.1.0 → wlc-2.2.0}/wlc/const.py +1 -1
  18. {wlc-2.1.0 → wlc-2.2.0}/wlc/http_debug.py +23 -2
  19. {wlc-2.1.0 → wlc-2.2.0}/wlc/main.py +152 -10
  20. {wlc-2.1.0 → wlc-2.2.0}/wlc/models.py +1 -1
  21. wlc-2.2.0/wlc.egg-info/PKG-INFO +84 -0
  22. {wlc-2.1.0 → wlc-2.2.0}/wlc.egg-info/SOURCES.txt +3 -0
  23. wlc-2.1.0/PKG-INFO +0 -169
  24. wlc-2.1.0/README.md +0 -130
  25. wlc-2.1.0/wlc.egg-info/PKG-INFO +0 -169
  26. {wlc-2.1.0 → wlc-2.2.0}/LICENSE +0 -0
  27. {wlc-2.1.0 → wlc-2.2.0}/LICENSES/CC0-1.0.txt +0 -0
  28. {wlc-2.1.0 → wlc-2.2.0}/LICENSES/GPL-3.0-or-later.txt +0 -0
  29. {wlc-2.1.0 → wlc-2.2.0}/SECURITY.md +0 -0
  30. {wlc-2.1.0 → wlc-2.2.0}/completion/wlc +0 -0
  31. {wlc-2.1.0 → wlc-2.2.0}/setup.cfg +0 -0
  32. {wlc-2.1.0 → wlc-2.2.0}/tests/__init__.py +0 -0
  33. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/.weblate +0 -0
  34. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/categories +0 -0
  35. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/categories-1 +0 -0
  36. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/changes +0 -0
  37. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components +0 -0
  38. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-android +0 -0
  39. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-android-file +0 -0
  40. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-android-file--GET--format=zip +0 -0
  41. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-olderweblate +0 -0
  42. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate +0 -0
  43. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate--DELETE-- +0 -0
  44. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate--PATCH--priority=80 +0 -0
  45. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-changes +0 -0
  46. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-file +0 -0
  47. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-file--GET--format=zip +0 -0
  48. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-lock +0 -0
  49. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-lock--POST--lock=0 +0 -0
  50. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-lock--POST--lock=1 +0 -0
  51. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-lock--POST--lock=false +0 -0
  52. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-lock--POST--lock=true +0 -0
  53. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-repository +0 -0
  54. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-repository--POST--operation=cleanup +0 -0
  55. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-repository--POST--operation=commit +0 -0
  56. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-repository--POST--operation=pull +0 -0
  57. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-repository--POST--operation=push +0 -0
  58. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-repository--POST--operation=reset +0 -0
  59. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-statistics +0 -0
  60. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-statistics--GET--page=2 +0 -0
  61. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-statistics--GET--page=3 +0 -0
  62. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-translations +0 -0
  63. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-translations--GET--page=2 +0 -0
  64. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/components-hello-weblate-translations--POST--language_code=nl_BE +0 -0
  65. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/languages +0 -0
  66. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/languages--GET--page=2 +0 -0
  67. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/languages--GET--page=3 +0 -0
  68. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/languages--POST--code=tst--name=Test-Language--direction=rtl--plural=number=2--formula=n-!=-1 +0 -0
  69. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects +0 -0
  70. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects--POST--name=Hello--slug=hello--web=http---example.com---source_language=name=Malayalam--code=ml +0 -0
  71. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects--POST--name=denied_json--slug=denide_json--web=http---some-weblate-app.com- +0 -0
  72. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-acl +0 -0
  73. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-empty +0 -0
  74. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-empty-components +0 -0
  75. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello +0 -0
  76. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello--DELETE-- +0 -0
  77. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-categories +0 -0
  78. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-changes +0 -0
  79. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-components +0 -0
  80. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-components--POST--3fcd0ab4 +0 -0
  81. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-components--POST--c9c26539 +0 -0
  82. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-languages +0 -0
  83. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-repository +0 -0
  84. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-repository--POST--operation=cleanup +0 -0
  85. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-repository--POST--operation=commit +0 -0
  86. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-repository--POST--operation=pull +0 -0
  87. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-repository--POST--operation=push +0 -0
  88. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-repository--POST--operation=reset +0 -0
  89. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-hello-statistics +0 -0
  90. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/projects-invalid +0 -0
  91. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations +0 -0
  92. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations--GET--page=2 +0 -0
  93. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations--GET--page=3 +0 -0
  94. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-android-en-units +0 -0
  95. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-android-en-units--POST--key=test-monolingual--value=-test-me- +0 -0
  96. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs +0 -0
  97. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs--DELETE-- +0 -0
  98. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-changes +0 -0
  99. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file +0 -0
  100. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file--GET--format=csv +0 -0
  101. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file--POST--3748506a +0 -0
  102. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file--POST--5c6a101f +0 -0
  103. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file--POST--85762547 +0 -0
  104. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file--POST--90a4957d +0 -0
  105. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file--POST--f8672b4c +0 -0
  106. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-file--POST--fe040a0c +0 -0
  107. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-repository +0 -0
  108. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-repository--POST--operation=cleanup +0 -0
  109. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-repository--POST--operation=commit +0 -0
  110. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-repository--POST--operation=pull +0 -0
  111. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-repository--POST--operation=push +0 -0
  112. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-repository--POST--operation=reset +0 -0
  113. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-statistics +0 -0
  114. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-units +0 -0
  115. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/translations-hello-weblate-cs-units--GET--q=source%3A%3D%22mr%22 +0 -0
  116. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/units +0 -0
  117. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/units-123 +0 -0
  118. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/units-123--DELETE-- +0 -0
  119. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/units-123--PATCH--target=-foo---state=30 +0 -0
  120. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/api/units-123--PUT--target=-foo---state=30 +0 -0
  121. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/mock/project-local-file.pot +0 -0
  122. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/section +0 -0
  123. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/weblate.ini +0 -0
  124. {wlc-2.1.0 → wlc-2.2.0}/tests/test_data/wlc +0 -0
  125. {wlc-2.1.0 → wlc-2.2.0}/tests/test_insecure_http.py +0 -0
  126. {wlc-2.1.0 → wlc-2.2.0}/tests/test_package.py +0 -0
  127. {wlc-2.1.0 → wlc-2.2.0}/tests/test_statistics.py +0 -0
  128. {wlc-2.1.0 → wlc-2.2.0}/tests/test_utils.py +0 -0
  129. {wlc-2.1.0 → wlc-2.2.0}/wl +0 -0
  130. {wlc-2.1.0 → wlc-2.2.0}/wlc/__init__.py +0 -0
  131. {wlc-2.1.0 → wlc-2.2.0}/wlc/base.py +0 -0
  132. {wlc-2.1.0 → wlc-2.2.0}/wlc/exceptions.py +0 -0
  133. {wlc-2.1.0 → wlc-2.2.0}/wlc/output.py +0 -0
  134. {wlc-2.1.0 → wlc-2.2.0}/wlc/py.typed +0 -0
  135. {wlc-2.1.0 → wlc-2.2.0}/wlc/utils.py +0 -0
  136. {wlc-2.1.0 → wlc-2.2.0}/wlc.egg-info/dependency_links.txt +0 -0
  137. {wlc-2.1.0 → wlc-2.2.0}/wlc.egg-info/entry_points.txt +0 -0
  138. {wlc-2.1.0 → wlc-2.2.0}/wlc.egg-info/requires.txt +0 -0
  139. {wlc-2.1.0 → wlc-2.2.0}/wlc.egg-info/top_level.txt +0 -0
@@ -1,3 +1,28 @@
1
+ 2.2.0
2
+ -----
3
+
4
+ * Released on 1st September 2026.
5
+ * Hardened authentication by disabling automatic ``netrc`` credentials,
6
+ rejecting credentials embedded in URLs, and redacting credentials from HTTP
7
+ failure logs.
8
+ * Scoped insecure HTTP and TLS exceptions to explicitly trusted origins and
9
+ prevented project configuration from enabling them.
10
+ * Hardened downloads against symbolic links, non-regular files, and
11
+ destination replacement races.
12
+ * Escaped control characters in structured CSV fields and improved handling of
13
+ non-text output values.
14
+ * Added a threat model and clarified configuration discovery and precedence.
15
+ * Updated development dependencies, CI actions, and Docker base images.
16
+
17
+ 2.1.1
18
+ -----
19
+
20
+ * Released on 25th July 2026.
21
+ * Prevented URL parser differential SSRF in server-provided URLs by validating
22
+ request origins with the same parser used by the HTTP transport.
23
+ * Improved type annotations.
24
+ * Updated development dependencies, CI actions, and Docker base images.
25
+
1
26
  2.1.0
2
27
  -----
3
28
 
@@ -1,4 +1,5 @@
1
1
  include README.md
2
+ include THREAT_MODEL.md
2
3
  include SECURITY.md
3
4
  include LICENSE
4
5
  include wl
@@ -8,3 +9,4 @@ include MANIFEST.in
8
9
  include completion/wlc
9
10
  graft tests
10
11
  prune tests/__pycache__
12
+ global-exclude *.swp
wlc-2.2.0/PKG-INFO ADDED
@@ -0,0 +1,84 @@
1
+ Metadata-Version: 2.4
2
+ Name: wlc
3
+ Version: 2.2.0
4
+ Summary: A command-line utility for Weblate, translation tool with tight version control integration
5
+ Author-email: Michal Čihař <michal@weblate.org>
6
+ License-Expression: GPL-3.0-or-later
7
+ Project-URL: Documentation, https://docs.weblate.org/
8
+ Project-URL: Download, https://github.com/WeblateOrg/wlc
9
+ Project-URL: Funding, https://weblate.org/donate/
10
+ Project-URL: Homepage, https://weblate.org/
11
+ Project-URL: Issue Tracker, https://github.com/WeblateOrg/wlc/issues
12
+ Project-URL: Source Code, https://github.com/WeblateOrg/wlc
13
+ Project-URL: Twitter, https://twitter.com/WeblateOrg
14
+ Keywords: i18n,l10n,gettext,git,mercurial,translate
15
+ Platform: any
16
+ Classifier: Development Status :: 5 - Production/Stable
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3 :: Only
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Programming Language :: Python :: 3.13
26
+ Classifier: Programming Language :: Python :: 3.14
27
+ Classifier: Topic :: Software Development :: Internationalization
28
+ Classifier: Topic :: Software Development :: Localization
29
+ Classifier: Topic :: Utilities
30
+ Requires-Python: >=3.10
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ Requires-Dist: argcomplete
34
+ Requires-Dist: python-dateutil
35
+ Requires-Dist: pyxdg
36
+ Requires-Dist: requests>=2.33.0
37
+ Requires-Dist: urllib3>=2.7.0
38
+ Dynamic: license-file
39
+
40
+ <a href="https://weblate.org/"><img alt="Weblate" src="https://s.weblate.org/cdn/Logo-Darktext-borders.png" height="80px" /></a>
41
+
42
+ **Weblate is libre software web-based continuous localization system,
43
+ used by over 2500 libre projects and companies in more than 165 countries.**
44
+
45
+ # wlc
46
+
47
+ wlc is a [Weblate](https://weblate.org/) command-line client and Python library
48
+ using [Weblate's REST API](https://docs.weblate.org/en/latest/api.html).
49
+
50
+ [![Website](https://img.shields.io/badge/website-weblate.org-blue.svg)](https://weblate.org/)
51
+ [![Translation status](https://hosted.weblate.org/widgets/weblate/-/svg-badge.svg)](https://hosted.weblate.org/engage/weblate/?utm_source=widget)
52
+ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/552/badge)](https://bestpractices.coreinfrastructure.org/projects/552)
53
+ [![PyPI package](https://img.shields.io/pypi/v/wlc.svg)](https://pypi.org/project/wlc/)
54
+ [![Documentation](https://readthedocs.org/projects/weblate/badge/)](https://docs.weblate.org/en/latest/wlc.html)
55
+
56
+ ## Installation
57
+
58
+ Install wlc from PyPI:
59
+
60
+ ```console
61
+ pip install wlc
62
+ ```
63
+
64
+ ## Documentation
65
+
66
+ See the Weblate documentation for complete usage information:
67
+
68
+ - [Command-line client, configuration, and Docker usage](https://docs.weblate.org/en/latest/wlc.html)
69
+ - [Python API](https://docs.weblate.org/en/latest/python.html)
70
+
71
+ Container images are published on
72
+ [Docker Hub](https://hub.docker.com/r/weblate/wlc) and the
73
+ [GitHub Container Registry](https://github.com/WeblateOrg/wlc/pkgs/container/wlc).
74
+
75
+ ## Security
76
+
77
+ The [wlc threat model](https://github.com/WeblateOrg/wlc/blob/main/THREAT_MODEL.md)
78
+ documents the supported trust boundaries and security properties. Report security issues using the
79
+ [Weblate vulnerability reporting process](https://docs.weblate.org/en/latest/security/issues.html).
80
+
81
+ ## Contributing
82
+
83
+ Contributions are welcome! See the
84
+ [contributor documentation](https://docs.weblate.org/en/latest/contributing/modules.html).
wlc-2.2.0/README.md ADDED
@@ -0,0 +1,45 @@
1
+ <a href="https://weblate.org/"><img alt="Weblate" src="https://s.weblate.org/cdn/Logo-Darktext-borders.png" height="80px" /></a>
2
+
3
+ **Weblate is libre software web-based continuous localization system,
4
+ used by over 2500 libre projects and companies in more than 165 countries.**
5
+
6
+ # wlc
7
+
8
+ wlc is a [Weblate](https://weblate.org/) command-line client and Python library
9
+ using [Weblate's REST API](https://docs.weblate.org/en/latest/api.html).
10
+
11
+ [![Website](https://img.shields.io/badge/website-weblate.org-blue.svg)](https://weblate.org/)
12
+ [![Translation status](https://hosted.weblate.org/widgets/weblate/-/svg-badge.svg)](https://hosted.weblate.org/engage/weblate/?utm_source=widget)
13
+ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/552/badge)](https://bestpractices.coreinfrastructure.org/projects/552)
14
+ [![PyPI package](https://img.shields.io/pypi/v/wlc.svg)](https://pypi.org/project/wlc/)
15
+ [![Documentation](https://readthedocs.org/projects/weblate/badge/)](https://docs.weblate.org/en/latest/wlc.html)
16
+
17
+ ## Installation
18
+
19
+ Install wlc from PyPI:
20
+
21
+ ```console
22
+ pip install wlc
23
+ ```
24
+
25
+ ## Documentation
26
+
27
+ See the Weblate documentation for complete usage information:
28
+
29
+ - [Command-line client, configuration, and Docker usage](https://docs.weblate.org/en/latest/wlc.html)
30
+ - [Python API](https://docs.weblate.org/en/latest/python.html)
31
+
32
+ Container images are published on
33
+ [Docker Hub](https://hub.docker.com/r/weblate/wlc) and the
34
+ [GitHub Container Registry](https://github.com/WeblateOrg/wlc/pkgs/container/wlc).
35
+
36
+ ## Security
37
+
38
+ The [wlc threat model](https://github.com/WeblateOrg/wlc/blob/main/THREAT_MODEL.md)
39
+ documents the supported trust boundaries and security properties. Report security issues using the
40
+ [Weblate vulnerability reporting process](https://docs.weblate.org/en/latest/security/issues.html).
41
+
42
+ ## Contributing
43
+
44
+ Contributions are welcome! See the
45
+ [contributor documentation](https://docs.weblate.org/en/latest/contributing/modules.html).