From ac80d23ea08ff00b4c72934cc31c96ca566c99c3 Mon Sep 17 00:00:00 2001 From: Oguzhan Unlu Date: Thu, 27 Jun 2019 16:28:29 +0300 Subject: [PATCH 1/8] Remove Vagrant & Ansible (close #222) --- Vagrantfile | 23 ----------- vagrant/.gitignore | 3 -- vagrant/ansible.hosts | 2 - vagrant/peru.yaml | 14 ------- vagrant/push.bash | 92 ------------------------------------------- vagrant/up.bash | 50 ----------------------- vagrant/up.guidance | 5 --- vagrant/up.playbooks | 2 - 8 files changed, 191 deletions(-) delete mode 100644 Vagrantfile delete mode 100644 vagrant/.gitignore delete mode 100644 vagrant/ansible.hosts delete mode 100644 vagrant/peru.yaml delete mode 100755 vagrant/push.bash delete mode 100755 vagrant/up.bash delete mode 100644 vagrant/up.guidance delete mode 100644 vagrant/up.playbooks diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 04da4b6d..00000000 --- a/Vagrantfile +++ /dev/null @@ -1,23 +0,0 @@ -Vagrant.configure("2") do |config| - - config.vm.box = "ubuntu/trusty64" - config.vm.hostname = "snowplow-python-tracker" - config.ssh.forward_agent = true - - config.vm.provider :virtualbox do |vb| - vb.name = Dir.pwd().split("/")[-1] + "-" + Time.now.to_f.to_i.to_s - vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] - vb.customize [ "guestproperty", "set", :id, "--timesync-threshold", 10000 ] - vb.memory = 2048 - end - - config.vm.provision :shell do |sh| - sh.path = "vagrant/up.bash" - end - - # Requires Vagrant 1.7.0+ - config.push.define "publish", strategy: "local-exec" do |push| - push.script = "vagrant/push.bash" - end - -end diff --git a/vagrant/.gitignore b/vagrant/.gitignore deleted file mode 100644 index 5b164d31..00000000 --- a/vagrant/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -oss-playbooks -ansible -.peru diff --git a/vagrant/ansible.hosts b/vagrant/ansible.hosts deleted file mode 100644 index 588fa08c..00000000 --- a/vagrant/ansible.hosts +++ /dev/null @@ -1,2 +0,0 @@ -[vagrant] -127.0.0.1:2222 diff --git a/vagrant/peru.yaml b/vagrant/peru.yaml deleted file mode 100644 index e7fdf41c..00000000 --- a/vagrant/peru.yaml +++ /dev/null @@ -1,14 +0,0 @@ -imports: - ansible: ansible - ansible_playbooks: oss-playbooks - -curl module ansible: - # Equivalent of git cloning tags/v1.6.6 but much, much faster - url: https://codeload.github.com/ansible/ansible/zip/69d85c22c7475ccf8169b6ec9dee3ee28c92a314 - unpack: zip - export: ansible-69d85c22c7475ccf8169b6ec9dee3ee28c92a314 - -git module ansible_playbooks: - url: https://github.com/snowplow/ansible-playbooks.git - # Comment out to fetch a specific rev instead of master: - # rev: xxx diff --git a/vagrant/push.bash b/vagrant/push.bash deleted file mode 100755 index 840b5b0e..00000000 --- a/vagrant/push.bash +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash -set -e - -project_path="/vagrant" -python_bin="~/snowplow-python-2.7-tracker-environment/bin/python2.7" - -# Similar to Perl die -function die() { - echo "$@" 1>&2 ; exit 1; -} - -# Check if our Vagrant box is running. Expects `vagrant status` to look like: -# -# > Current machine states: -# > -# > default poweroff (virtualbox) -# > -# > The VM is powered off. To restart the VM, simply run `vagrant up` -# -# Parameters: -# 1. out_running (out parameter) -function is_running { - [ "$#" -eq 1 ] || die "1 argument required, $# provided" - local __out_running=$1 - - set +e - vagrant status | sed -n 3p | grep -q "^default\s*running (virtualbox)$" - local retval=${?} - set -e - if [ ${retval} -eq "0" ] ; then - eval ${__out_running}=1 - else - eval ${__out_running}=0 - fi -} - -# Get version, checking we are on the latest -# -# Parameters: -# 1. out_version (out parameter) -# 2. out_error (out parameter) -function get_version { - [ "$#" -eq 2 ] || die "2 arguments required, $# provided" - local __out_version=$1 - local __out_error=$2 - - # Extract the version from package.json using Node and save it in a file named "VERSION" - vagrant ssh -c "cd ${project_path} && ${python_bin} -c \"v={}; execfile('snowplow_tracker/_version.py', v); print v['__version__']\" > VERSION" - file_version=`cat VERSION` - tag_version=`git describe --abbrev=0 --tags` - if [ ${file_version} != ${tag_version} ] ; then - eval ${__out_error}="'File version ${file_version} != tag version ${tag_version}'" - else - eval ${__out_version}=${file_version} - fi -} - -# Go to parent-parent dir of this script -function cd_root() { - source="${BASH_SOURCE[0]}" - while [ -h "${source}" ] ; do source="$(readlink "${source}")"; done - dir="$( cd -P "$( dirname "${source}" )/.." && pwd )" - cd ${dir} -} - -function upload_to_pypi() { - - # Register the new release with PyPI - echo "Registering the release with PyPI. Choose option 1..." - vagrant ssh -c "cd ${project_path} && ${python_bin} setup.py register" - - # Upload the new release to PyPI - echo "Uploading the file to PyPI. IMPORTANT: PyPI does not allow a file to be re-uploaded." - read -p "Do you want to upload the file to PyPI? [Y/N]" -n 1 -r - if [[ $REPLY =~ ^[Yy]$ ]] - then - # We have to upload from a folder which supports hard-linking (which guest folders shared with host don't) - vagrant ssh -c "cd \$(mktemp -d) && cp -r ${project_path}/* . && ${python_bin} setup.py sdist upload" - fi -} - -cd_root - -# Precondition for running -running=0 && is_running "running" -[ ${running} -eq 1 ] || die "Vagrant guest must be running to push" - -# Git tag must match version in snowplow_tracker/_version.py -version="" && error="" && get_version "version" "error" -[ "${error}" ] && die "Versions don't match: ${error}. Are you trying to publish an old version, or maybe on the wrong branch?" - -upload_to_pypi diff --git a/vagrant/up.bash b/vagrant/up.bash deleted file mode 100755 index 7450ae89..00000000 --- a/vagrant/up.bash +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -set -e - -vagrant_dir=/vagrant/vagrant -bashrc=/home/vagrant/.bashrc - -echo "========================================" -echo "INSTALLING PERU AND ANSIBLE DEPENDENCIES" -echo "----------------------------------------" -apt-get update -apt-get install -y language-pack-en git unzip libyaml-dev python3-pip python-yaml python-paramiko python-jinja2 - -echo "===============" -echo "INSTALLING PERU" -echo "---------------" -sudo pip3 install peru - -echo "=======================================" -echo "CLONING ANSIBLE AND PLAYBOOKS WITH PERU" -echo "---------------------------------------" -cd ${vagrant_dir} && peru sync -v -echo "... done" - -env_setup=${vagrant_dir}/ansible/hacking/env-setup -hosts=${vagrant_dir}/ansible.hosts - -echo "===================" -echo "CONFIGURING ANSIBLE" -echo "-------------------" -touch ${bashrc} -echo "source ${env_setup}" >> ${bashrc} -echo "export ANSIBLE_HOSTS=${hosts}" >> ${bashrc} -echo "... done" - -echo "==========================================" -echo "RUNNING PLAYBOOKS WITH ANSIBLE*" -echo "* no output while each playbook is running" -echo "------------------------------------------" -while read pb; do - su - -c "source ${env_setup} && ${vagrant_dir}/ansible/bin/ansible-playbook ${vagrant_dir}/${pb} --connection=local --inventory-file=${hosts}" vagrant -done <${vagrant_dir}/up.playbooks - -guidance=${vagrant_dir}/up.guidance - -if [ -f ${guidance} ]; then - echo "===========" - echo "PLEASE READ" - echo "-----------" - cat $guidance -fi diff --git a/vagrant/up.guidance b/vagrant/up.guidance deleted file mode 100644 index e1571af2..00000000 --- a/vagrant/up.guidance +++ /dev/null @@ -1,5 +0,0 @@ -To get started: -vagrant ssh -cd /vagrant -./run-tests.sh deploy -./run-tests.sh test diff --git a/vagrant/up.playbooks b/vagrant/up.playbooks deleted file mode 100644 index 9e800eeb..00000000 --- a/vagrant/up.playbooks +++ /dev/null @@ -1,2 +0,0 @@ -oss-playbooks/python-pyenv.yml -oss-playbooks/snowplow-python-tracker.yml From 841aaf6985e3bea6e656a0de324f1b10e96f5834 Mon Sep 17 00:00:00 2001 From: akachanov Date: Mon, 22 Apr 2019 20:08:03 +0300 Subject: [PATCH 2/8] Bump max version requirement of redis (close #223) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 48f7ce13..c5234717 100644 --- a/setup.py +++ b/setup.py @@ -80,7 +80,7 @@ "pycontracts>=1.7.6,<2.0", "celery>=4.0,<5.0", "gevent>=1.0.2,<2.0", - "redis>=2.9.1,<3.0", + "redis>=2.9.1,<4.0", "six>=1.9.0,<2.0" ], ) From 033949944b5497f7256a643b0b087ba5d5b6d314 Mon Sep 17 00:00:00 2001 From: Mark Walle Date: Mon, 25 Mar 2019 19:06:15 -0700 Subject: [PATCH 3/8] Fix on_failure param docstring description (close #225) --- snowplow_tracker/emitters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snowplow_tracker/emitters.py b/snowplow_tracker/emitters.py index ff2380cc..1608d330 100644 --- a/snowplow_tracker/emitters.py +++ b/snowplow_tracker/emitters.py @@ -84,7 +84,7 @@ def __init__(self, endpoint, protocol="http", port=None, method="get", buffer_si :param on_success: Callback executed after every HTTP request in a flush has status code 200 Gets passed the number of events flushed. :type on_success: function | None - :param on_failure: Callback executed if at least one HTTP request in a flush has status code 200 + :param on_failure: Callback executed if at least one HTTP request in a flush has status code other than 200 Gets passed two arguments: 1) The number of events which were successfully sent 2) If method is "post": The unsent data in string form; @@ -342,7 +342,7 @@ def __init__( :param on_success: Callback executed after every HTTP request in a flush has status code 200 Gets passed the number of events flushed. :type on_success: function | None - :param on_failure: Callback executed if at least one HTTP request in a flush has status code 200 + :param on_failure: Callback executed if at least one HTTP request in a flush has status code other than 200 Gets passed two arguments: 1) The number of events which were successfully sent 2) If method is "post": The unsent data in string form; From 481ec5196745815ba0a3cee79f19cd845439b4a4 Mon Sep 17 00:00:00 2001 From: Joshua Blum Date: Tue, 7 Feb 2017 12:13:32 -0500 Subject: [PATCH 4/8] Allow empty strings in string_or_none contract (close #184) --- snowplow_tracker/tracker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snowplow_tracker/tracker.py b/snowplow_tracker/tracker.py index 18516925..9abdcc25 100644 --- a/snowplow_tracker/tracker.py +++ b/snowplow_tracker/tracker.py @@ -59,8 +59,8 @@ class Tracker: new_contract("non_empty_string", lambda s: isinstance(s, six.string_types) and len(s) > 0) - new_contract("string_or_none", lambda s: (isinstance(s, six.string_types) - and len(s) > 0) or s is None) + new_contract("string_or_none", lambda s: isinstance(s, six.string_types) + or s is None) new_contract("payload", lambda s: isinstance(s, payload.Payload)) new_contract("tracker", lambda s: isinstance(s, Tracker)) From 86bad20a6100234804b005ac95ad1ccc3184c868 Mon Sep 17 00:00:00 2001 From: Jack Williamson Date: Tue, 28 May 2019 14:40:44 -0700 Subject: [PATCH 5/8] Allow non ascii characters to be encoded using Base64 (close #194) --- snowplow_tracker/payload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowplow_tracker/payload.py b/snowplow_tracker/payload.py index c7c788b5..894505c7 100644 --- a/snowplow_tracker/payload.py +++ b/snowplow_tracker/payload.py @@ -82,7 +82,7 @@ def add_json(self, dict_, encode_base64, type_when_encoded, type_when_not_encode json_dict = json.dumps(dict_, ensure_ascii=False) if encode_base64: - encoded_dict = base64.urlsafe_b64encode(json_dict.encode("ascii")) + encoded_dict = base64.urlsafe_b64encode(json_dict.encode("utf-8")) if not isinstance(encoded_dict, str): encoded_dict = encoded_dict.decode("utf-8") self.add(type_when_encoded, encoded_dict) From 695387f634dd949cf26834fa25d6b697dbaeda59 Mon Sep 17 00:00:00 2001 From: Julio Menendez Date: Mon, 5 Mar 2018 14:55:58 -0800 Subject: [PATCH 6/8] Initialize Celery in CeleryEmitter (close #226) --- snowplow_tracker/emitters.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/snowplow_tracker/emitters.py b/snowplow_tracker/emitters.py index 1608d330..6d41d531 100644 --- a/snowplow_tracker/emitters.py +++ b/snowplow_tracker/emitters.py @@ -51,16 +51,6 @@ new_contract("redis", lambda x: isinstance(x, (redis.Redis, redis.StrictRedis))) -try: - # Check whether a custom Celery configuration module named "snowplow_celery_config" exists - import snowplow_celery_config - app = Celery() - app.config_from_object(snowplow_celery_config) -except ImportError: - # Otherwise configure Celery with default settings - snowplow_celery_config = None - app = Celery("Snowplow", broker="redis://guest@localhost//") - class Emitter(object): """ @@ -385,30 +375,38 @@ def consume(self): self.queue.task_done() -@app.task(bind=True, name='tasks.flush') # the self passed with bind can be used for on_fail/retrying -def flush_emitter(self, emitter): - try: - emitter.flush() - finally: - logger.info("Flush called on emitter") - - class CeleryEmitter(Emitter): """ Uses a Celery worker to send HTTP requests asynchronously. Works like the base Emitter class, but on_success and on_failure callbacks cannot be set. """ + celery_app = None + def __init__(self, endpoint, protocol="http", port=None, method="get", buffer_size=None, byte_limit=None): super(CeleryEmitter, self).__init__(endpoint, protocol, port, method, buffer_size, None, None, byte_limit) + try: + # Check whether a custom Celery configuration module named "snowplow_celery_config" exists + import snowplow_celery_config + self.celery_app = Celery() + self.celery_app.config_from_object(snowplow_celery_config) + except ImportError: + # Otherwise configure Celery with default settings + self.celery_app = Celery("Snowplow", broker="redis://guest@localhost//") + + self.async_flush = self.celery_app.task(self.async_flush) + def flush(self): """ Schedules a flush task """ - flush_emitter.delay(self) # passes emitter (self - CeleryEmitter) to task + self.async_flush.delay() logger.info("Scheduled a Celery task to flush the event queue") + def async_flush(self): + super(CeleryEmitter, self).flush() + class RedisEmitter(object): """ From 9571ad26f40b38ef6d37ea1af3eb61f9a34d3b8a Mon Sep 17 00:00:00 2001 From: Oguzhan Unlu Date: Fri, 28 Jun 2019 11:34:23 +0300 Subject: [PATCH 7/8] Fix test_bytelimit test (close #227) --- snowplow_tracker/test/integration/test_integration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowplow_tracker/test/integration/test_integration.py b/snowplow_tracker/test/integration/test_integration.py index 454e1c9e..8fbee704 100644 --- a/snowplow_tracker/test/integration/test_integration.py +++ b/snowplow_tracker/test/integration/test_integration.py @@ -329,4 +329,4 @@ def test_bytelimit(self): t.track_struct_event("Test", "A") # 420 bytes. Send t.track_struct_event("Test", "AA") # 141 self.assertEquals(len(querystrings[-1]["data"]), 3) - self.assertEqual(post_emitter.bytes_queued, 141) + self.assertEqual(post_emitter.bytes_queued, 136 + len(_version.__version__)) From 47659e6fa853f5d6a2d483e7d3f8d567311b4fda Mon Sep 17 00:00:00 2001 From: Oguzhan Unlu Date: Fri, 28 Jun 2019 11:00:27 +0300 Subject: [PATCH 8/8] Prepared for release --- CHANGES.txt | 10 ++++++ README.rst | 32 +++++++------------ setup.py | 4 +-- snowplow_tracker/_version.py | 6 ++-- snowplow_tracker/emitters.py | 4 +-- snowplow_tracker/payload.py | 4 +-- snowplow_tracker/redis_worker.py | 4 +-- snowplow_tracker/self_describing_json.py | 4 +-- snowplow_tracker/subject.py | 4 +-- .../test/integration/test_integration.py | 4 +-- snowplow_tracker/test/unit/test_payload.py | 4 +-- snowplow_tracker/test/unit/test_tracker.py | 4 +-- snowplow_tracker/timestamp.py | 4 +-- snowplow_tracker/tracker.py | 4 +-- 14 files changed, 47 insertions(+), 45 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c98c9b68..d302f940 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,13 @@ +Version 0.8.3 (2019-06-28) +-------------------------- +Fix test_bytelimit test (#227) +Initialize Celery in CeleryEmitter (#226) +Allow non ascii characters to be encoded using Base64 (#194) +Allow empty strings in string_or_none contract (#184) +Fix on_failure param docstring description (#225) +Bump max version requirement of redis (#223) +Remove Vagrant & Ansible (#222) + Version 0.8.2 (2018-12-01) -------------------------- Fix date for 0.8.0 release in CHANGELOG (#183) diff --git a/README.rst b/README.rst index b3d5079e..408a82c8 100644 --- a/README.rst +++ b/README.rst @@ -1,13 +1,13 @@ ====================================================== Python Analytics for Snowplow ====================================================== -.. image:: https://travis-ci.org/snowplow/snowplow-python-tracker.png?branch=master +.. image:: https://travis-ci.org/snowplow/snowplow-python-tracker.svg?branch=master :alt: Build Status :target: https://travis-ci.org/snowplow/snowplow-python-tracker -.. image:: https://badge.fury.io/py/snowplow-tracker.png +.. image:: https://badge.fury.io/py/snowplow-tracker.svg :target: http://badge.fury.io/py/snowplow-tracker -.. image:: https://coveralls.io/repos/snowplow/snowplow-python-tracker/badge.png - :target: https://coveralls.io/r/snowplow/snowplow-python-tracker +.. image:: https://coveralls.io/repos/github/snowplow/snowplow-python-tracker/badge.svg?branch=master + :target: https://coveralls.io/github/snowplow/snowplow-python-tracker?branch=master .. image:: http://img.shields.io/badge/license-Apache--2-blue.svg?style=flat :target: http://www.apache.org/licenses/LICENSE-2.0 @@ -46,33 +46,25 @@ Find out more .. _`Roadmap`: https://github.com/snowplow/snowplow/wiki/Python-Tracker-Roadmap .. _`Contributing`: https://github.com/snowplow/snowplow/wiki/Python-Tracker-Contributing -Contributing quickstart +Quickstart ####################### -Assuming Git, Vagrant_ and VirtualBox_ are installed: +Assuming pyenv_ is installed :: host$ git clone git@github.com:snowplow/snowplow-python-tracker.git - host$ vagrant up && vagrant ssh - guest$ cd /vagrant - guest$ ./run-tests.sh deploy - guest$ ./run-tests.sh test + host$ cd snowplow-python-tracker + host$ pyenv install 2.7.15 && pyenv install 3.4.9 && pyenv install 3.5.2 && pyenv install 3.7.1 + host$ ./run-tests.sh deploy + host$ ./run-tests.sh test -.. _Vagrant: http://docs.vagrantup.com/v2/installation/index.html -.. _VirtualBox: https://www.virtualbox.org/wiki/Downloads - -Publishing -########## - -:: - - host$ vagrant push +.. _pyenv: https://github.com/pyenv/pyenv Copyright and license ##################### -The Snowplow Python Tracker is copyright 2013-2014 Snowplow Analytics Ltd. +The Snowplow Python Tracker is copyright 2013-2019 Snowplow Analytics Ltd. Licensed under the `Apache License, Version 2.0`_ (the "License"); you may not use this software except in compliance with the License. diff --git a/setup.py b/setup.py index c5234717..687af36c 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ """ setup.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/_version.py b/snowplow_tracker/_version.py index 59f9008f..c10d4edb 100644 --- a/snowplow_tracker/_version.py +++ b/snowplow_tracker/_version.py @@ -1,7 +1,7 @@ """ _version.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,11 +15,11 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2016 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ -__version_info__ = (0, 8, 2) +__version_info__ = (0, 8, 3) __version__ = ".".join(str(x) for x in __version_info__) __build_version__ = __version__ + '' diff --git a/snowplow_tracker/emitters.py b/snowplow_tracker/emitters.py index 6d41d531..a173f439 100644 --- a/snowplow_tracker/emitters.py +++ b/snowplow_tracker/emitters.py @@ -1,7 +1,7 @@ """ emitters.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/payload.py b/snowplow_tracker/payload.py index 894505c7..ff5cf888 100644 --- a/snowplow_tracker/payload.py +++ b/snowplow_tracker/payload.py @@ -1,7 +1,7 @@ """ payload.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/redis_worker.py b/snowplow_tracker/redis_worker.py index 60cb0ffe..a201c659 100644 --- a/snowplow_tracker/redis_worker.py +++ b/snowplow_tracker/redis_worker.py @@ -1,7 +1,7 @@ """ redis_worker.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/self_describing_json.py b/snowplow_tracker/self_describing_json.py index b47f0bf4..5c7c1627 100644 --- a/snowplow_tracker/self_describing_json.py +++ b/snowplow_tracker/self_describing_json.py @@ -1,7 +1,7 @@ """ self_describing_json.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/subject.py b/snowplow_tracker/subject.py index 85ab5e24..dd39e2aa 100644 --- a/snowplow_tracker/subject.py +++ b/snowplow_tracker/subject.py @@ -1,7 +1,7 @@ """ subject.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/test/integration/test_integration.py b/snowplow_tracker/test/integration/test_integration.py index 8fbee704..e99ea2f5 100644 --- a/snowplow_tracker/test/integration/test_integration.py +++ b/snowplow_tracker/test/integration/test_integration.py @@ -1,7 +1,7 @@ """ test_integration.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/test/unit/test_payload.py b/snowplow_tracker/test/unit/test_payload.py index 93b2d7cb..1b9963c3 100644 --- a/snowplow_tracker/test/unit/test_payload.py +++ b/snowplow_tracker/test/unit/test_payload.py @@ -1,7 +1,7 @@ """ test_payload.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/test/unit/test_tracker.py b/snowplow_tracker/test/unit/test_tracker.py index cbf910ea..5a846243 100644 --- a/snowplow_tracker/test/unit/test_tracker.py +++ b/snowplow_tracker/test/unit/test_tracker.py @@ -1,7 +1,7 @@ """ test_tracker.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/timestamp.py b/snowplow_tracker/timestamp.py index 47080d99..77ad6712 100644 --- a/snowplow_tracker/timestamp.py +++ b/snowplow_tracker/timestamp.py @@ -1,7 +1,7 @@ """ self_describing_json.py - Copyright (c) 2013-2016 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun, Anton Parkhomenko - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """ diff --git a/snowplow_tracker/tracker.py b/snowplow_tracker/tracker.py index 9abdcc25..1154b06b 100644 --- a/snowplow_tracker/tracker.py +++ b/snowplow_tracker/tracker.py @@ -1,7 +1,7 @@ """ tracker.py - Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved. + Copyright (c) 2013-2019 Snowplow Analytics Ltd. All rights reserved. This program is licensed to you under the Apache License Version 2.0, and you may not use this file except in compliance with the Apache License @@ -15,7 +15,7 @@ language governing permissions and limitations there under. Authors: Anuj More, Alex Dean, Fred Blundun - Copyright: Copyright (c) 2013-2014 Snowplow Analytics Ltd + Copyright: Copyright (c) 2013-2019 Snowplow Analytics Ltd License: Apache License Version 2.0 """