first hacky version
This commit is contained in:
parent
9f2ac10edb
commit
a38d86865a
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
*.egg-info
|
||||
/AUTHORS
|
||||
/ChangeLog
|
||||
build
|
||||
dist
|
27
README.rst
Normal file
27
README.rst
Normal file
@ -0,0 +1,27 @@
|
||||
========================
|
||||
OpenStack Summit Counter
|
||||
========================
|
||||
|
||||
The ``summit count`` plugin for python-openstackclient helps the user
|
||||
determine the number of summits they have attended since the beginning
|
||||
of their interaction with OpenStack.
|
||||
|
||||
Installing
|
||||
==========
|
||||
|
||||
::
|
||||
|
||||
$ pip install openstack-summit-counter
|
||||
|
||||
Using
|
||||
=====
|
||||
|
||||
::
|
||||
|
||||
$ openstack summit count $first $current
|
||||
|
||||
For example, if your first summit was for the "Folsom" series and the
|
||||
next summit is for "Rocky"::
|
||||
|
||||
$ openstack summit count folsom rocky
|
||||
|
5
requirements.txt
Normal file
5
requirements.txt
Normal file
@ -0,0 +1,5 @@
|
||||
# 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!=2.1.0,>=2.0.0 # Apache-2.0
|
||||
python-openstackclient>=3.12.0 # Apache-2.0
|
27
setup.cfg
Normal file
27
setup.cfg
Normal file
@ -0,0 +1,27 @@
|
||||
[metadata]
|
||||
name = openstack-summit-counter
|
||||
summary = OSC Plugin to help compute the number of summits someone has attended.
|
||||
description-file =
|
||||
README.rst
|
||||
author = Doug Hellmann
|
||||
author-email = doug@doughellmann.com
|
||||
home-page = https://pypi.python.org/pypi/openstack-summit-counter
|
||||
classifier =
|
||||
Environment :: Console
|
||||
Environment :: OpenStack
|
||||
Intended Audience :: Information Technology
|
||||
License :: OSI Approved :: Apache Software License
|
||||
Programming Language :: Python
|
||||
Programming Language :: Python :: 3
|
||||
|
||||
[files]
|
||||
packages =
|
||||
summit_counter
|
||||
|
||||
[entry_points]
|
||||
openstack.cli =
|
||||
summit count = summit_counter.main:SummitCount
|
||||
summit list = summit_counter.main:SummitList
|
||||
|
||||
[wheel]
|
||||
universal = 1
|
28
setup.py
Normal file
28
setup.py
Normal file
@ -0,0 +1,28 @@
|
||||
# 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.
|
||||
|
||||
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>=2.0.0'],
|
||||
pbr=True)
|
0
summit_counter/__init__.py
Normal file
0
summit_counter/__init__.py
Normal file
81
summit_counter/main.py
Normal file
81
summit_counter/main.py
Normal file
@ -0,0 +1,81 @@
|
||||
# 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.
|
||||
|
||||
from cliff import lister
|
||||
from cliff import show
|
||||
|
||||
_SUMMITS = [
|
||||
('Austin', 'Austin', 'https://wiki.openstack.org/wiki/Design_Summit/Austin'),
|
||||
('Bexar', 'San Antonio', 'https://wiki.openstack.org/wiki/Design_Summit/Bexar'),
|
||||
('Cactus', 'Santa Clara', ''),
|
||||
('Diablo', '', ''),
|
||||
('Essex', 'Boston', 'https://wiki.openstack.org/wiki/Design_Summit/Essex'),
|
||||
('Folsom', 'San Francisco', 'https://wiki.openstack.org/wiki/Design_Summit/Folsom'),
|
||||
('Grizzly', 'San Diego', 'https://wiki.openstack.org/wiki/Design_Summit/Grizzly'),
|
||||
('Havana', 'Portland', 'https://wiki.openstack.org/wiki/Design_Summit/Havana'),
|
||||
('Icehouse', 'Hong Kong', 'https://wiki.openstack.org/wiki/Design_Summit/Icehouse'),
|
||||
('Juno', 'Atlanta', 'https://wiki.openstack.org/wiki/Design_Summit/Juno'),
|
||||
('Kilo', 'Paris', 'https://wiki.openstack.org/wiki/Design_Summit/Kilo'),
|
||||
('Liberty', 'Vancouver', 'https://wiki.openstack.org/wiki/Design_Summit/Liberty'),
|
||||
('Mitaka', 'Tokyo', 'https://www.openstack.org/summit/tokyo-2015/'),
|
||||
('Newton', 'Austin', 'https://wiki.openstack.org/wiki/Design_Summit/Newton'),
|
||||
('Ocata', 'Barcelona', 'https://www.openstack.org/summit/barcelona-2016'),
|
||||
('Pike', 'Boston', 'https://www.openstack.org/summit/boston-2017'),
|
||||
('Queens', 'Sydney', 'https://www.openstack.org/summit/sydney-2017'),
|
||||
('Rocky', 'Vancouver', 'https://www.openstack.org/summit/vancouver-2018'),
|
||||
]
|
||||
|
||||
|
||||
class SummitCount(show.ShowOne):
|
||||
|
||||
# Set the command so that when we run through
|
||||
# python-openstackclient we do not require authentication.
|
||||
auth_required = False
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super().get_parser(prog_name)
|
||||
choices = [s[0].lower() for s in _SUMMITS]
|
||||
parser.add_argument(
|
||||
'first',
|
||||
help='Your first summit',
|
||||
choices=choices,
|
||||
)
|
||||
parser.add_argument(
|
||||
'current',
|
||||
help='The current summit',
|
||||
choices=choices,
|
||||
nargs='?',
|
||||
default=choices[-1],
|
||||
)
|
||||
return parser
|
||||
|
||||
def _name_to_num(self, name):
|
||||
return ord(name.lower()[0]) - ord('a') + 1
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
first = self._name_to_num(parsed_args.first)
|
||||
current = self._name_to_num(parsed_args.current)
|
||||
return (('Summits',), (current - first + 1,))
|
||||
|
||||
|
||||
class SummitList(lister.Lister):
|
||||
|
||||
# Set the command so that when we run through
|
||||
# python-openstackclient we do not require authentication.
|
||||
auth_required = False
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
columns = ('Number', 'Name', 'Location', 'URL')
|
||||
summits = []
|
||||
for i, s in enumerate(_SUMMITS, 1):
|
||||
summits.append((i,) + s)
|
||||
return (columns, summits)
|
Loading…
Reference in New Issue
Block a user