Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Upper Pin package microsoft-kiota-abstractions #48537

Closed
wants to merge 14 commits into from

Conversation

amolsr
Copy link
Contributor

@amolsr amolsr commented Mar 29, 2025


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@eladkal
Copy link
Contributor

eladkal commented Mar 31, 2025

Tests are failing. Can you check the errors?

@amolsr
Copy link
Contributor Author

amolsr commented Mar 31, 2025

I’m reviewing it and will need some more time.

@eladkal
Copy link
Contributor

eladkal commented Apr 2, 2025

There are still failures

FAILED airflow-core/tests/unit/always/test_example_dags.py::test_should_be_importable[providers/microsoft/azure/tests/system/microsoft/azure/example_powerbi_dataset_refresh.py] - AssertionError: import_errors={'/opt/airflow/providers/microsoft/azure/tests/system/microsoft/azure/example_powerbi_dataset_refresh.py': 'Traceback (most recent call last):\n  File "/opt/airflow/providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/msgraph.py", line 39, in <module>\n    from kiota_http.httpx_request_adapter import HttpxRequestAdapter\n  File "/usr/local/lib/python3.9/site-packages/kiota_http/httpx_request_adapter.py", line 28, in <module>\n    from opentelemetry.semconv.attributes.http_attributes import (\nModuleNotFoundError: No module named \'opentelemetry.semconv.attributes\'\n'}
assert 1 == 0

@amolsr amolsr requested a review from XD-DENG as a code owner April 2, 2025 17:34
@amolsr
Copy link
Contributor Author

amolsr commented Apr 2, 2025

Oh. rebasing didn't go that well.

amolsr and others added 14 commits April 2, 2025 23:23
The lazy consensus decision has been made at the devlist to switch
entirely to `uv` as development tool:

link: https://lists.apache.org/thread/6xxdon9lmjx3xh8zw09xc5k9jxb2n256

This PR implements that decision and removes a lot of baggage connected
to using `pip` additionally to uv to install and sync the environment.
It also introduces more consistency in the way how distribution
packages are used in airflow sources - basicaly switching all internal
distributions to use `pyproject.toml` approach and linking them all
together via `uv`'s workspace feature.

This enables much more streamlined development workflows, where any
part of airflow development is manageable using `uv sync` in the right
distribution - opening the way to moving more of the "sub-worfklows"
from the CI image to local virtualenv environment.

Unfortunately, such change cannot be done incrementally, really, because
any change in the project layout drags with itself a lot of changes
in the test/CI/management scripts, so we have to implement one big
PR covering the move.

This PR is "safe" in terms of the airflow and provider's code - it
does not **really** (except occasional imports and type hint changes
resulting from better isolation of packages) change Airflow code nor
it should not affect any airflow or provider code, because it does
not move any of the folder where airflow or provider's code is modified.

It does move the test code - in a number of "auxiliary" distributions
we have. It also moves the `docs` generation code to `devel-common`
and introduces separate conf.py files for every doc package.

What is still NOT done after that move and will be covered in the
follow-up changes:

* isolating docs-building to have separate configuraiton for docs
  building per distribution - allowing to run doc build locally
  with it's own conf.py file

* moving some of the tests and checks out from breeze container
  image up to the local environment (for example mypy checks) and
  likely isolating them per-provider

* Constraints are still generated using `pip freeze` and automatically
  managed by our custom scripts in `canary` builds - this will be
  replaced later by switching to `uv.lock` mechanism.

* potentially, we could merge `devel-common` and `dev` - to be
  considered as a follow-up.

* PROD image is stil build with `pip` by default when using
  `PyPI` or distribution packages  - but we do not support building
  the source image with `pip` - when building from sources, uv
  is forced internally to install packages. Currently we have
  no plans to change default PROD building to use `uv`.

This is the detailed list of changes implemented in this PR:

* uv is now mandatory to install as pre-requisite in order to
  develop airflow. We do not support installing airflow for
  development with `pip` - there will be a lot of cases where
  it will not work for development - including development
  dependencies and installing several distributions together.

* removed meta-package `hatch_build.py' and replacing it with
  pre-commit automatically modifying declarative pyproject.toml

* stripped down `hatch_build_airflow_core.py` to only cover custom
  git and asset build hooks (and renaming the file to `hatch_build.py`
  and moving all airflow dependencies to `pyproject.toml`

* converted "loose" packages in airflow repo into distributions:
  * docker-tests
  * kubernetes-tests
  * helm-tests
  * dev (here we do not have `src` subfolder - sources are directly
    in the distribution, which is for-now inconsistent with other
    distributions).

  The names of the `_tests` distribution folders have been renamed to
  the `-tests` convention to make sure the imports are always
  referring to base of each distribution and are not used from the
  content root.

* Each eof the distributions (on top of already existing airflow-core,
  task-sdk, devel-common and 90+providers has it's own set of
  dependencies, and the top-level meta-package workspace root brings
  those distributions together allowing to install them all tegether
  with a simple `uv sync --all-packages` command and come up with
  consistent set of dependencies that are good for all those
  packages (yay!). This is used to build CI image with single
  common environment to run the tests (with some quirks due to
  constraints use where we have to manually list all distributions
  until we switch to `uv.lock` mechanism)

* `doc` code is moved to `devel-common` distribution. The `doc` folder
  only keeps README informing where the other doc code is, the
  spelling_wordlist.txt and start_docs_server.sh. The documentation is
  generated in `generated/generated-docs/` folder which is entirely
  .gitignored.

* the documentation is now fully moved to:
  * `airflow-core/docs` - documentation for Airflow Core
  * `providers/**/docs` - documentation for Providers
  * `chart/docs` - documentation for Helm Chart
  * `task-sdk/docs` - documentation for Task SDK (new format not yet published)
  * `docker-stack-docs` - documentation for Docker Stack'
  * `providers-summary-docs` - documentation for provider summary page

* `versions` are not dynamically retrieved from `__init__.py` all
  of them are synchronized directly to pyproject.toml files - this
  way - except the custom build hook - we have no dynamic components
  in our `pyproject.toml` properties.

* references to extras were removed from INSTALL and other places,
  the only references to extras remains in the user documentation - we
  stop using extras for local development, we switch to using
  dependency groups.

* backtracking command was removed from breeze - we did not need it
  since we started using `uv`

* internal commands (except constraint generation) have been moved to
  `uv` from `pip`

* breeze requires `uv` to be installed and expects to be installed by
  `uv tool install -e ./dev/breeze`

* pyproject.tomls are dynamically modified when we add a version
  suffix dynamically (`--version-suffix-for-pypi`) - only for the
  time of building the versions with updated suffix

* `mypy` checks are now consistently used across all the different
  distributions and for consistency (and to fix some of the issues
  with namespace packages) rather than using "folder" approach
  when running mypy checks, even if we run mypy for whole
  distribution, we run check on individual files rather than on
  a folder. That adds consistency in execution of mypy heursistics.
  Rather than using in-container mypy script all the logic of
  selection and parameters passed to mypy are in pre-commit code.
  For now we are still using CI image to run mypy because mypy is
  very sensitive to version of dependencies installed, we should
  be able to switch to running mypy locally once we have the
  `uv.lock` mechanism incorporated in our workflows.

* lower bounds for dependencies have been set consistently across
  all the distributions. With `uv sync` and dependabot, those
  should be generally kept consistently for the future

* the `devel-common` dependencies have been groupped together in
  `devel-common` extras - including `basic`, `doc`, `doc-gen`, and
  `all` which will make it easier to install them for some OS-es
  (basic is used as default set of dependencies to cover most
  common set of development dependencies to be used for development)

* generated/provider_dependencies.json are not committed to the
  repository any longer. They are .gitignored and geberated
  on-the-flight as needed (breeze will generate them automatically
  when empty and pre-commit will always regenerate them to be
  consistent with provider's pyproject.toml files.

* `chart-utils` have been noved to `helm-tests` from `devel-common`
  as they were only used there.

* for k8s tests we are using the `uv` main `.venv` environment
  rather than creating our own `.build` environment and we use
  `uv sync` to keep it in sync

* Updated `uv` version to 0.6.10

* We are using `uv sync` to perform "upgrade to newer depencies"
  in `canary` builds and locally

* leveldb has been turned into "dependency group" and removed from
  apache-airflow and apache-airflow-core extras, it is now only
  available by google provider's leveldb optional extra to install
  with `pip`
@@ -0,0 +1 @@
!function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="/",o(o.s=56)}([function(t,e,r){var m=r(1),w=r(14),g=r(15),E=Math.max,x=Math.min;t.exports=function(n,r,t){var o,i,a,s,u,c,f=0,l=!1,d=!1,e=!0;if("function"!=typeof n)throw new TypeError("Expected a function");function h(t){var e=o,r=i;return o=i=void 0,f=t,s=n.apply(r,e)}function p(t){var e=t-c;return void 0===c||r<=e||e<0||d&&a<=t-f}function y(){var t=w();if(p(t))return b(t);u=setTimeout(y,function(t){var e=r-(t-c);return d?x(e,a-(t-f)):e}(t))}function b(t){return u=void 0,e&&o?h(t):(o=i=void 0,s)}function v(){var t=w(),e=p(t);if(o=arguments,i=this,c=t,e){if(void 0===u)return function(t){return f=t,u=setTimeout(y,r),l?h(t):s}(c);if(d)return clearTimeout(u),u=setTimeout(y,r),h(c)}return void 0===u&&(u=setTimeout(y,r)),s}return r=g(r)||0,m(t)&&(l=!!t.leading,a=(d="maxWait"in t)?E(g(t.maxWait)||0,r):a,e="trailing"in t?!!t.trailing:e),v.cancel=function(){void 0!==u&&clearTimeout(u),o=c=i=u=void(f=0)},v.flush=function(){return void 0===u?s:b(w())},v}},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,r){var n=r(8),o="object"==typeof self&&self&&self.Object===Object&&self,i=n||o||Function("return this")();t.exports=i},function(t,e,r){var n=r(6),o=r(19),i=r(20),a=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?o(t):i(t)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,r){!function(s){"use strict";var u={searchParams:"URLSearchParams"in self,iterable:"Symbol"in self&&"iterator"in Symbol,blob:"FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in self,arrayBuffer:"ArrayBuffer"in self};if(u.arrayBuffer)var e=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],r=ArrayBuffer.isView||function(t){return t&&-1<e.indexOf(Object.prototype.toString.call(t))};function n(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function o(t){return"string"!=typeof t&&(t=String(t)),t}function t(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return u.iterable&&(t[Symbol.iterator]=function(){return t}),t}function c(e){this.map={},e instanceof c?e.forEach(function(t,e){this.append(e,t)},this):Array.isArray(e)?e.forEach(function(t){this.append(t[0],t[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function i(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function a(r){return new Promise(function(t,e){r.onload=function(){t(r.result)},r.onerror=function(){e(r.error)}})}function f(t){var e=new FileReader,r=a(e);return e.readAsArrayBuffer(t),r}function l(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}function d(){return this.bodyUsed=!1,this._initBody=function(t){(this._bodyInit=t)?"string"==typeof t?this._bodyText=t:u.blob&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:u.formData&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:u.searchParams&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():u.arrayBuffer&&u.blob&&function(t){return t&&DataView.prototype.isPrototypeOf(t)}(t)?(this._bodyArrayBuffer=l(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):u.arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(t)||r(t))?this._bodyArrayBuffer=l(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):u.searchParams&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},u.blob&&(this.blob=function(){var t=i(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?i(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(f)}),this.text=function(){var t=i(this);if(t)return t;if(this._bodyBlob)return function(t){var e=new FileReader,r=a(e);return e.readAsText(t),r}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var e=new Uint8Array(t),r=new Array(e.length),n=0;n<e.length;n++)r[n]=String.fromCharCode(e[n]);return r.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},u.formData&&(this.formData=function(){return this.text().then(y)}),this.json=function(){return this.text().then(JSON.parse)},this}c.prototype.append=function(t,e){t=n(t),e=o(e);var r=this.map[t];this.map[t]=r?r+", "+e:e},c.prototype.delete=function(t){delete this.map[n(t)]},c.prototype.get=function(t){return t=n(t),this.has(t)?this.map[t]:null},c.prototype.has=function(t){return this.map.hasOwnProperty(n(t))},c.prototype.set=function(t,e){this.map[n(t)]=o(e)},c.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},c.prototype.keys=function(){var r=[];return this.forEach(function(t,e){r.push(e)}),t(r)},c.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),t(e)},c.prototype.entries=function(){var r=[];return this.forEach(function(t,e){r.push([e,t])}),t(r)},u.iterable&&(c.prototype[Symbol.iterator]=c.prototype.entries);var h=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function p(t,e){var r=(e=e||{}).body;if(t instanceof p){if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new c(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,r||null==t._bodyInit||(r=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=e.credentials||this.credentials||"same-origin",!e.headers&&this.headers||(this.headers=new c(e.headers)),this.method=function(t){var e=t.toUpperCase();return-1<h.indexOf(e)?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function y(t){var o=new FormData;return t.trim().split("&").forEach(function(t){if(t){var e=t.split("="),r=e.shift().replace(/\+/g," "),n=e.join("=").replace(/\+/g," ");o.append(decodeURIComponent(r),decodeURIComponent(n))}}),o}function b(t,e){e=e||{},this.type="default",this.status=void 0===e.status?200:e.status,this.ok=200<=this.status&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new c(e.headers),this.url=e.url||"",this._initBody(t)}p.prototype.clone=function(){return new p(this,{body:this._bodyInit})},d.call(p.prototype),d.call(b.prototype),b.prototype.clone=function(){return new b(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new c(this.headers),url:this.url})},b.error=function(){var t=new b(null,{status:0,statusText:""});return t.type="error",t};var v=[301,302,303,307,308];b.redirect=function(t,e){if(-1===v.indexOf(e))throw new RangeError("Invalid status code");return new b(null,{status:e,headers:{location:t}})},s.DOMException=self.DOMException;try{new s.DOMException}catch(t){s.DOMException=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack},s.DOMException.prototype=Object.create(Error.prototype),s.DOMException.prototype.constructor=s.DOMException}function m(i,a){return new Promise(function(r,t){var e=new p(i,a);if(e.signal&&e.signal.aborted)return t(new s.DOMException("Aborted","AbortError"));var n=new XMLHttpRequest;function o(){n.abort()}n.onload=function(){var t={status:n.status,statusText:n.statusText,headers:function(t){var o=new c;return t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(t){var e=t.split(":"),r=e.shift().trim();if(r){var n=e.join(":").trim();o.append(r,n)}}),o}(n.getAllResponseHeaders()||"")};t.url="responseURL"in n?n.responseURL:t.headers.get("X-Request-URL");var e="response"in n?n.response:n.responseText;r(new b(e,t))},n.onerror=function(){t(new TypeError("Network request failed"))},n.ontimeout=function(){t(new TypeError("Network request failed"))},n.onabort=function(){t(new s.DOMException("Aborted","AbortError"))},n.open(e.method,e.url,!0),"include"===e.credentials?n.withCredentials=!0:"omit"===e.credentials&&(n.withCredentials=!1),"responseType"in n&&u.blob&&(n.responseType="blob"),e.headers.forEach(function(t,e){n.setRequestHeader(e,t)}),e.signal&&(e.signal.addEventListener("abort",o),n.onreadystatechange=function(){4===n.readyState&&e.signal.removeEventListener("abort",o)}),n.send(void 0===e._bodyInit?null:e._bodyInit)})}m.polyfill=!0,self.fetch||(self.fetch=m,self.Headers=c,self.Request=p,self.Response=b),s.Headers=c,s.Request=p,s.Response=b,s.fetch=m,Object.defineProperty(s,"__esModule",{value:!0})}(e),t.exports=self.fetch},function(t,e,r){var n=r(2).Symbol;t.exports=n},function(t,e,r){"use strict";function h(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t)))return;var r=[],n=!0,o=!1,i=void 0;try{for(var a,s=t[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){o=!0,i=t}finally{try{n||null==s.return||s.return()}finally{if(o)throw i}}return r}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}r.d(e,"a",function(){return n});function p(t){var e=0<t.indexOf("-"),r=0<t.indexOf("+");if(e&&r){var n=h(t.split("-",2),2),o=n[0],i=h(n[1].split("+",2),2);return[o,i[0],i[1]]}if(e){var a=h(t.split("-",2),2);return[a[0],a[1],null]}if(r){var s=h(t.split("+",2),2);return[s[0],null,s[1]]}return[t,null,null]}function y(t,e){return t&&e?t.localeCompare(e):t||e?t?-1:1:0}var n=function(t,e){var r=h(p(t),3),n=r[0],o=r[1],i=r[2],a=h(p(e),3),s=a[0],u=a[1],c=a[2],f=function(t,e){for(var r=t.split("."),n=e.split("."),o=0;o<Math.min(r.length,n.length);o++){var i=r[o]-n[o];if(0!=i)return Math.max(-1,Math.min(i,1))}var a=r.length-n.length;return Math.max(-1,Math.min(a,1))}(n,s),l=y(o,u),d=y(i,c);return 0!==f?f:0!==l?l:d}},function(r,t,e){(function(t){var e="object"==typeof t&&t&&t.Object===Object&&t;r.exports=e}).call(this,e(9))},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e){window.addEventListener("scroll",function(){0<window.scrollY&&window.document.querySelector(".js-navbar-scroll").classList.add("navbar--box-shadow")})},function(t,e){window.document.querySelector("#navbar-toggle-button").addEventListener("click",function(){var t=window.document.querySelector("#navbar-drawer"),e=window.document.querySelector("#hamburger-icon"),r=window.document.querySelector("#close-icon");t.classList.toggle("navbar__drawer--open"),e.classList.toggle("visible"),r.classList.toggle("visible")})},function(t,e){!function(){var t=window.document.querySelector("#content-drawer"),e=window.document.querySelector("#content-navbar"),r=window.document.querySelector("#content-open-button"),n=window.document.querySelector("#content-close-button");if(t&&r&&n&&e){function o(){t.classList.toggle("content-drawer-container--open"),e.classList.toggle("navbar--hidden")}r.addEventListener("click",o),n.addEventListener("click",o)}}()},function(t,e,r){"use strict";var n=r(0),o=r.n(n);!function(){var t=document.querySelector(".wy-nav-side-toc");if(t){var e=Array.from(t.querySelectorAll("li")).map(function(t){var e=t.querySelector("a").hash.substr(1);return{navElement:t,targetElement:e?document.getElementById(e):document.body}}),r=window.document.querySelector("header > nav").offsetHeight,n=function(){var t;e.sort(function(t,e){return t.targetElement.offsetTop-e.targetElement.offsetTop}),t=e[0].targetElement.offsetTop+r>window.scrollY?0:e[e.length-1].targetElement.offsetTop+r<window.scrollY?e.length-1:e.findIndex(function(t){return t.targetElement.offsetTop+r>window.scrollY})-1,e.forEach(function(t){return t.navElement.classList.remove("current")}),e[t].navElement.classList.add("current")};window.addEventListener("scroll",o()(n,10)),window.addEventListener("resize",o()(n,10)),n()}}()},function(t,e,r){var n=r(2);t.exports=function(){return n.Date.now()}},function(t,e,r){var n=r(16),o=r(1),i=r(18),a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,u=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=n(t);var r=s.test(t);return r||u.test(t)?c(t.slice(2),r?2:8):a.test(t)?NaN:+t}},function(t,e,r){var n=r(17),o=/^\s+/;t.exports=function(t){return t?t.slice(0,n(t)+1).replace(o,""):t}},function(t,e){var r=/\s/;t.exports=function(t){for(var e=t.length;e--&&r.test(t.charAt(e)););return e}},function(t,e,r){var n=r(3),o=r(4);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==n(t)}},function(t,e,r){var n=r(6),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=n?n.toStringTag:void 0;t.exports=function(t){var e=i.call(t,s),r=t[s];try{var n=!(t[s]=void 0)}catch(t){}var o=a.call(t);return n&&(e?t[s]=r:delete t[s]),o}},function(t,e){var r=Object.prototype.toString;t.exports=function(t){return r.call(t)}},function(t,e){!function(){var e=window.document.querySelector(".rating");if(e){function t(t){e.querySelector("#rate-star-".concat(t)).addEventListener("click",function(){!function(t){window._paq.push(["trackEvent","Docs","Rating",window.location.pathname,t])}(t),e.innerHTML="<p class='bodytext__medium--brownish-grey font-weight-500 mb-0'>Thank you!</p>"})}for(var r=1;r<=5;r++)t(r)}}()},function(t,e){var r=window.document.querySelector(".rst-content");!function(){if(r){var t=r.querySelectorAll("table");t&&0!==t.length&&t.forEach(function(t){if(!t.parentNode.classList.contains("wy-table-responsive")){var e=document.createElement("div");e.classList.add("wy-table-responsive"),t.parentNode.insertBefore(e,t),e.appendChild(t)}})}}()},function(t,e,n){"use strict";(function(t){var i=n(7);function r(t){return function(t){if(Array.isArray(t))return t}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function f(){var t=r(document.location.pathname.split("/")),e=t[2];return{currentVersion:t[3],currentPackageName:e,pagePath:t.slice(4).join("/")}}var a;(a=window.document.querySelectorAll(".docs-version-selector"))&&0!==a.length&&t("/_gen/packages-metadata.json").then(function(t){return t.json()}).then(function(t){var e=f().currentPackageName,r=t.find(function(t){return t["package-name"]===e});if(r){var n=r["all-versions"].sort(i.a).reverse(),o=r["stable-version"];a.forEach(function(t){return function(t,e,r){var n=t.querySelector("#version-item-template").innerText,o=document.createElement("div");function i(t,e){var r=o.cloneNode(!0),n="/docs/".concat(u,"/").concat(t,"/").concat(c);r.setAttribute("href",n),r.innerText=e,a.appendChild(r)}o.innerHTML=n,o=o.firstElementChild;var a=t.querySelector(".dropdown-menu"),s=f(),u=s.currentPackageName,c=s.pagePath;i("stable","Stable (".concat(r,")")),e.forEach(function(t){return i(t,t)})}(t,n,o)})}})}).call(this,n(5))},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,r){"use strict";r.r(e);r(10),r(11),r(12),r(13),r(21),r(22),r(57),r(23)},function(t,e){Array.from(document.querySelectorAll(".toctree ul")).forEach(function(t){Array.from(t.parentNode.children).filter(function(t){return"A"===t.tagName}).forEach(function(t){var e=document.createElement("span");e.classList.add("toctree-expand"),t.insertBefore(e,t.firstChild)})})}]);

Check warning

Code scanning / CodeQL

DOM text reinterpreted as HTML Medium documentation

DOM text
is reinterpreted as HTML without escaping meta-characters.
Copy link
Contributor

@bugraoz93 bugraoz93 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the changes! It seems more changes added to PR. If you can rebase from main, that would be great

@amolsr
Copy link
Contributor Author

amolsr commented Apr 2, 2025

Closing this in favour of original developer's PR

@amolsr amolsr closed this Apr 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants