From 9edfe609eace9dac1f8fb9f15e0fd075607e0537 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Mon, 29 Jan 2024 13:05:41 -0800 Subject: [PATCH 01/11] Removed deprecated files --- deprecated_Dockerfile.docs | 17 ----------------- deprecated_setup.cfg | 4 ---- 2 files changed, 21 deletions(-) delete mode 100644 deprecated_Dockerfile.docs delete mode 100644 deprecated_setup.cfg diff --git a/deprecated_Dockerfile.docs b/deprecated_Dockerfile.docs deleted file mode 100644 index 2125e089..00000000 --- a/deprecated_Dockerfile.docs +++ /dev/null @@ -1,17 +0,0 @@ -ARG img_user=driplineorg -ARG img_repo=dripline-python -ARG img_tag=main - -from ${img_user}/${img_repo}:${img_tag} - -COPY ./ /root/build - -RUN apt-get update && apt-get install -y \ - git - -WORKDIR /root/build -RUN pip3 install \ - sphinx \ - setuptools_scm \ - alabaster -RUN ls -la && python3 setup.py build_sphinx diff --git a/deprecated_setup.cfg b/deprecated_setup.cfg deleted file mode 100644 index 43d69714..00000000 --- a/deprecated_setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[build_sphinx] -source-dir = doc -build-dir = doc/_build -builder = html From 6365ebfce4a7443608d238b6899ee3539e53dbbc Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Mon, 29 Jan 2024 13:06:11 -0800 Subject: [PATCH 02/11] Added creation of new dl-py GitHub releases --- .github/workflows/publish.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index c4982f2f..bb35cf1e 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -114,3 +114,7 @@ jobs: img_tag=${{ env.BASE_IMAGE_TAG }} tags: ${{ steps.docker_meta.outputs.tags }} platforms: linux/amd64,linux/arm/v7,linux/arm64 + + - name: Release + uses: softprops/action-gh-release@v1 + if: ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags/') }} From 3d1f887953ef04c5fe540e3267f6b389c8cfa473 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Mon, 29 Jan 2024 13:20:04 -0800 Subject: [PATCH 03/11] Added ability to user ghcr (in parallel with Docker Hub) --- .github/workflows/publish.yaml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index bb35cf1e..e05c4d11 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -8,7 +8,8 @@ on: workflow_dispatch: env: - REGISTRY: docker.io + REGISTRY: ghcr.io + REGISTRY_OLD: docker.io BASE_IMAGE_USER: driplineorg BASE_IMAGE_REPO: dripline-cpp BASE_IMAGE_VER: 'v2.8.8' @@ -71,7 +72,9 @@ jobs: id: docker_meta uses: docker/metadata-action@v5 with: - images: driplineorg/dripline-python + images: | + ${{ env.REGISTRY_OLD }}/driplineorg/dripline-python + ${{ env.REGISTRY }}/driplineorg/dripline-python flavor: | latest=auto suffix=${{ matrix.tag-suffix }},onlatest=true @@ -93,12 +96,16 @@ jobs: - name: Login to Docker Hub uses: docker/login-action@v3 with: - registry: ${{ env.REGISTRY }} + registry: ${{ env.REGISTRY_OLD }} username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} -# for ghcr.io, use: -# username: ${{ github.actor }} -# password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push id: build_push From 24af77ce555eb6c176a4dbab2c3e5a5069c32ef7 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Fri, 2 Feb 2024 16:28:36 -0800 Subject: [PATCH 04/11] Fix copying of dl-py repo into the Docker container, and fix installation of _dripline into the site lib directory --- Dockerfile | 5 +++++ module_bindings/CMakeLists.txt | 4 ++-- module_bindings/README.md | 8 +++++++- setup.py | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b74db6db..29344ebc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,9 +19,14 @@ COPY module_bindings /usr/local/src_py/module_bindings COPY dripline /usr/local/src_py/dripline COPY bin /usr/local/src_py/bin COPY .git /usr/local/src_py/.git +COPY pyproject.toml /usr/local/src_py/pyproject.toml COPY setup.py /usr/local/src_py/setup.py COPY CMakeLists.txt /usr/local/src_py/CMakeLists.txt COPY tests /usr/local/src_py/tests +COPY LICENSE /usr/local/src_py/LICENSE +COPY README.md /usr/local/src_py/README.md +COPY pytest.ini /usr/local/src_py/pytest.ini + RUN pip install /usr/local/src_py diff --git a/module_bindings/CMakeLists.txt b/module_bindings/CMakeLists.txt index 53346430..1a20aca1 100644 --- a/module_bindings/CMakeLists.txt +++ b/module_bindings/CMakeLists.txt @@ -41,9 +41,9 @@ target_link_libraries( _dripline PUBLIC ${PUBLIC_EXT_LIBS} ) set( PY_MODULE_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} ) # Override that install location if specified by the user -if( DEFINED PBUILDER_PY_INSTALL_IN_SITELIB AND DEFINED Python3_SITELIB ) +if( INSTALL_DLPYBIND_IN_SITELIB AND DEFINED Python3_SITELIB ) set( PY_MODULE_INSTALL_DIR ${Python3_SITELIB} ) -endif( DEFINED PBUILDER_PY_INSTALL_IN_SITELIB AND DEFINED Python3_SITELIB ) +endif( INSTALL_DLPYBIND_IN_SITELIB AND DEFINED Python3_SITELIB ) message( STATUS "Installing module _dripline in ${PY_MODULE_INSTALL_DIR}" ) install( TARGETS _dripline DESTINATION ${PY_MODULE_INSTALL_DIR} ) diff --git a/module_bindings/README.md b/module_bindings/README.md index 92723ecb..9da7d286 100644 --- a/module_bindings/README.md +++ b/module_bindings/README.md @@ -1,4 +1,10 @@ -# General guides +# Library installation +The library file that contains the Python package can be installed in the Python site-packages directory, or +in the lib install directory. +- To install in site-packages (as defined by `${Python3_SITELIB}`), set `INSTALL_DLPYBIND_IN_SITELIB` to `TRUE` +- To install in the lib install directory (as defined by `${CMAKE_INSTALL_LIBDIR}`), set `INSTALL_DLPYBIND_IN_SITELIB` to `FALSE` + +# General python binding guides - The python module is defined in a single source file, it runs exporter functions defined in header files which correspond one-to-one with source files in dripline-python; they have names ending in `_pybind.hh`. - When needed, trampoline classes and extra functions in support of bindings should be defined in their own source and header files as needed. - It is preferrable to try to achieve pythonic interfaces for bound classes; this means naming arguments and providing default values where possible and including doc strings. diff --git a/setup.py b/setup.py index 6a2243bb..0c60d330 100644 --- a/setup.py +++ b/setup.py @@ -36,6 +36,7 @@ def build_extension(self, ext): cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, '-DPYTHON_EXECUTABLE=' + sys.executable, '-DCMAKE_INSTALL_PREFIX:PATH=/usr/local', + '-DINSTALL_DLPYBIND_IN_SITELIB=TRUE', ] cfg = 'Debug' if self.debug else 'Release' From 8f2d85fd72eec35847a44d60226398634d68c329 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Fri, 2 Feb 2024 18:27:34 -0800 Subject: [PATCH 05/11] Getting pybind11 versions to match. --- CMakeLists.txt | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cfcef32c..4854ce74 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set( PUBLIC_EXT_LIBS ) find_package( Threads REQUIRED ) list( APPEND PUBLIC_EXT_LIBS Threads::Threads ) -find_package( pybind11 2.3.0 REQUIRED ) +find_package( pybind11 2.6.0 REQUIRED ) list( APPEND PUBLIC_EXT_LIBS pybind11::module ) find_package( Dripline CONFIG REQUIRED ) diff --git a/pyproject.toml b/pyproject.toml index f46a37e1..d54224dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = [ "setuptools>=61", "setuptools-scm>=8.0", "wheel", - "pybind11>=2.6.1", + "pybind11>=2.6.0", "cmake>=3.12", ] build-backend = "setuptools.build_meta" From 38ebf382ccc5873212b3346155d9f19b1d8e91ef Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Fri, 2 Feb 2024 18:27:49 -0800 Subject: [PATCH 06/11] Updating installation instructions --- doc/getting_started.rst | 115 +++++++++++++++++++++++++++++++--------- 1 file changed, 89 insertions(+), 26 deletions(-) diff --git a/doc/getting_started.rst b/doc/getting_started.rst index bad05787..b2a2cf07 100644 --- a/doc/getting_started.rst +++ b/doc/getting_started.rst @@ -5,42 +5,45 @@ Getting Started System Requirements ******************* -The development of dripline is being done primarily on OS X (with packages installed via homebrew and python packages through pip) and debian linux (with any system-packages from apt and python pacakges through pip). -Much work is also done in :ref:`docker_containers` described below. -We have not attempted to fully track compatible versions of all dependencies, or minimal versions. -We do, however, know the following: - -* dripline-python requires python >= 3.6 because it leverages the f-string feature -* when not explicitly pinned in the setup.py file or Dockerfil, the "current" versions are installed from PyPI when developing and testing -* tagged container images are believed to work, you should be able to run any of them and use ``pip freeze`` to check the full set of versions from the time of any available tag. +Dripline-python is developed specifically for container-based workflows, including development and deployment, +and that is the only approach we encourage or fully support. +Dripline-python has also been used directly on host systems including MacOS and Debian/Ubuntu Linux. +It has not been tested on Windows systems. -Installation -************ +We have not attempted to fully track compatible versions of all dependencies, or minimal versions. +We do, however, know the following: -Dripline-python is developed specifically for container-based workflows, including development and deployment, and that is the only approach we encourage or support. -In principle, there is nothing to prevent installing and running directly on your host system, but you will need to be careful about the potential for conflicting dependency versions (that should probably be done in a virtualenvironment, but that's up to you). -If you're new to containers, consider starting with the `getting started docs from Docker Inc. `_; most contributors develop using the OS-native "desktop application" available there. +* Dripline-python requires Python >= 3.6 because it leverages the f-string feature +* When not explicitly pinned in the setup.py file or Dockerfile, the "current" versions are installed from PyPI when developing and testing +* Tagged container images are believed to work, you should be able to run any of them and use ``pip freeze`` to check the full set of versions from the time of any available tag. -.. _docker_containers: +If you are using Dripline in a Docker container, please go directly to :ref:`docker_containers`. -Docker containers ------------------ +Non-Python Dependencies +************************* -The easiest way to get started with dripline is simply to use a container image from the `dockerhub repository `_. -These are built automatically based on tagged releases, as well as merges into the main or develop branch. -Images are automatically built for both x86 and armv7 architectures, and a container manifest allows use of common tag references to resolve to the architectures-specific images. +Dripline-python is wraps and extends the C++ package `dripline-cpp `. +To install dripline-cpp, please consult its +`installation instructions ` (use the "standalone" option). +If you install dripline-cpp in a non-system installation location (e.g. ``/usr/local``), you will need to know +the location of the installed CMake config files for the dripline-python build below (usually ``[prefix]/lib/cmake/Dripline``). -You may also use the ``Dockerfile`` located in the dripline-python GitHub repository's root directory to build the image yourself (the full repository is the required build context). -Note that the Dockerfile provides arguments for specifing the base image details, the defaults there will hopefully be kept current, but the automatic build configurations actively pass overrides based on the ``.travis.yml`` file, also in the repo's root. +The Python wrapping of C++ code is done with `Pybind11 `. +Version 2.6.0 or higher is required. +It can be installed from most package managers or by following their instructions. +You will need `CMake ` to build the C++ wrappers. +Version 3.5 or higher is required. +It can be installed from most package managers or by following their instructions. Python Libraries **************** -If working with containers, the dependencies should all be installed (generally from PyPI), here we discuss briefly those features enabled by each. - +If working with containers, the dependencies should all be installed (generally from PyPI). +If installing on a host machine, you will need to be careful about the potential for +conflicting dependency versions (which, ideally, should be done in a virtual environment). Required -------- @@ -49,7 +52,8 @@ The following dependencies are required for core functionality and thus non-opti `PyYAML `_ is used to read yaml formatted configuration files. -`asteval `_ is used to process python statements presented as strings (sometimes provided as strings in start-up configurations or as part of calibration definitions). +`asteval `_ is used to process python statements presented as strings +(sometimes provided as strings in start-up configurations or as part of calibration definitions). Building Docs [doc] @@ -74,6 +78,65 @@ Helpful Python Packages The following packages are not actually dependencies for any aspect of dripline. They are, however, highly recommended (especially for anyone relatively new to python). -`ipython `_ and `ipdb `_ are both highly recomended for all non-production workflows. -The expanded tab completion, command and output history, and doc access make it a powerful python interpretor for developing or manually interacting with dripline components. +`ipython `_ and `ipdb `_ are both highly recomended +for all non-production workflows. +The expanded tab completion, command and output history, and doc access make it a powerful python interpretor +for developing or manually interacting with dripline components. + + + +Installation +************ + +We highly recommend using dripline-python in a Docker container. However, there is nothing to prevent +installing and running directly on your host system. For using Docker containers, see the next section. +For installing on a host machine, skip to :ref:`host_install:`. + + +.. _docker_containers: + +Docker containers +----------------- + +If you're new to containers, consider starting with the +`getting started docs from Docker Inc. `_; +most contributors develop using the OS-native "desktop application" available there. + +The easiest way to get started with dripline is simply to use a container image from the +`dockerhub repository `_. +These are built automatically based on tagged releases, as well as merges into the main or develop branch. +Images are automatically built for both x86 and armv7 architectures, and a container manifest allows +use of common tag references to resolve to the architectures-specific images. + +You may also use the ``Dockerfile`` located in the dripline-python GitHub repository's root directory +to build the image yourself (the full repository is the required build context). +Note that the Dockerfile provides arguments for specifing the base image details, the defaults there will +hopefully be kept current, but the automatic build configurations actively pass overrides based on +the GitHub Actions ``publish.yaml`` file (``.github/workflows/publish.yaml``). + +.. _host_install: + +Direct installation +------------------- + +We highly recommend using a virtual environment for this installation (e.g. virtualenv or conda). + +First, clone the dripline-python repository: + + ``> git clone git@github.com:driplineorg/dripline-python`` + +or download a zip file of the source from `GitHub ` and unpack it. + +From the top directory of dripline-python, build with ``pip``. You have a few options for what that command looks like: + +If dripline-cpp was installed in a system location (e.g. `/usr/local`), that will look like: + + ``> pip install . + +If you want to install so that you can edit the dripline-python code, use the ``-e`` option: + + ``> pip install -e .`` + +If you need to specify the location of dripline-cpp, set the ``Dripline_DIR`` environment variable first, e.g.: + ``> Dripline_DIR=/install/prefix/lib/cmake/Dripline pip install .`` From 768d6bd4a073648e8f6ed5bd53ced68d3a1405ff Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Sat, 3 Feb 2024 14:57:22 -0800 Subject: [PATCH 07/11] Fixing links; adding dependencies --- doc/getting_started.rst | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/doc/getting_started.rst b/doc/getting_started.rst index b2a2cf07..ef39b9a0 100644 --- a/doc/getting_started.rst +++ b/doc/getting_started.rst @@ -24,17 +24,21 @@ If you are using Dripline in a Docker container, please go directly to :ref:`doc Non-Python Dependencies ************************* -Dripline-python is wraps and extends the C++ package `dripline-cpp `. +Dripline-python is wraps and extends the C++ package `dripline-cpp `_. To install dripline-cpp, please consult its -`installation instructions ` (use the "standalone" option). +`installation instructions `_ (use the "standalone" option). If you install dripline-cpp in a non-system installation location (e.g. ``/usr/local``), you will need to know the location of the installed CMake config files for the dripline-python build below (usually ``[prefix]/lib/cmake/Dripline``). -The Python wrapping of C++ code is done with `Pybind11 `. +Dripline-cpp currently requires (all versions are minima): C++17 (via gcc or clang), CMake v3.5, +Boost 1.46, rapidjson 1.0, yaml-cpp, and rabbitmq-c. +Everything should be available from standard package managers. + +The Python wrapping of C++ code is done with `Pybind11 `_. Version 2.6.0 or higher is required. It can be installed from most package managers or by following their instructions. -You will need `CMake ` to build the C++ wrappers. +You will need `CMake `_ to build the C++ wrappers. Version 3.5 or higher is required. It can be installed from most package managers or by following their instructions. @@ -125,7 +129,7 @@ First, clone the dripline-python repository: ``> git clone git@github.com:driplineorg/dripline-python`` -or download a zip file of the source from `GitHub ` and unpack it. +or download a zip file of the source from `GitHub `_ and unpack it. From the top directory of dripline-python, build with ``pip``. You have a few options for what that command looks like: From 5058da378096f3ce0009175edb36544597f60f7e Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Sat, 3 Feb 2024 15:03:55 -0800 Subject: [PATCH 08/11] Formatting fixes --- doc/getting_started.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/getting_started.rst b/doc/getting_started.rst index ef39b9a0..5613529e 100644 --- a/doc/getting_started.rst +++ b/doc/getting_started.rst @@ -94,7 +94,7 @@ Installation We highly recommend using dripline-python in a Docker container. However, there is nothing to prevent installing and running directly on your host system. For using Docker containers, see the next section. -For installing on a host machine, skip to :ref:`host_install:`. +For installing on a host machine, skip to :ref:`host_install`. .. _docker_containers: @@ -127,7 +127,7 @@ We highly recommend using a virtual environment for this installation (e.g. virt First, clone the dripline-python repository: - ``> git clone git@github.com:driplineorg/dripline-python`` + ``> git clone git@github.com:driplineorg/dripline-python`` or download a zip file of the source from `GitHub `_ and unpack it. @@ -135,7 +135,7 @@ From the top directory of dripline-python, build with ``pip``. You have a few o If dripline-cpp was installed in a system location (e.g. `/usr/local`), that will look like: - ``> pip install . + ``> pip install .`` If you want to install so that you can edit the dripline-python code, use the ``-e`` option: From d4b900804c100f6fcf5c5bcdf320d29394007bb1 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Sat, 3 Feb 2024 16:55:08 -0800 Subject: [PATCH 09/11] Updating recommendations for the dl-cpp install --- doc/getting_started.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/getting_started.rst b/doc/getting_started.rst index 5613529e..93e924ca 100644 --- a/doc/getting_started.rst +++ b/doc/getting_started.rst @@ -27,8 +27,12 @@ Non-Python Dependencies Dripline-python is wraps and extends the C++ package `dripline-cpp `_. To install dripline-cpp, please consult its `installation instructions `_ (use the "standalone" option). -If you install dripline-cpp in a non-system installation location (e.g. ``/usr/local``), you will need to know -the location of the installed CMake config files for the dripline-python build below (usually ``[prefix]/lib/cmake/Dripline``). +We recommend you set the CMake variable ``PBUILDER_PY_INSTALL_IN_SITELIB`` to ``TRUE`` so that the scarab +python package is installed in the Python site-packages directory. +If you install dripline-cpp in a non-system installation location (e.g. with the default install prefix, +which is inside the build directory), you will need to know the location of the installed CMake config files +for the dripline-python build below (usually ``[prefix]/lib/cmake/Dripline``). As an alternative, you could +make a system-wide install at ``/usr/local``. Dripline-cpp currently requires (all versions are minima): C++17 (via gcc or clang), CMake v3.5, Boost 1.46, rapidjson 1.0, yaml-cpp, and rabbitmq-c. From 61e2aea76cc20ea87a818e8c12960ecf01925d7a Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Mon, 5 Feb 2024 15:46:35 -0800 Subject: [PATCH 10/11] Bumped version to v4.6.1 --- CMakeLists.txt | 2 +- chart/Chart.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4854ce74..62b62366 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) # <3.5 is deprecated by CMake -project( DriplinePy VERSION 4.6.0 ) +project( DriplinePy VERSION 4.6.1 ) cmake_policy( SET CMP0074 NEW ) diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 7510c3ff..bc6c519d 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v1 ## the appVersion is used as the container image tag for the main container in the pod from the deployment ## it can be overridden by a values.yaml file in image.tag -appVersion: "v4.6.0" +appVersion: "v4.6.1" description: Deploy a dripline-python microservice name: dripline-python version: 1.1.2 From 1e21b8ef2712eddd0bb21ab80b5002830b95baff Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Mon, 5 Feb 2024 15:46:57 -0800 Subject: [PATCH 11/11] Switching license to the Apache license, to match dl-cpp --- LICENSE | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 165 insertions(+), 18 deletions(-) diff --git a/LICENSE b/LICENSE index 8733aa8b..c4d67823 100644 --- a/LICENSE +++ b/LICENSE @@ -1,28 +1,175 @@ -Copyright (c) the Copyright Holders of Dripline and the Project 8 Collaboration, 2015. -See the file AUTHORS for details on the copyright holders. -All rights not expressly granted under this license are reserved. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Installation, use, reproduction, display, modification and redistribution of this software, with or without modification, in source and binary forms, are permitted on a non-exclusive basis. Any exercise of rights by you under this license is subject to the following conditions: + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Redistributions of this software, in whole or in part, with or without modification, must reproduce the above copyright notice and these license conditions in this software, the user documentation and any other materials provided with the redistributed software. By using, copying, modifying or distributing the software (or any work based on the software) you agree to acknowledge its use in resulting scientific publications. + 1. Definitions. -2. The user documentation, if any, included with a redistribution, must include the following notice: -"This product includes software developed by the Copyright Holders of Dripline and the Project 8 Collaboration" + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -If that is where third-party acknowledgments normally appear, this acknowledgment must be reproduced in the modified version of this software itself. - -3. The names "Dripline" and "Project 8" may not be used to endorse or promote software, or products derived therefrom, except with prior written permission by the Project 8 Collaboration. If this software is redistributed in modified form, the name and reference of the modified version must be clearly distinguishable from that of this software. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -4. You are under no obligation to provide anyone with any modifications of this software that you may develop, including but not limited to bug fixes, patches, upgrades or other enhancements or derivatives of the features, functionality or performance of this software. However, if you publish or distribute your modifications without contemporaneously requiring users to enter into a separate written license agreement, then you are deemed to have granted all Copyright Holders and members of the Project 8 Collaboration a license to your modifications, including modifications protected by any patent owned by you, under the conditions of this license. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -5. You may not include this software in whole or in part in any patent or patent application in respect of any modification of this software developed by you. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -6. DISCLAIMER - -THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE PROJECT 8 COLLABORATION AND THE COPYRIGHT HOLDERS OF DRIPLINE AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, OF SATISFACTORY QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE OR USE ARE DISCLAIMED. THE COPYRIGHT HOLDERS AND THE PROJECT 8 COLLABORATION MAKE NO REPRESENTATION THAT THE SOFTWARE AND MODIFICATIONS THEREOF, WILL NOT INFRINGE ANY PATENT, COPYRIGHT, TRADE SECRET OR OTHER PROPRIETARY RIGHT. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -7. LIMITATION OF LIABILITY + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -THE COPYRIGHT HOLDERS AND THE MEMBERS OF THE PROJECT 8 COLLABORATION SHALL HAVE NO LIABILITY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA OR PROFITS, OR BUSINESS INTERRUPTION, HOWEVER CAUSED AND ON ANY THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR OTHERWISE, ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -8. This license shall terminate with immediate effect and without notice if you fail to comply with any of the terms of this license, or if you institute litigation against any Copyright Holder or member of the Project 8 Collaboration with regard to this software. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + \ No newline at end of file