Skip to content

Commit 9e19d11

Browse files
committed
Support pip packaging
1 parent 9781490 commit 9e19d11

File tree

12 files changed

+609
-0
lines changed

12 files changed

+609
-0
lines changed

mesop/pip_package/BUILD

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Description:
2+
# Tools for building the Mesop pip package.
3+
4+
load("@rules_python//python:py_binary.bzl", "py_binary")
5+
6+
package(
7+
default_visibility = ["//build_defs:mesop_internal"],
8+
)
9+
10+
licenses(["notice"])
11+
12+
genrule(
13+
name = "pip_package",
14+
# Pip packages are provided in a tarball because we can't statically
15+
# know the file names: they must contain the version,
16+
# which is only defined in a Python module. Dependents of this
17+
# target can extract the tarball and glob its contents.
18+
outs = ["pip_packages.tar.gz"],
19+
cmd = "$(execpath :build_pip_package) $@",
20+
tools = [
21+
":build_pip_package",
22+
],
23+
)
24+
25+
sh_binary(
26+
name = "extract_pip_package",
27+
srcs = ["extract_pip_package.sh"],
28+
data = [":pip_package"],
29+
)
30+
31+
sh_binary(
32+
name = "build_pip_package",
33+
srcs = ["build_pip_package.sh"],
34+
data = [
35+
"LICENSE",
36+
"MANIFEST.in",
37+
"README.md",
38+
"requirements.txt",
39+
"setup.cfg",
40+
"setup.py",
41+
":deterministic_tar_gz",
42+
"//mesop", # Main Mesop target
43+
"//mesop/cli", # CLI (which includes data dep on web app)
44+
"//mesop/labs", # Mesop labs target
45+
],
46+
)
47+
48+
py_binary(
49+
name = "deterministic_tar_gz",
50+
srcs = ["deterministic_tar_gz.py"],
51+
srcs_version = "PY3",
52+
)

mesop/pip_package/LICENSE

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
2+
Apache License
3+
Version 2.0, January 2004
4+
http://www.apache.org/licenses/
5+
6+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7+
8+
1. Definitions.
9+
10+
"License" shall mean the terms and conditions for use, reproduction,
11+
and distribution as defined by Sections 1 through 9 of this document.
12+
13+
"Licensor" shall mean the copyright owner or entity authorized by
14+
the copyright owner that is granting the License.
15+
16+
"Legal Entity" shall mean the union of the acting entity and all
17+
other entities that control, are controlled by, or are under common
18+
control with that entity. For the purposes of this definition,
19+
"control" means (i) the power, direct or indirect, to cause the
20+
direction or management of such entity, whether by contract or
21+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
22+
outstanding shares, or (iii) beneficial ownership of such entity.
23+
24+
"You" (or "Your") shall mean an individual or Legal Entity
25+
exercising permissions granted by this License.
26+
27+
"Source" form shall mean the preferred form for making modifications,
28+
including but not limited to software source code, documentation
29+
source, and configuration files.
30+
31+
"Object" form shall mean any form resulting from mechanical
32+
transformation or translation of a Source form, including but
33+
not limited to compiled object code, generated documentation,
34+
and conversions to other media types.
35+
36+
"Work" shall mean the work of authorship, whether in Source or
37+
Object form, made available under the License, as indicated by a
38+
copyright notice that is included in or attached to the work
39+
(an example is provided in the Appendix below).
40+
41+
"Derivative Works" shall mean any work, whether in Source or Object
42+
form, that is based on (or derived from) the Work and for which the
43+
editorial revisions, annotations, elaborations, or other modifications
44+
represent, as a whole, an original work of authorship. For the purposes
45+
of this License, Derivative Works shall not include works that remain
46+
separable from, or merely link (or bind by name) to the interfaces of,
47+
the Work and Derivative Works thereof.
48+
49+
"Contribution" shall mean any work of authorship, including
50+
the original version of the Work and any modifications or additions
51+
to that Work or Derivative Works thereof, that is intentionally
52+
submitted to Licensor for inclusion in the Work by the copyright owner
53+
or by an individual or Legal Entity authorized to submit on behalf of
54+
the copyright owner. For the purposes of this definition, "submitted"
55+
means any form of electronic, verbal, or written communication sent
56+
to the Licensor or its representatives, including but not limited to
57+
communication on electronic mailing lists, source code control systems,
58+
and issue tracking systems that are managed by, or on behalf of, the
59+
Licensor for the purpose of discussing and improving the Work, but
60+
excluding communication that is conspicuously marked or otherwise
61+
designated in writing by the copyright owner as "Not a Contribution."
62+
63+
"Contributor" shall mean Licensor and any individual or Legal Entity
64+
on behalf of whom a Contribution has been received by Licensor and
65+
subsequently incorporated within the Work.
66+
67+
2. Grant of Copyright License. Subject to the terms and conditions of
68+
this License, each Contributor hereby grants to You a perpetual,
69+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70+
copyright license to reproduce, prepare Derivative Works of,
71+
publicly display, publicly perform, sublicense, and distribute the
72+
Work and such Derivative Works in Source or Object form.
73+
74+
3. Grant of Patent License. Subject to the terms and conditions of
75+
this License, each Contributor hereby grants to You a perpetual,
76+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77+
(except as stated in this section) patent license to make, have made,
78+
use, offer to sell, sell, import, and otherwise transfer the Work,
79+
where such license applies only to those patent claims licensable
80+
by such Contributor that are necessarily infringed by their
81+
Contribution(s) alone or by combination of their Contribution(s)
82+
with the Work to which such Contribution(s) was submitted. If You
83+
institute patent litigation against any entity (including a
84+
cross-claim or counterclaim in a lawsuit) alleging that the Work
85+
or a Contribution incorporated within the Work constitutes direct
86+
or contributory patent infringement, then any patent licenses
87+
granted to You under this License for that Work shall terminate
88+
as of the date such litigation is filed.
89+
90+
4. Redistribution. You may reproduce and distribute copies of the
91+
Work or Derivative Works thereof in any medium, with or without
92+
modifications, and in Source or Object form, provided that You
93+
meet the following conditions:
94+
95+
(a) You must give any other recipients of the Work or
96+
Derivative Works a copy of this License; and
97+
98+
(b) You must cause any modified files to carry prominent notices
99+
stating that You changed the files; and
100+
101+
(c) You must retain, in the Source form of any Derivative Works
102+
that You distribute, all copyright, patent, trademark, and
103+
attribution notices from the Source form of the Work,
104+
excluding those notices that do not pertain to any part of
105+
the Derivative Works; and
106+
107+
(d) If the Work includes a "NOTICE" text file as part of its
108+
distribution, then any Derivative Works that You distribute must
109+
include a readable copy of the attribution notices contained
110+
within such NOTICE file, excluding those notices that do not
111+
pertain to any part of the Derivative Works, in at least one
112+
of the following places: within a NOTICE text file distributed
113+
as part of the Derivative Works; within the Source form or
114+
documentation, if provided along with the Derivative Works; or,
115+
within a display generated by the Derivative Works, if and
116+
wherever such third-party notices normally appear. The contents
117+
of the NOTICE file are for informational purposes only and
118+
do not modify the License. You may add Your own attribution
119+
notices within Derivative Works that You distribute, alongside
120+
or as an addendum to the NOTICE text from the Work, provided
121+
that such additional attribution notices cannot be construed
122+
as modifying the License.
123+
124+
You may add Your own copyright statement to Your modifications and
125+
may provide additional or different license terms and conditions
126+
for use, reproduction, or distribution of Your modifications, or
127+
for any such Derivative Works as a whole, provided Your use,
128+
reproduction, and distribution of the Work otherwise complies with
129+
the conditions stated in this License.
130+
131+
5. Submission of Contributions. Unless You explicitly state otherwise,
132+
any Contribution intentionally submitted for inclusion in the Work
133+
by You to the Licensor shall be under the terms and conditions of
134+
this License, without any additional terms or conditions.
135+
Notwithstanding the above, nothing herein shall supersede or modify
136+
the terms of any separate license agreement you may have executed
137+
with Licensor regarding such Contributions.
138+
139+
6. Trademarks. This License does not grant permission to use the trade
140+
names, trademarks, service marks, or product names of the Licensor,
141+
except as required for reasonable and customary use in describing the
142+
origin of the Work and reproducing the content of the NOTICE file.
143+
144+
7. Disclaimer of Warranty. Unless required by applicable law or
145+
agreed to in writing, Licensor provides the Work (and each
146+
Contributor provides its Contributions) on an "AS IS" BASIS,
147+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148+
implied, including, without limitation, any warranties or conditions
149+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150+
PARTICULAR PURPOSE. You are solely responsible for determining the
151+
appropriateness of using or redistributing the Work and assume any
152+
risks associated with Your exercise of permissions under this License.
153+
154+
8. Limitation of Liability. In no event and under no legal theory,
155+
whether in tort (including negligence), contract, or otherwise,
156+
unless required by applicable law (such as deliberate and grossly
157+
negligent acts) or agreed to in writing, shall any Contributor be
158+
liable to You for damages, including any direct, indirect, special,
159+
incidental, or consequential damages of any character arising as a
160+
result of this License or out of the use or inability to use the
161+
Work (including but not limited to damages for loss of goodwill,
162+
work stoppage, computer failure or malfunction, or any and all
163+
other commercial damages or losses), even if such Contributor
164+
has been advised of the possibility of such damages.
165+
166+
9. Accepting Warranty or Additional Liability. While redistributing
167+
the Work or Derivative Works thereof, You may choose to offer,
168+
and charge a fee for, acceptance of support, warranty, indemnity,
169+
or other liability obligations and/or rights consistent with this
170+
License. However, in accepting such obligations, You may act only
171+
on Your own behalf and on Your sole responsibility, not on behalf
172+
of any other Contributor, and only if You agree to indemnify,
173+
defend, and hold each Contributor harmless for any liability
174+
incurred by, or claims asserted against, such Contributor by reason
175+
of your accepting any such warranty or additional liability.
176+
177+
END OF TERMS AND CONDITIONS
178+
179+
APPENDIX: How to apply the Apache License to your work.
180+
181+
To apply the Apache License to your work, attach the following
182+
boilerplate notice, with the fields enclosed by brackets "[]"
183+
replaced with your own identifying information. (Don't include
184+
the brackets!) The text should be enclosed in the appropriate
185+
comment syntax for the file format. We also recommend that a
186+
file or class name and description of purpose be included on the
187+
same "printed page" as the copyright notice for easier
188+
identification within third-party archives.
189+
190+
Copyright [yyyy] [name of copyright owner]
191+
192+
Licensed under the Apache License, Version 2.0 (the "License");
193+
you may not use this file except in compliance with the License.
194+
You may obtain a copy of the License at
195+
196+
http://www.apache.org/licenses/LICENSE-2.0
197+
198+
Unless required by applicable law or agreed to in writing, software
199+
distributed under the License is distributed on an "AS IS" BASIS,
200+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201+
See the License for the specific language governing permissions and
202+
limitations under the License.

mesop/pip_package/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Mesop
2+
3+
Mesop is an open-source package to build UIs in Python.
4+
5+
Source code: github.com/google/mesop

mesop/pip_package/__init__.py

Whitespace-only changes.
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
#!/bin/sh
2+
# Copyright 2015 The TensorFlow Authors. All Rights Reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
usage() {
17+
cat <<EOF
18+
usage: build_pip_package OUTPUT_DIR
19+
20+
Build mesop Pip packages and store the resulting wheel files
21+
into OUTPUT (a directory or "tar.gz" path).
22+
23+
Arguments:
24+
OUTPUT: A path ending in ".tar.gz" for the output archive, or else a
25+
path to an existing directory into which to store the wheel files
26+
directly.
27+
EOF
28+
}
29+
30+
main() {
31+
if [ $# -ne 1 ]; then
32+
usage 2>&1
33+
return 1
34+
fi
35+
output="$1"
36+
37+
if [ -z "${RUNFILES+set}" ]; then
38+
RUNFILES="$(CDPATH="" cd -- "$0.runfiles" && pwd)"
39+
fi
40+
41+
if [ "$(uname)" = "Darwin" ]; then
42+
workdir="$(mktemp -d -t mesop-pip)"
43+
else
44+
workdir="$(mktemp -d -p /tmp -t mesop-pip.XXXXXXXXXX)"
45+
fi
46+
original_wd="${PWD}"
47+
cd "${workdir}" || return 2
48+
49+
cleanup() {
50+
rm -r "${workdir}"
51+
}
52+
trap cleanup EXIT
53+
54+
log_file="${workdir}/log"
55+
build >"${log_file}" 2>&1
56+
exit_code=$?
57+
if [ "${exit_code}" -ne 0 ]; then
58+
cat "${log_file}" >&2
59+
fi
60+
return "${exit_code}"
61+
}
62+
63+
build() (
64+
set -eux
65+
if [ "$(uname)" = "Darwin" ]; then
66+
sedi="sed -i ''"
67+
else
68+
sedi="sed -i"
69+
fi
70+
71+
command -v virtualenv >/dev/null
72+
[ -d "${RUNFILES}" ]
73+
74+
cp -LR "${RUNFILES}/mesop/mesop" .
75+
cp -LR "${RUNFILES}/rules_python" .
76+
mv -f "mesop/pip_package/LICENSE" .
77+
mv -f "mesop/pip_package/MANIFEST.in" .
78+
mv -f "mesop/pip_package/README.md" .
79+
mv -f "mesop/pip_package/requirements.txt" .
80+
mv -f "mesop/pip_package/setup.cfg" .
81+
mv -f "mesop/pip_package/setup.py" .
82+
rm -rf "mesop/pip_package"
83+
84+
rm -f mesop/mesop # bazel py_binary sh wrapper
85+
chmod -x LICENSE # bazel symlinks confuse cp
86+
find . -name __init__.py -exec chmod -x {} + # which goes for all genfiles
87+
88+
89+
chmod -R u+w,go+r .
90+
91+
virtualenv -q -p python3 venv
92+
export VIRTUAL_ENV=venv
93+
export PATH="${PWD}/venv/bin:${PATH}"
94+
unset PYTHON_HOME
95+
96+
# Require wheel for bdist_wheel command, and setuptools 36.2.0+ so that
97+
# env markers are handled (https://github.com/pypa/setuptools/pull/1081)
98+
export PYTHONWARNINGS=ignore:DEPRECATION # suppress Python 2.7 deprecation spam
99+
pip install -qU wheel 'setuptools>=36.2.0'
100+
101+
# Overrides file timestamps in the zip archive to make the build
102+
# reproducible. (Date is mostly arbitrary, but must be past 1980 to be
103+
# representable in a zip archive.)
104+
export SOURCE_DATE_EPOCH=1577836800 # 2020-01-01T00:00:00Z
105+
106+
python setup.py bdist_wheel --python-tag py3 >/dev/null
107+
108+
cd "${original_wd}" # Bazel gives "${output}" as a relative path >_>
109+
case "${output}" in
110+
*.tar.gz)
111+
mkdir -p "$(dirname "${output}")"
112+
"${RUNFILES}/mesop/mesop/pip_package/deterministic_tar_gz" \
113+
"${output}" "${workdir}"/dist/*.whl
114+
;;
115+
*)
116+
if ! [ -d "${output}" ]; then
117+
printf >&2 'fatal: no such output directory: %s\n' "${output}"
118+
return 1
119+
fi
120+
mv "${workdir}"/dist/*.whl "${output}"
121+
;;
122+
esac
123+
)
124+
125+
main "$@"

0 commit comments

Comments
 (0)