diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-05 10:37:42 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-05 10:37:42 +0000 |
commit | 3a6506d0aff12a465ccdc8f0ea34f3495c356b11 (patch) | |
tree | b01e05da107ccf7ed6544afc89c04c6b13f9d5a6 | |
parent | 7f93cbc2369ae7ebbd43dffbe2659c9eb655245f (diff) |
automatic import of python-amp-rendereropeneuler20.03
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-amp-renderer.spec | 477 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 479 insertions, 0 deletions
@@ -0,0 +1 @@ +/amp-renderer-2.0.1.tar.gz diff --git a/python-amp-renderer.spec b/python-amp-renderer.spec new file mode 100644 index 0000000..76331ca --- /dev/null +++ b/python-amp-renderer.spec @@ -0,0 +1,477 @@ +%global _empty_manifest_terminate_build 0 +Name: python-amp-renderer +Version: 2.0.1 +Release: 1 +Summary: Unofficial Python port of server-side rendering from AMP Optimizer +License: Apache Software License +URL: https://github.com/chasefinch/amp-renderer +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/41/2c/ce83e3d26362d83113ace1ebd74c3834f728c266bc7a9a5803d47b229963/amp-renderer-2.0.1.tar.gz +BuildArch: noarch + + +%description +# AMP Renderer + + [](https://travis-ci.com/chasefinch/amp-renderer)  + +Unofficial Python port of [server-side rendering](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/explainer/?format=websites) from [AMP Optimizer](https://github.com/ampproject/amp-toolbox/tree/main/packages/optimizer). Supports Python 3.6 and above. + +AMP Renderer performs the following optimizations: +1. Inject the specific layout markup into each AMP element +2. Insert the AMP runtime styles into the document +3. Remove the AMP boilerplate styles, if possible +4. Mark the document as “transformed” with the appropriate tags on the `html` element +5. Insert `img` tags for images with the data-hero attribute + +It also makes these formatting updates: +1. Remove empty `class` and `style` tags for AMP HTML elements +2. Convert tag names and attribute names to lowercase +3. Convert numerical attribute values to strings +4. Use double quotes ("") for attributes, and escape double quotes inside attribute values +5. Remove whitespace between html attributes +6. If desired, removes comments (disabled by default) +7. If desired, trims whitespace around HTML attribute values (disabled by default, and not always a good idea) + +AMPRenderer can be used on a block of arbitrary HTML, but when used on a full document, it will insert the AMP runtime styles and, if possible, remove the AMP boilerplate styles. + +Boilerplate styles can be removed except in these cases: +- An AMP element uses an unsupported value for the `layout` attribute +- `amp-audio` is used +- There is at least one `amp-experiment` active +- Transformation fails for one or more elements due to an invalid attribute value for `media`, `sizes`, or `heights` +- Any render-delaying extension is used. Currently this means: + - `amp-dynamic-css-classes` + - `amp-story` + +If boilerplate styles can’t be removed, the attribute `no_boilerplate` will be set to `True` after calling `render`; otherwise it will be `False`. Until `render` runs, the `no_boilerplate` attribute isn’t set at all. + +## Usage + +If using Django, you can use the [Django AMP Renderer middleware](https://github.com/chasefinch/django-amp-renderer). + +Otherwise, install via PyPI: + + pip install amp-renderer + +Minimal usage: + + from amp_renderer import AMPRenderer + + ... + + RUNTIME_VERSION = "012345678" /* Current AMP runtime version number */ + RUNTIME_STYLES = "..." /* Current contents of https://cdn.ampproject.org/v0.css */ + + renderer = AMPRenderer( + runtime_version=RUNTIME_VERSION, + runtime_styles=RUNTIME_STYLES) + + original_html = """ + <!doctype html> + <html ⚡> + ... + </html> + """ + + result = renderer.render(original_html) + + print(result) + + +Remove comments and/or trim attributes: + + renderer.should_strip_comments = True + renderer.should_trim_attributes = True + result = renderer.render(original_html) + + print(result) + + +The AMPRenderer class inherits from [HTMLParser](https://docs.python.org/3/library/html.parser.html), and can be similarly extended. + +## Testing, etc. + +Install requrements: + + make install + +Sort imports (Requires Python >= 3.8): + + make format + +Lint (Requires Python >= 3.8): + + make lint + +Test: + + make test + +## Discussion + +There are still some aspects of the official AMP Optimizer implementation that haven’t been addressed yet. PRs welcome. + +### General +- [x] ~Tested against AMP Optimizer’s ServerSideRendering spec~ +- [ ] Automatic runtime version management + +### Dynamic attributes +- [x] ~Support `sizes`, `media`, and `heights` via CSS injection~ +- [x] ~Group CSS injections for `media` attributes by shared media queries to reduce necessary bytes~ +- [ ] Support percent values in `heights` +- [ ] Warn or fail if CSS injection puts the `amp-custom` element over the byte limit + +### Hero Images +- [x] ~Inject `img` tag for `amp-img`s with the `data-hero` attribute~ +- [ ] Enforce 2-image limit on `data-hero` +- [ ] Autodetect hero images +- [ ] Support hero image functionality for `amp-iframe`, `amp-video`, and `amp-video-iframe` + +### Performance + +The Python AMP Renderer does not insert `preload` links into the `head` of the DOM object for hero images; This can be done by hand for more control over the critical path. + +<!-- + +Since AMPRenderer adds the `amp-runtime` styles to the document, you can also use the [AMP Module Build](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/explainer/?format=websites#amp-module-build-(coming-soon)) by hand. To take advantage of this, rewrite the import scripts such that imports like this: + + <script async src="https://cdn.ampproject.org/v0.js"></script> + +...become 2-part imports based on [Javascript Modules](https://v8.dev/features/modules#browser), like this: + + <script type="module" async src="https://cdn.ampproject.org/v0.mjs"></script> + <script nomodule async src="https://cdn.ampproject.org/v0.js"></script> + +--> + + + + +%package -n python3-amp-renderer +Summary: Unofficial Python port of server-side rendering from AMP Optimizer +Provides: python-amp-renderer +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-amp-renderer +# AMP Renderer + + [](https://travis-ci.com/chasefinch/amp-renderer)  + +Unofficial Python port of [server-side rendering](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/explainer/?format=websites) from [AMP Optimizer](https://github.com/ampproject/amp-toolbox/tree/main/packages/optimizer). Supports Python 3.6 and above. + +AMP Renderer performs the following optimizations: +1. Inject the specific layout markup into each AMP element +2. Insert the AMP runtime styles into the document +3. Remove the AMP boilerplate styles, if possible +4. Mark the document as “transformed” with the appropriate tags on the `html` element +5. Insert `img` tags for images with the data-hero attribute + +It also makes these formatting updates: +1. Remove empty `class` and `style` tags for AMP HTML elements +2. Convert tag names and attribute names to lowercase +3. Convert numerical attribute values to strings +4. Use double quotes ("") for attributes, and escape double quotes inside attribute values +5. Remove whitespace between html attributes +6. If desired, removes comments (disabled by default) +7. If desired, trims whitespace around HTML attribute values (disabled by default, and not always a good idea) + +AMPRenderer can be used on a block of arbitrary HTML, but when used on a full document, it will insert the AMP runtime styles and, if possible, remove the AMP boilerplate styles. + +Boilerplate styles can be removed except in these cases: +- An AMP element uses an unsupported value for the `layout` attribute +- `amp-audio` is used +- There is at least one `amp-experiment` active +- Transformation fails for one or more elements due to an invalid attribute value for `media`, `sizes`, or `heights` +- Any render-delaying extension is used. Currently this means: + - `amp-dynamic-css-classes` + - `amp-story` + +If boilerplate styles can’t be removed, the attribute `no_boilerplate` will be set to `True` after calling `render`; otherwise it will be `False`. Until `render` runs, the `no_boilerplate` attribute isn’t set at all. + +## Usage + +If using Django, you can use the [Django AMP Renderer middleware](https://github.com/chasefinch/django-amp-renderer). + +Otherwise, install via PyPI: + + pip install amp-renderer + +Minimal usage: + + from amp_renderer import AMPRenderer + + ... + + RUNTIME_VERSION = "012345678" /* Current AMP runtime version number */ + RUNTIME_STYLES = "..." /* Current contents of https://cdn.ampproject.org/v0.css */ + + renderer = AMPRenderer( + runtime_version=RUNTIME_VERSION, + runtime_styles=RUNTIME_STYLES) + + original_html = """ + <!doctype html> + <html ⚡> + ... + </html> + """ + + result = renderer.render(original_html) + + print(result) + + +Remove comments and/or trim attributes: + + renderer.should_strip_comments = True + renderer.should_trim_attributes = True + result = renderer.render(original_html) + + print(result) + + +The AMPRenderer class inherits from [HTMLParser](https://docs.python.org/3/library/html.parser.html), and can be similarly extended. + +## Testing, etc. + +Install requrements: + + make install + +Sort imports (Requires Python >= 3.8): + + make format + +Lint (Requires Python >= 3.8): + + make lint + +Test: + + make test + +## Discussion + +There are still some aspects of the official AMP Optimizer implementation that haven’t been addressed yet. PRs welcome. + +### General +- [x] ~Tested against AMP Optimizer’s ServerSideRendering spec~ +- [ ] Automatic runtime version management + +### Dynamic attributes +- [x] ~Support `sizes`, `media`, and `heights` via CSS injection~ +- [x] ~Group CSS injections for `media` attributes by shared media queries to reduce necessary bytes~ +- [ ] Support percent values in `heights` +- [ ] Warn or fail if CSS injection puts the `amp-custom` element over the byte limit + +### Hero Images +- [x] ~Inject `img` tag for `amp-img`s with the `data-hero` attribute~ +- [ ] Enforce 2-image limit on `data-hero` +- [ ] Autodetect hero images +- [ ] Support hero image functionality for `amp-iframe`, `amp-video`, and `amp-video-iframe` + +### Performance + +The Python AMP Renderer does not insert `preload` links into the `head` of the DOM object for hero images; This can be done by hand for more control over the critical path. + +<!-- + +Since AMPRenderer adds the `amp-runtime` styles to the document, you can also use the [AMP Module Build](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/explainer/?format=websites#amp-module-build-(coming-soon)) by hand. To take advantage of this, rewrite the import scripts such that imports like this: + + <script async src="https://cdn.ampproject.org/v0.js"></script> + +...become 2-part imports based on [Javascript Modules](https://v8.dev/features/modules#browser), like this: + + <script type="module" async src="https://cdn.ampproject.org/v0.mjs"></script> + <script nomodule async src="https://cdn.ampproject.org/v0.js"></script> + +--> + + + + +%package help +Summary: Development documents and examples for amp-renderer +Provides: python3-amp-renderer-doc +%description help +# AMP Renderer + + [](https://travis-ci.com/chasefinch/amp-renderer)  + +Unofficial Python port of [server-side rendering](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/explainer/?format=websites) from [AMP Optimizer](https://github.com/ampproject/amp-toolbox/tree/main/packages/optimizer). Supports Python 3.6 and above. + +AMP Renderer performs the following optimizations: +1. Inject the specific layout markup into each AMP element +2. Insert the AMP runtime styles into the document +3. Remove the AMP boilerplate styles, if possible +4. Mark the document as “transformed” with the appropriate tags on the `html` element +5. Insert `img` tags for images with the data-hero attribute + +It also makes these formatting updates: +1. Remove empty `class` and `style` tags for AMP HTML elements +2. Convert tag names and attribute names to lowercase +3. Convert numerical attribute values to strings +4. Use double quotes ("") for attributes, and escape double quotes inside attribute values +5. Remove whitespace between html attributes +6. If desired, removes comments (disabled by default) +7. If desired, trims whitespace around HTML attribute values (disabled by default, and not always a good idea) + +AMPRenderer can be used on a block of arbitrary HTML, but when used on a full document, it will insert the AMP runtime styles and, if possible, remove the AMP boilerplate styles. + +Boilerplate styles can be removed except in these cases: +- An AMP element uses an unsupported value for the `layout` attribute +- `amp-audio` is used +- There is at least one `amp-experiment` active +- Transformation fails for one or more elements due to an invalid attribute value for `media`, `sizes`, or `heights` +- Any render-delaying extension is used. Currently this means: + - `amp-dynamic-css-classes` + - `amp-story` + +If boilerplate styles can’t be removed, the attribute `no_boilerplate` will be set to `True` after calling `render`; otherwise it will be `False`. Until `render` runs, the `no_boilerplate` attribute isn’t set at all. + +## Usage + +If using Django, you can use the [Django AMP Renderer middleware](https://github.com/chasefinch/django-amp-renderer). + +Otherwise, install via PyPI: + + pip install amp-renderer + +Minimal usage: + + from amp_renderer import AMPRenderer + + ... + + RUNTIME_VERSION = "012345678" /* Current AMP runtime version number */ + RUNTIME_STYLES = "..." /* Current contents of https://cdn.ampproject.org/v0.css */ + + renderer = AMPRenderer( + runtime_version=RUNTIME_VERSION, + runtime_styles=RUNTIME_STYLES) + + original_html = """ + <!doctype html> + <html ⚡> + ... + </html> + """ + + result = renderer.render(original_html) + + print(result) + + +Remove comments and/or trim attributes: + + renderer.should_strip_comments = True + renderer.should_trim_attributes = True + result = renderer.render(original_html) + + print(result) + + +The AMPRenderer class inherits from [HTMLParser](https://docs.python.org/3/library/html.parser.html), and can be similarly extended. + +## Testing, etc. + +Install requrements: + + make install + +Sort imports (Requires Python >= 3.8): + + make format + +Lint (Requires Python >= 3.8): + + make lint + +Test: + + make test + +## Discussion + +There are still some aspects of the official AMP Optimizer implementation that haven’t been addressed yet. PRs welcome. + +### General +- [x] ~Tested against AMP Optimizer’s ServerSideRendering spec~ +- [ ] Automatic runtime version management + +### Dynamic attributes +- [x] ~Support `sizes`, `media`, and `heights` via CSS injection~ +- [x] ~Group CSS injections for `media` attributes by shared media queries to reduce necessary bytes~ +- [ ] Support percent values in `heights` +- [ ] Warn or fail if CSS injection puts the `amp-custom` element over the byte limit + +### Hero Images +- [x] ~Inject `img` tag for `amp-img`s with the `data-hero` attribute~ +- [ ] Enforce 2-image limit on `data-hero` +- [ ] Autodetect hero images +- [ ] Support hero image functionality for `amp-iframe`, `amp-video`, and `amp-video-iframe` + +### Performance + +The Python AMP Renderer does not insert `preload` links into the `head` of the DOM object for hero images; This can be done by hand for more control over the critical path. + +<!-- + +Since AMPRenderer adds the `amp-runtime` styles to the document, you can also use the [AMP Module Build](https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/explainer/?format=websites#amp-module-build-(coming-soon)) by hand. To take advantage of this, rewrite the import scripts such that imports like this: + + <script async src="https://cdn.ampproject.org/v0.js"></script> + +...become 2-part imports based on [Javascript Modules](https://v8.dev/features/modules#browser), like this: + + <script type="module" async src="https://cdn.ampproject.org/v0.mjs"></script> + <script nomodule async src="https://cdn.ampproject.org/v0.js"></script> + +--> + + + + +%prep +%autosetup -n amp-renderer-2.0.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-amp-renderer -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 2.0.1-1 +- Package Spec generated @@ -0,0 +1 @@ +b327aff4b2c390a11f8624d4ac11ed37 amp-renderer-2.0.1.tar.gz |