diff options
author | CoprDistGit <infra@openeuler.org> | 2023-04-11 17:38:58 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 17:38:58 +0000 |
commit | 8578c02b26c6487f40a61b43eeccfffbdf38d56b (patch) | |
tree | 3442410136bdbf6b41ecad64b7bc9b4aef988b41 | |
parent | 88f10d7aedca688e79b37171785e06b13b6a6e48 (diff) |
automatic import of python-lazy-property
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-lazy-property.spec | 174 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 176 insertions, 0 deletions
@@ -0,0 +1 @@ +/lazy-property-0.0.1.tar.gz diff --git a/python-lazy-property.spec b/python-lazy-property.spec new file mode 100644 index 0000000..0895aac --- /dev/null +++ b/python-lazy-property.spec @@ -0,0 +1,174 @@ +%global _empty_manifest_terminate_build 0 +Name: python-lazy-property +Version: 0.0.1 +Release: 1 +Summary: Makes properties lazy (ie evaluated only when called) +License: MIT +URL: https://github.com/jackmaney/lazy-property.git +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/1c/97/55bf318faf296b254a20e80657b439b019fd809d4aabc1e55d7788f75401/lazy-property-0.0.1.tar.gz +BuildArch: noarch + + +%description +`Properties <https://docs.python.org/3.4/library/functions.html#property>`_ are a very useful feature of Python, effectively allowing an attribute to masquerade as a method (with no arguments other than ``self``). However, sometimes we want to store the results of an expensive computation in an attribute. The straightforward way to do it would be something like the following: + import time + def do_some_big_calculation(): + """Simulating some ginormous calculation going on somewhere...""" + print("{}: Calculations started...".format(time.time)) + time.sleep(5) + print("{}: Calculations complete!".format(time.time)) + return 42 + class SomeClass(object): + def __init__(self): + self.calculation_value = do_some_big_calculation() +And that certainly works. However, this means that whenever you instantiate an object from ``SomeClass``, you'll perform this calculation each time. That could be problematic... +So, what we really want is for this calculation to only be done when it's needed. In other words, what we want is for this attribute to be **lazy**. +To do that, you can create a property, and a "private" attribute, named ``_calculation_value``, used to cache the result, like so: + class SomeOtherClass(object): + @property + def calculation_value(self): + if not hasattr(self, "_calculation_value"): + self._calculation_value = do_some_big_calculation() + return self._calculation_value +This package essentially reduces this down to a decorator: + import lazy_property + class YetAnotherClass(object): + @lazy_property.LazyProperty + def calculation_value(self): + return do_some_big_calculation() +And when called, the "calculation" is only done once: + In [5]:yac = YetAnotherClass() + In [6]: yac.calculation_value + 1440798443.228256: Calculations started... + 1440798448.229179: Calculations complete! + Out[6]: 42 + In [7]: yac.calculation_value + Out[7]: 42 +Note, however, that this property is not writable: + +%package -n python3-lazy-property +Summary: Makes properties lazy (ie evaluated only when called) +Provides: python-lazy-property +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-lazy-property +`Properties <https://docs.python.org/3.4/library/functions.html#property>`_ are a very useful feature of Python, effectively allowing an attribute to masquerade as a method (with no arguments other than ``self``). However, sometimes we want to store the results of an expensive computation in an attribute. The straightforward way to do it would be something like the following: + import time + def do_some_big_calculation(): + """Simulating some ginormous calculation going on somewhere...""" + print("{}: Calculations started...".format(time.time)) + time.sleep(5) + print("{}: Calculations complete!".format(time.time)) + return 42 + class SomeClass(object): + def __init__(self): + self.calculation_value = do_some_big_calculation() +And that certainly works. However, this means that whenever you instantiate an object from ``SomeClass``, you'll perform this calculation each time. That could be problematic... +So, what we really want is for this calculation to only be done when it's needed. In other words, what we want is for this attribute to be **lazy**. +To do that, you can create a property, and a "private" attribute, named ``_calculation_value``, used to cache the result, like so: + class SomeOtherClass(object): + @property + def calculation_value(self): + if not hasattr(self, "_calculation_value"): + self._calculation_value = do_some_big_calculation() + return self._calculation_value +This package essentially reduces this down to a decorator: + import lazy_property + class YetAnotherClass(object): + @lazy_property.LazyProperty + def calculation_value(self): + return do_some_big_calculation() +And when called, the "calculation" is only done once: + In [5]:yac = YetAnotherClass() + In [6]: yac.calculation_value + 1440798443.228256: Calculations started... + 1440798448.229179: Calculations complete! + Out[6]: 42 + In [7]: yac.calculation_value + Out[7]: 42 +Note, however, that this property is not writable: + +%package help +Summary: Development documents and examples for lazy-property +Provides: python3-lazy-property-doc +%description help +`Properties <https://docs.python.org/3.4/library/functions.html#property>`_ are a very useful feature of Python, effectively allowing an attribute to masquerade as a method (with no arguments other than ``self``). However, sometimes we want to store the results of an expensive computation in an attribute. The straightforward way to do it would be something like the following: + import time + def do_some_big_calculation(): + """Simulating some ginormous calculation going on somewhere...""" + print("{}: Calculations started...".format(time.time)) + time.sleep(5) + print("{}: Calculations complete!".format(time.time)) + return 42 + class SomeClass(object): + def __init__(self): + self.calculation_value = do_some_big_calculation() +And that certainly works. However, this means that whenever you instantiate an object from ``SomeClass``, you'll perform this calculation each time. That could be problematic... +So, what we really want is for this calculation to only be done when it's needed. In other words, what we want is for this attribute to be **lazy**. +To do that, you can create a property, and a "private" attribute, named ``_calculation_value``, used to cache the result, like so: + class SomeOtherClass(object): + @property + def calculation_value(self): + if not hasattr(self, "_calculation_value"): + self._calculation_value = do_some_big_calculation() + return self._calculation_value +This package essentially reduces this down to a decorator: + import lazy_property + class YetAnotherClass(object): + @lazy_property.LazyProperty + def calculation_value(self): + return do_some_big_calculation() +And when called, the "calculation" is only done once: + In [5]:yac = YetAnotherClass() + In [6]: yac.calculation_value + 1440798443.228256: Calculations started... + 1440798448.229179: Calculations complete! + Out[6]: 42 + In [7]: yac.calculation_value + Out[7]: 42 +Note, however, that this property is not writable: + +%prep +%autosetup -n lazy-property-0.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-lazy-property -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.0.1-1 +- Package Spec generated @@ -0,0 +1 @@ +c77b36ddcdc4f5cca622da4d2a8caba0 lazy-property-0.0.1.tar.gz |