diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index dba20a4..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-AUTHORS
-ChangeLog
-*.pyc
-*.log
-*.swp
-*.swo
-*.egg*
-.tox
-.venv
-dist
-build
-.testrepository
-.idea
-.project
-.pydevproject
-.coverage*
-!.coveragerc
-cover/
diff --git a/.testr.conf b/.testr.conf
deleted file mode 100644
index fd7c2ac..0000000
--- a/.testr.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-[DEFAULT]
-test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
- OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
- OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-500} \
- OS_TEST_LOCK_PATH=${OS_TEST_LOCK_PATH:-${TMPDIR:-'/tmp'}} \
- ${PYTHON:-python} -m subunit.run discover -t ./ ./lpmqtt/tests $LISTOPT $IDOPTION
-test_id_option=--load-list $IDFILE
-test_list_option=--list
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
deleted file mode 100644
index f6bbfb8..0000000
--- a/CONTRIBUTING.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-============
-Contributing
-============
-
-If you would like to contribute to the development of OpenStack,
-you must follow the steps in this page:
-
- http://docs.openstack.org/infra/manual/developers.html
-
-If you already have a good understanding of how the system works and your
-OpenStack accounts are set up, you can skip to the development workflow section
-of this documentation to learn how changes to OpenStack should be submitted for
-review via the Gerrit tool:
-
- http://docs.openstack.org/infra/manual/developers.html#development-workflow
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 67db858..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,175 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the 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.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "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.
-
- "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).
-
- "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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ec889a9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,9 @@
+This project is no longer maintained.
+
+The contents of this repository are still available in the Git
+source code management system. To see the contents of this
+repository before it reached its end of life, please check out the
+previous commit with "git checkout HEAD^1".
+
+For any further questions, please email
+service-discuss@lists.opendev.org or join #opendev on OFTC.
diff --git a/README.rst b/README.rst
deleted file mode 100644
index 6530a42..0000000
--- a/README.rst
+++ /dev/null
@@ -1,76 +0,0 @@
-======
-lpmqtt
-======
-
-lpmqtt, like its name implies, is a tool for publish a launchpad event stream
-into MQTT. It will publish all the capture events from the lp emails over imap
-and publish them to MQTT
-
-MQTT Topics
-===========
-lpmqtt will push launchpad events to topics broken by project and event type.
-The formula used is::
-
- ///
-
-However only the base topic is a guaranteed field. Depending on the emails sent
-by launchpad some of the other fields may not be present. In those cases the
-topic will start from the base topic and will use fields moving towards the
-right until one is missing.
-
-Running lpmqtt
-==============
-lpmqtt only runs in the foreground and logs all log messages to STDOUT. It takes
-one argument, the config file (there is no default path) which is required. For
-example::
-
- % lpmqtt /etc/lpmqtt.conf
-
-will run lpmqtt.
-
-Configuration
-=============
-There are a few required pieces of information to make lpmqtt work properly.
-These settings are specified in the config file.
-
-IMAP
-----
-To configure lpmqtt to listen to your imap server you need to provide 3 pieces
-of information in the *[imap]* section
-
- * **hostname** - The hostname for the imap server to connect to
- * **username** - The username to connect with
- * **password** - The password to use
-
-There are also a number of optional settings you can use depending on the
-configuration of the imap server you're connecting to:
-
- * **use_ssl** - Set this to *True* to establish an imaps connection with ssl
- * **folder** - Specify a mailbox/folder to watch for message from launchpad.
- If one is not specified *INBOX* will be used
- * **delete-old** - Set this to *True* to have lpmqtt delete messages after it
- finishes processing them. By default it will just mark them
- as read.
- * **idle-timeout** - The number of seconds to use for the idle timeout
-
-MQTT
-----
-Just as with imap there are a few required options for talking to MQTT, which
-is the other axis of communication in lpmqtt. The options for configuring MQTT
-communication go in the *[mqtt]* section. The 2 required options are:
-
- * **hostname** - The hostname for the MQTT broker
- * **base_topic** - The base topic name to use for the gerrit events
-
-There are also a couple optional settings for communicating with mqtt that you
-can set:
-
- * **port** - The port to communicate to the MQTT broker on. By default this
- is set to 1883, the default MQTT port. This only needs to be set
- if your broker uses a non-default port.
- * **keepalive** - Used to set the keepalive time for connections to the MQTT
- broker. By default this is set to 60 seconds.
- * **username** - Used to set the auth username to connect to the MQTT broker
- with.
- * **password** - Used to set the auth password to connect to the MQTT broker
- with. A username must be set for this option to be used.
diff --git a/doc/source/conf.py b/doc/source/conf.py
deleted file mode 100755
index 4b9c9ca..0000000
--- a/doc/source/conf.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- coding: utf-8 -*-
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import os
-import sys
-
-sys.path.insert(0, os.path.abspath('../..'))
-# -- General configuration ----------------------------------------------------
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = [
- 'sphinx.ext.autodoc',
- 'oslosphinx',
-]
-
-# autodoc generation is a bit aggressive and a nuisance when doing heavy
-# text edit cycles.
-# execute "export SPHINX_DEBUG=1" in your terminal to disable
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'lpmqtt'
-copyright = u'2016, Matthew Treinish'
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-add_module_names = True
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# -- Options for HTML output --------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. Major themes that come with
-# Sphinx are currently 'default' and 'sphinxdoc'.
-# html_theme_path = ["."]
-# html_theme = '_theme'
-# html_static_path = ['static']
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = '%sdoc' % project
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass
-# [howto/manual]).
-latex_documents = [
- ('index',
- '%s.tex' % project,
- u'%s Documentation' % project,
- u'Matthew Treinish', 'manual'),
-]
-
-# Example configuration for intersphinx: refer to the Python standard library.
-# intersphinx_mapping = {'http://docs.python.org/': None}
diff --git a/doc/source/index.rst b/doc/source/index.rst
deleted file mode 100644
index 0d49eac..0000000
--- a/doc/source/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-lpmqtt
-======
-
-Contents:
-
-.. toctree::
- :maxdepth: 2
-
- readme
diff --git a/doc/source/readme.rst b/doc/source/readme.rst
deleted file mode 100644
index a6210d3..0000000
--- a/doc/source/readme.rst
+++ /dev/null
@@ -1 +0,0 @@
-.. include:: ../../README.rst
diff --git a/lpmqtt/__init__.py b/lpmqtt/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/lpmqtt/daemon.py b/lpmqtt/daemon.py
deleted file mode 100644
index 0104407..0000000
--- a/lpmqtt/daemon.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Copyright 2016 Hewlett-Packard Development Company, L.P.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import json
-import sys
-
-import paho.mqtt.publish as publish
-from six.moves import configparser
-
-from lpmqtt import lp
-
-
-class PushMQTT(object):
- def __init__(self, hostname, port=1883, client_id=None,
- keepalive=60, will=None, auth=None, tls=None, qos=0):
- self.hostname = hostname
- self.port = port
- self.client_id = client_id
- self.keepalive = 60
- self.will = will
- self.auth = auth
- self.tls = tls
- self.qos = qos
-
- def publish_single(self, topic, msg):
- publish.single(topic, msg, hostname=self.hostname,
- port=self.port, client_id=self.client_id,
- keepalive=self.keepalive, will=self.will,
- auth=self.auth, tls=self.tls, qos=self.qos)
-
- def publish_multiple(self, topic, msg):
- publish.multiple(topic, msg, hostname=self.hostname,
- port=self.port, client_id=self.client_id,
- keepalive=self.keepalive, will=self.will,
- auth=self.auth, tls=self.tls, qos=self.qos)
-
-
-def process_event(event, base_topic):
- pieces = [base_topic]
- if 'project' in event:
- pieces.append(event['project'])
- if 'event-type' in event:
- pieces.append(event['event-type'])
- if 'bug-number' in event:
- pieces.append(event['bug-number'])
- topic = "/".join(pieces)
- msg = json.dumps(event)
- return msg, topic
-
-
-def main():
- config = configparser.ConfigParser()
- config.read(sys.argv[1])
-
- # Configure MQTT Connection
- if config.has_option('mqtt', 'port'):
- mqtt_port = config.get('mqtt', 'port')
- else:
- mqtt_port = 1883
- if config.has_option('mqtt', 'keepalive'):
- keepalive = config.get('mqtt', 'keepalive')
- else:
- keepalive = 60
- # Configure MQTT auth
- auth = None
- if config.has_option('mqtt', 'username'):
- mqtt_username = config.get('mqtt', 'username')
- else:
- mqtt_username = None
- if config.has_option('mqtt', 'password'):
- mqtt_password = config.get('mqtt', 'password')
- else:
- mqtt_password = None
- if mqtt_username:
- auth = {'username': mqtt_username}
- if mqtt_password:
- auth['password'] = mqtt_password
- base_topic = config.get('mqtt', 'base_topic')
- # Max QOS
- if config.has_option('mqtt', 'qos'):
- mqtt_qos = config.getint('mqtt', 'qos')
- else:
- mqtt_qos = 0
-
- mqttqueue = PushMQTT(
- config.get('mqtt', 'hostname'),
- port=mqtt_port,
- keepalive=keepalive,
- auth=auth,
- qos=mqtt_qos)
-
- # IMAP email settings
- imap_server = config.get('imap', 'hostname')
- imap_user = config.get('imap', 'username')
- imap_password = config.get('imap', 'password')
- if config.has_option('imap', 'use_ssl'):
- imap_ssl = config.getboolean('imap', 'use_ssl')
- else:
- imap_ssl = False
-
- if config.has_option('imap', 'folder'):
- imap_folder = config.get('imap', 'folder')
- else:
- imap_folder = 'INBOX'
-
- if config.has_option('imap', 'delete-old'):
- imap_delete = config.getboolean('imap', 'delete-old')
- else:
- imap_delete = False
- if config.has_option('imap', 'imap-timeout'):
- imap_idle_timeout = config.getint('imap', 'idle-timeout')
- else:
- imap_idle_timeout = 60
-
- launchpad = lp.LPImapWatcher(imap_server, imap_user, imap_password,
- folder=imap_folder, ssl=imap_ssl,
- delete=imap_delete)
- while True:
- events = launchpad.getEvents()
- for event in events:
- msg, topic = process_event(event, base_topic)
- mqttqueue.publish_single(topic, msg)
- launchpad.imap.idle(timeout=imap_idle_timeout)
-
-if __name__ == "__main__":
- main()
diff --git a/lpmqtt/lp.py b/lpmqtt/lp.py
deleted file mode 100644
index 507970a..0000000
--- a/lpmqtt/lp.py
+++ /dev/null
@@ -1,111 +0,0 @@
-# Copyright 2016 Hewlett-Packard Development Company, L.P.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import email
-from email.header import decode_header
-import re
-
-import imaplib2 as imaplib
-
-
-class LPImapWatcher(object):
-
- def __init__(self, server, imap_user, imap_pass, folder='INBOX', ssl=False,
- delete=False):
- super(LPImapWatcher, self).__init__()
- self.folder = folder
- if ssl:
- self.imap = imaplib.IMAP4_SSL(server)
- else:
- self.imap = imaplib.IMAP4(server)
- self.imap.login(imap_user, imap_pass)
- self.delete = delete
-
- def getEvents(self):
- self.imap.select(self.folder)
- events = self._find_new_email()
- return events
-
- def _process_bug(self, message):
- event = {}
- event['event-type'] = 'bug'
- event['commenters'] = message['X-Launchpad-Bug-Commenters'].split(' ')
- event['bug-reporter'] = message['X-Launchpad-Bug-Reporter']
- event['bug-modifier'] = message['X-Launchpad-Bug-Modifier']
- bug_tags = message['X-Launchpad-Bug-Tags']
- if bug_tags:
- event['tags'] = bug_tags.split(' ')
- subject = message['Subject']
- header_decode_out = decode_header(subject)
- subject = header_decode_out[0][0]
- bug_num_re_match = re.match('^\[(.*?)\]', subject)
- if not bug_num_re_match:
- print("Subject %s does not contain a parseable bug number"
- % subject)
- else:
- bug_num_str = bug_num_re_match.group(0)
- event['bug-number'] = bug_num_str.split(' ')[1].rstrip(']')
-
- bug_info = message['X-Launchpad-Bug'].split(';')
- for info in bug_info:
- clean_info = info.lstrip()
- key_value = clean_info.split('=')
- if len(key_value) == 2:
- key = key_value[0]
- value = key_value[1]
- if key == 'product':
- event['project'] = value
- else:
- event[key] = value
- event['body'] = message.get_payload()
- return event
-
- def _process_msg(self, data):
- event = {}
- message = email.message_from_string(data[1])
- print('Initial filtering of Message ID: %s' % message['Message-Id'])
- generated_by = message['X-Generated-By']
- if not generated_by or 'Launchpad' not in generated_by:
- print('%s is not from LP' % message['Message-Id'])
- return event
- # Mark the message as read
- email_id = data[0].split()[0]
- typ, full_msg = self.imap.fetch(email_id, '(RFC822)')
- message = email.message_from_string(full_msg[0][1])
- print('Retrieved full message with id %s and marked as read'
- % message['Message-Id'])
- event_type = message['X-Launchpad-Notification-Type']
- if event_type == 'bug':
- event = self._process_bug(message)
- else:
- for header in message:
- if header.startswith('X-Launchpad'):
- event[header] = message[header]
- event['body'] = message.get_payload()
- return event
-
- def _find_new_email(self):
- events = []
- typ, msg_ids = self.imap.search(None, "UNSEEN")
- for msg in msg_ids[0].split():
- typ, data = self.imap.fetch(msg, "(BODY.PEEK[HEADER])")
- output = self._process_msg(data[0])
- if not output:
- continue
- if self.delete:
- self.imap.store(msg, '+FLAGS', '\\Deleted')
- events.append(output)
- if self.delete:
- self.imap.expunge()
- return events
diff --git a/lpmqtt/tests/__init__.py b/lpmqtt/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/lpmqtt/tests/base.py b/lpmqtt/tests/base.py
deleted file mode 100644
index a346f8d..0000000
--- a/lpmqtt/tests/base.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2016 Hewlett-Packard Development Company, L.P.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import os
-
-import fixtures
-import testtools
-
-
-class TestCase(testtools.TestCase):
- true = ('True', 'true', '1', 'yes')
-
- def setUp(self):
- super(TestCase, self).setUp()
- if os.environ.get('OS_STDOUT_CAPTURE') in self.true:
- stdout = self.useFixture(fixtures.StringStream('stdout')).stream
- self.useFixture(fixtures.MonkeyPatch('sys.stdout', stdout))
- if os.environ.get('OS_STDERR_CAPTURE') in self.true:
- stderr = self.useFixture(fixtures.StringStream('stderr')).stream
- self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr))
- if (os.environ.get('OS_LOG_CAPTURE') != 'False' and
- os.environ.get('OS_LOG_CAPTURE') != '0'):
- self.useFixture(fixtures.LoggerFixture(nuke_handlers=False,
- level=None))
diff --git a/lpmqtt/tests/test_daemon.py b/lpmqtt/tests/test_daemon.py
deleted file mode 100644
index 13f8f07..0000000
--- a/lpmqtt/tests/test_daemon.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) 2016 Hewlett-Packard Development Company, L.P.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import json
-
-from lpmqtt import daemon
-from lpmqtt.tests import base
-
-
-class TestDaemonHelpers(base.TestCase):
-
- def test_process_event_full_topic(self):
- fake_event = {
- 'project': 'tempest',
- 'event-type': 'bug',
- 'bug-number': '124321',
- 'body': 'I am a email body',
- }
- msg, topic = daemon.process_event(fake_event, 'launchpad')
- self.assertEqual(json.dumps(fake_event), msg)
- self.assertEqual('launchpad/tempest/bug/124321', topic)
-
- def test_process_event_up_to_bug_number_no_event_type(self):
- fake_event = {
- 'project': 'tempest',
- 'bug-number': '124321',
- 'body': 'I am a email body',
- }
- msg, topic = daemon.process_event(fake_event, 'launchpad')
- self.assertEqual(json.dumps(fake_event), msg)
- self.assertEqual('launchpad/tempest', topic)
-
- def test_process_event_no_bug_number(self):
- fake_event = {
- 'project': 'tempest',
- 'body': 'I am a email body',
- 'event-type': 'bug',
- }
- msg, topic = daemon.process_event(fake_event, 'launchpad')
- self.assertEqual(json.dumps(fake_event), msg)
- self.assertEqual('launchpad/tempest/bug', topic)
-
- def test_process_event_no_project(self):
- fake_event = {
- 'body': 'I am a email body',
- 'event-type': 'bug',
- 'bug-number': '124321',
- }
- msg, topic = daemon.process_event(fake_event, 'launchpad')
- self.assertEqual(json.dumps(fake_event), msg)
- self.assertEqual('launchpad', topic)
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 38604e4..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# The order of packages is significant, because pip processes them in the order
-# of appearance. Changing the order has an impact on the overall integration
-# process, which may cause wedges in the gate later.
-pbr>=1.6 # Apache-2.0
-six>=1.9.0 # MIT
-paho-mqtt>=1.1
-imaplib2>=2.45.0
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 222c774..0000000
--- a/setup.cfg
+++ /dev/null
@@ -1,38 +0,0 @@
-[metadata]
-name = lpmqtt
-summary = Publish Launchpad Event Stream on MQTT
-description-file =
- README.rst
-author = Matthew Treinish
-author-email = mtreinish@kortar.org
-classifier =
- Intended Audience :: Information Technology
- Intended Audience :: System Administrators
- Intended Audience :: Developers
- License :: OSI Approved :: Apache Software License
- Operating System :: POSIX :: Linux
- Programming Language :: Python
- Programming Language :: Python :: 2
- Programming Language :: Python :: 2.7
- Programming Language :: Python :: 3
- Programming Language :: Python :: 3.4
- Programming Language :: Python :: 3.5
-
-[files]
-packages =
- lpmqtt
-
-[entry_points]
-console_scripts =
- lpmqtt = lpmqtt.daemon:main
-
-[build_sphinx]
-all_files = 1
-build-dir = doc/build
-source-dir = doc/source
-
-[pbr]
-warnerrors = True
-
-[wheel]
-universal = 1
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 782bb21..0000000
--- a/setup.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
-import setuptools
-
-# In python < 2.7.4, a lazy loading of package `pbr` will break
-# setuptools if some other modules registered functions in `atexit`.
-# solution from: http://bugs.python.org/issue15881#msg170215
-try:
- import multiprocessing # noqa
-except ImportError:
- pass
-
-setuptools.setup(
- setup_requires=['pbr>=1.8'],
- pbr=True)
diff --git a/test-requirements.txt b/test-requirements.txt
deleted file mode 100644
index 5456d48..0000000
--- a/test-requirements.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# The order of packages is significant, because pip processes them in the order
-# of appearance. Changing the order has an impact on the overall integration
-# process, which may cause wedges in the gate later.
-
-hacking<0.11,>=0.10.2 # Apache-2.0
-
-coverage>=3.6 # Apache-2.0
-sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 # BSD
-oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0
-os-testr>=0.6.0
diff --git a/tox.ini b/tox.ini
deleted file mode 100644
index 6c1f63f..0000000
--- a/tox.ini
+++ /dev/null
@@ -1,36 +0,0 @@
-[tox]
-minversion = 1.6
-envlist = py35,py34,py27,pypy,pep8
-skipsdist = True
-
-[testenv]
-usedevelop = True
-install_command = pip install -U {opts} {packages}
-setenv =
- VIRTUAL_ENV={envdir}
-whitelist_externals = find
-deps = -r{toxinidir}/requirements.txt
- -r{toxinidir}/test-requirements.txt
-commands =
- find . -type f -name "*.pyc" -delete
- ostestr {posargs}
-
-[testenv:pep8]
-commands = flake8
-
-[testenv:venv]
-commands = {posargs}
-
-[testenv:cover]
-commands = python setup.py testr --coverage --testr-args='{posargs}'
-
-[testenv:docs]
-commands = python setup.py build_sphinx
-
-[flake8]
-# E123, E125 skipped as they are invalid PEP-8.
-
-show-source = True
-ignore = E123,E125,E129
-builtins = _
-exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build