summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-11 17:38:58 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-11 17:38:58 +0000
commit8578c02b26c6487f40a61b43eeccfffbdf38d56b (patch)
tree3442410136bdbf6b41ecad64b7bc9b4aef988b41
parent88f10d7aedca688e79b37171785e06b13b6a6e48 (diff)
automatic import of python-lazy-property
-rw-r--r--.gitignore1
-rw-r--r--python-lazy-property.spec174
-rw-r--r--sources1
3 files changed, 176 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..2dbb801 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/sources b/sources
new file mode 100644
index 0000000..35a324a
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+c77b36ddcdc4f5cca622da4d2a8caba0 lazy-property-0.0.1.tar.gz