[copr] master: Make the generate_api_token to some common place, as it is used in more blueprints (again, prevent import headaches) (78524d1)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 78524d1baab89109061f7507cb8d46624e53638e
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 10:12:22 2013 +0100
Make the generate_api_token to some common place, as it is used in more blueprints (again, prevent import headaches)
>---------------------------------------------------------------
coprs_frontend/coprs/helpers.py | 13 +++++++++++++
coprs_frontend/coprs/views/api_ns/api_general.py | 17 ++---------------
coprs_frontend/coprs/views/misc.py | 3 ++-
3 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/coprs_frontend/coprs/helpers.py b/coprs_frontend/coprs/helpers.py
index 870a723..6cb7c16 100644
--- a/coprs_frontend/coprs/helpers.py
+++ b/coprs_frontend/coprs/helpers.py
@@ -1,9 +1,22 @@
import math
+import random
+import string
import flask
from coprs import constants
+def generate_api_token(size=30):
+ """ Generate a random string used as token to access the API
+ remotely.
+
+ :kwarg: size, the size of the token to generate, defaults to 30
+ chars.
+ :return: a string, the API token for the user.
+ """
+ return ''.join(random.choice(string.ascii_lowercase) for x in range(size))
+
+
class PermissionEnum(object):
vals = {'nothing': 0, 'request': 1, 'approved': 2}
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index a912ac7..4cba67b 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -1,6 +1,4 @@
import datetime
-import random
-import string
import time
import flask
@@ -8,6 +6,7 @@ import flask
from coprs import db
from coprs import exceptions
from coprs import forms
+from coprs import helpers
from coprs.views.misc import login_required
@@ -17,18 +16,6 @@ from coprs.logic import builds_logic
from coprs.logic import coprs_logic
-def generate_api_token(size=30):
- """ Generate a random string used as token to access the API
- remotely.
-
- :kwarg: size, the size of the token to generate, defaults to 30
- chars.
- :return: a string, the API token for the user.
-
- """
- return ''.join(random.choice(string.ascii_lowercase) for x in range(size))
-
-
@api_ns.route('/')
def api_home():
""" Renders the home page of the api.
@@ -43,7 +30,7 @@ def api_new_token():
""" Method use to generate a new API token for the current user.
"""
user = flask.g.user
- user.api_token = generate_api_token(flask.current_app.config['API_TOKEN_LENGTH'])
+ user.api_token = helpers.generate_api_token(flask.current_app.config['API_TOKEN_LENGTH'])
user.api_token_expiration = datetime.date.today() \
+ datetime.timedelta(days=30)
db.session.add(user)
diff --git a/coprs_frontend/coprs/views/misc.py b/coprs_frontend/coprs/views/misc.py
index e6a3f8a..48a1f3a 100644
--- a/coprs_frontend/coprs/views/misc.py
+++ b/coprs_frontend/coprs/views/misc.py
@@ -8,6 +8,7 @@ from flask.ext.openid import OpenID
from coprs import app
from coprs import config
from coprs import db
+from coprs import helpers
from coprs import models
from coprs import oid
@@ -56,7 +57,7 @@ def create_or_login(resp):
expiration_date_token = datetime.date.today() \
+ datetime.timedelta(days=30)
user = models.User(openid_name = resp.identity_url, mail = resp.email,
- api_token = generate_api_token(app.config['API_TOKEN_LENGTH']),
+ api_token = helpers.generate_api_token(app.config['API_TOKEN_LENGTH']),
api_token_expiration = expiration_date_token)
db.session.add(user)
db.session.commit()
11 years, 3 months
[copr] master: Drop the no longer needed method for chroot name manipulation (e63e693)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit e63e69374b4070d844a1dd2b7bcfe1a6d176058e
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 10:07:02 2013 +0100
Drop the no longer needed method for chroot name manipulation
>---------------------------------------------------------------
coprs_frontend/coprs/helpers.py | 4 ----
1 files changed, 0 insertions(+), 4 deletions(-)
diff --git a/coprs_frontend/coprs/helpers.py b/coprs_frontend/coprs/helpers.py
index b6ae123..870a723 100644
--- a/coprs_frontend/coprs/helpers.py
+++ b/coprs_frontend/coprs/helpers.py
@@ -4,10 +4,6 @@ import flask
from coprs import constants
-def chroots():
- return ['{0}-{1}'.format(rel, arch) for rel, arches in constants.CHROOTS.items()
- for arch in arches]
-
class PermissionEnum(object):
vals = {'nothing': 0, 'request': 1, 'approved': 2}
11 years, 3 months
[copr] master: Prevent importing app if not needed (leads to import headache and eventualy import loop) (b54b411)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit b54b41182dcb733b902310372de1cc12db41ffaf
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 10:04:02 2013 +0100
Prevent importing app if not needed (leads to import headache and eventualy import loop)
>---------------------------------------------------------------
coprs_frontend/coprs/views/api_ns/api_general.py | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index 943a6ed..a912ac7 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -5,7 +5,6 @@ import time
import flask
-from coprs import app
from coprs import db
from coprs import exceptions
from coprs import forms
@@ -44,7 +43,7 @@ def api_new_token():
""" Method use to generate a new API token for the current user.
"""
user = flask.g.user
- user.api_token = generate_api_token(app.config['API_TOKEN_LENGTH'])
+ user.api_token = generate_api_token(flask.current_app.config['API_TOKEN_LENGTH'])
user.api_token_expiration = datetime.date.today() \
+ datetime.timedelta(days=30)
db.session.add(user)
11 years, 3 months
[copr] master: Construct output as dictionary and use flask.jsonify for serialization (962e63e)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 962e63ea3ecc6830d1b1a8e220ea8e6e9eb9c999
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 09:54:49 2013 +0100
Construct output as dictionary and use flask.jsonify for serialization
>---------------------------------------------------------------
coprs_frontend/coprs/views/api_ns/api_general.py | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index bbb8373..943a6ed 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -89,18 +89,18 @@ def api_new_copr():
infos.append('Initial packages were successfully submitted '
'for building.')
- output = '{"output" : "ok", "message" : "%s"}' % ("\n".join(infos))
+ output = {'output': 'ok', 'message' : '\n'.join(infos)}
db.session.commit()
except exceptions.DuplicateCoprNameException, err:
- output = '{"output": "notok", "error": "%s"}' % err
+ output = {'output': 'notok', 'error': err}
db.session.rollback()
else:
errormsg = "\n".join(form.errors['name'])
errormsg = errormsg.replace('"', "'")
- output = '{"output": "notok", "error": "%s"}' % errormsg
+ output = {'output': 'notok', 'error': errormsg}
- return flask.Response(output, mimetype='application/json')
+ return flask.jsonify(output)
@api_ns.route('/owned/')
11 years, 3 months
[copr] master: Unify the json serialization method for backend (65be073)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 65be07334b198d0a5ddbc3e9afdc2ceeddb7fe3b
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 09:44:17 2013 +0100
Unify the json serialization method for backend
>---------------------------------------------------------------
.../coprs/views/backend_ns/backend_general.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/views/backend_ns/backend_general.py b/coprs_frontend/coprs/views/backend_ns/backend_general.py
index c315cde..c51fcb6 100644
--- a/coprs_frontend/coprs/views/backend_ns/backend_general.py
+++ b/coprs_frontend/coprs/views/backend_ns/backend_general.py
@@ -39,4 +39,4 @@ def update_builds():
db.session.commit()
- return flask.json.dumps({'updated_builds_ids': list(existing.keys()), 'non_existing_builds_ids': non_existing_ids})
+ return flask.jsonify({'updated_builds_ids': list(existing.keys()), 'non_existing_builds_ids': non_existing_ids})
11 years, 3 months
[copr] master: A more pythonic way of counting loop iterations (d3e944a)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d3e944a85849ae7f49fb69e6efa17df3345bad56
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 09:31:37 2013 +0100
A more pythonic way of counting loop iterations
>---------------------------------------------------------------
coprs_frontend/coprs/views/api_ns/api_general.py | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index a5c94ca..bbb8373 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -117,8 +117,7 @@ def api_list_copr():
user_relation = 'owned', username = username)
repos = query.all()
output = '{"output": "ok",\n"repos":[\n'
- cnt = 0
- for repo in repos:
+ for cnt, repo in enumerate(repos):
output += '{'\
'"name" : "%s", '\
'"repos" : "%s", '\
@@ -126,7 +125,6 @@ def api_list_copr():
'"instructions": "%s" '\
'}\n' % (repo.name, repo.repos, repo.description,
repo.instructions)
- cnt = cnt + 1
if cnt < len(repos):
output += ','
output += "]}\n"
11 years, 3 months
[copr] master: Joining with whitespaces seems to be more convenient, since split removes arbitrary number of whitespace. (c4bd43d)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit c4bd43d8faeb6083858552d240ad1362fdb4a90a
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 09:26:49 2013 +0100
Joining with whitespaces seems to be more convenient, since split removes arbitrary number of whitespace.
>---------------------------------------------------------------
copr_cli/subcommands.py | 4 ++--
coprs_frontend/coprs/views/api_ns/api_general.py | 6 ++----
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/copr_cli/subcommands.py b/copr_cli/subcommands.py
index 9de7a9d..b91ce0c 100644
--- a/copr_cli/subcommands.py
+++ b/copr_cli/subcommands.py
@@ -88,10 +88,10 @@ class AddCopr(Command):
repos = None
if args.repos:
- repos = ",".join(args.repos)
+ repos = ' '.join(args.repos)
initial_pkgs = None
if args.initial_pkgs:
- initial_pkgs = ",".join(args.initial_pkgs)
+ initial_pkgs = ' '.join(args.initial_pkgs)
data = {'name': args.name,
'repos': repos,
'initial_pkgs': initial_pkgs,
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index 19d5bb7..a5c94ca 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -72,8 +72,7 @@ def api_new_copr():
try:
copr = coprs_logic.CoprsLogic.add(
name=form.name.data.strip(),
- repos=" ".join([repo.strip()
- for repo in form.repos.data.split(',')]),
+ repos=" ".join(form.repos.data.split()),
user=flask.g.user,
selected_chroots=form.selected_chroots,
description=form.description.data,
@@ -84,8 +83,7 @@ def api_new_copr():
if form.initial_pkgs.data:
builds_logic.BuildsLogic.add_build(
- pkgs=" ".join([pkg.strip()
- for pkg in form.initial_pkgs.data.split(',')]),
+ pkgs=" ".join(form.initial_pkgs.data.split()),
copr=copr,
owner=flask.g.user)
infos.append('Initial packages were successfully submitted '
11 years, 3 months
[copr] master: No need to assign user to flask.g.user, it's the same object (7c67dfa)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 7c67dfa6e8de5766cd19cf2ed2d39ae723f4d6a5
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Mon Jan 28 09:19:00 2013 +0100
No need to assign user to flask.g.user, it's the same object
>---------------------------------------------------------------
coprs_frontend/coprs/views/api_ns/api_general.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index b41ec07..19d5bb7 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -49,7 +49,6 @@ def api_new_token():
+ datetime.timedelta(days=30)
db.session.add(user)
db.session.commit()
- flask.g.user = user
return flask.redirect(flask.url_for('api_ns.api_home'))
11 years, 3 months
[copr] master: First line of code on the CLI for copr (72c90b9)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 72c90b9ddce25622ef368773c587fa4ea55ec2d9
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Mon Jan 28 09:12:13 2013 +0100
First line of code on the CLI for copr
With this version of Copr CLI one can list someone's coprs and create a new one
for himself.
This relies on cliff and requests to perform its task.
>---------------------------------------------------------------
cli_requirements.txt | 4 ++
copr_cli/__init__.py | 2 +
copr_cli/main.log | 5 ++
copr_cli/main.py | 69 +++++++++++++++++++++++++++++
copr_cli/subcommands.py | 109 +++++++++++++++++++++++++++++++++++++++++++++++
coprcli-setup.py | 69 +++++++++++++++++++++++++++++
6 files changed, 258 insertions(+), 0 deletions(-)
diff --git a/cli_requirements.txt b/cli_requirements.txt
new file mode 100644
index 0000000..7d3bfe6
--- /dev/null
+++ b/cli_requirements.txt
@@ -0,0 +1,4 @@
+# Used for when working from a virtualenv.
+# Use this file by running "$ pip install -r cli_requirements.txt"
+cliff
+requests
diff --git a/copr_cli/__init__.py b/copr_cli/__init__.py
new file mode 100644
index 0000000..17d0be3
--- /dev/null
+++ b/copr_cli/__init__.py
@@ -0,0 +1,2 @@
+#!/usr/bin/python -tt
+#-*- coding: UTF-8 -*-
diff --git a/copr_cli/main.log b/copr_cli/main.log
new file mode 100644
index 0000000..e98f62a
--- /dev/null
+++ b/copr_cli/main.log
@@ -0,0 +1,5 @@
+[2013-01-27 14:15:46,649] DEBUG __main__ initialize_app
+[2013-01-27 14:16:02,242] DEBUG __main__ initialize_app
+[2013-01-27 14:16:33,725] DEBUG __main__ initialize_app
+[2013-01-27 14:16:57,768] DEBUG __main__ initialize_app
+[2013-01-27 14:30:07,034] DEBUG __main__ initialize_app
diff --git a/copr_cli/main.py b/copr_cli/main.py
new file mode 100644
index 0000000..24118b7
--- /dev/null
+++ b/copr_cli/main.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python -tt
+#-*- coding: UTF-8 -*-
+
+import logging
+import sys
+
+
+import cliff.app
+import cliff.commandmanager
+from cliff.commandmanager import CommandManager
+
+__version__ = '0.1.0'
+__description__ = "CLI tool to run copr"
+
+copr_url = 'http://localhost:5000'
+copr_api_url = '{0}/api'.format(copr_url)
+
+
+class CoprCli(cliff.app.App):
+
+ log = logging.getLogger(__name__)
+
+ def __init__(self):
+ manager = cliff.commandmanager.CommandManager('copr_cli.subcommands')
+ super(CoprCli, self).__init__(
+ description=__description__,
+ version=__version__,
+ command_manager=manager,
+ )
+ requests_log = logging.getLogger("requests")
+ requests_log.setLevel(logging.WARN)
+
+ def initialize_app(self, argv):
+ self.log.debug('initialize_app')
+
+ def prepare_to_run_command(self, cmd):
+ self.log.debug('prepare_to_run_command %s', cmd.__class__.__name__)
+
+ def clean_up(self, cmd, result, err):
+ self.log.debug('clean_up %s', cmd.__class__.__name__)
+ if err:
+ self.log.debug('got an error: %s', err)
+
+ # Overload run_subcommand to gracefully handle unknown commands.
+ def run_subcommand(self, argv):
+ try:
+ self.command_manager.find_command(argv)
+ except ValueError as e:
+ if "Unknown command" in str(e):
+ print "%r is an unknown command" % ' '.join(argv)
+ print "Try \"copr -h\""
+ sys.exit(1)
+ else:
+ raise
+
+ return super(CoprCli, self).run_subcommand(argv)
+
+
+def main(argv=sys.argv[1:]):
+ """ Main function """
+ myapp = CoprCli()
+ return myapp.run(argv)
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
+ #add_copr('test2', 'fedora-rawhide-x86_64',
+ #description='Test repos #2')
+ #list_copr()
diff --git a/copr_cli/subcommands.py b/copr_cli/subcommands.py
new file mode 100644
index 0000000..9de7a9d
--- /dev/null
+++ b/copr_cli/subcommands.py
@@ -0,0 +1,109 @@
+#-*- coding: UTF-8 -*-
+
+import ConfigParser
+import json
+import logging
+import requests
+import os
+import sys
+
+import cliff.lister
+import cliff.show
+
+from cliff.command import Command
+
+from main import copr_api_url
+
+
+def set_user():
+ """ Retrieve the user information from the config file. """
+ config = ConfigParser.ConfigParser()
+ config.read(os.path.join(os.path.expanduser('~'), '.config',
+ 'copr'))
+ username = config.get('copr-cli', 'username', None)
+ token = config.get('copr-cli', 'token', None)
+ return {'username': username, 'token': token}
+
+
+class List(cliff.lister.Lister):
+ """ List all the copr of a user. """
+
+ log = logging.getLogger(__name__)
+
+ def get_parser(self, prog_name):
+ parser = super(type(self), self).get_parser(prog_name)
+ parser.add_argument("username", nargs='?')
+ return parser
+
+ def take_action(self, args):
+ user = set_user()
+
+ if args.username:
+ user['username'] = args.username
+ URL = '{0}/owned/'.format(copr_api_url)
+ req = requests.get(URL, params=user)
+ output = json.loads(req.text)
+ if 'repos' in output:
+ if output['repos']:
+ columns = ['name', 'description', 'repos', 'instructions']
+ values = []
+ for entry in output['repos']:
+ values.append([entry[key] for key in columns])
+ return (columns, values)
+ else:
+ columns = ['output']
+ values = ['No copr retrieved for user: "{0}"'.format(
+ user['username'])]
+ return (columns, [values])
+ else:
+ columns = ['output']
+ values = ['Wrong output format returned by the server']
+ return (columns, [values])
+
+
+class AddCopr(Command):
+ """ Create a new copr. """
+
+ log = logging.getLogger(__name__)
+
+ def get_parser(self, prog_name):
+ parser = super(type(self), self).get_parser(prog_name)
+ parser.add_argument("name")
+ parser.add_argument("--chroot", dest="chroots", action='append',
+ help="")
+ parser.add_argument('--repo', dest='repos', action='append',
+ help="")
+ parser.add_argument('--initial-pkgs', dest='initial_pkgs',
+ action='append',
+ help="")
+ parser.add_argument('--description',
+ help="")
+ parser.add_argument('--instructions',
+ help="")
+ return parser
+
+ def take_action(self, args):
+ user = set_user()
+ URL = '{0}/copr/new/'.format(copr_api_url)
+
+ repos = None
+ if args.repos:
+ repos = ",".join(args.repos)
+ initial_pkgs = None
+ if args.initial_pkgs:
+ initial_pkgs = ",".join(args.initial_pkgs)
+ data = {'name': args.name,
+ 'repos': repos,
+ 'initial_pkgs': initial_pkgs,
+ 'description': args.description,
+ 'instructions': args.instructions
+ }
+ for chroot in args.chroots:
+ data[chroot] = 'y'
+
+ req = requests.post(URL, params=user, data=data)
+ output = json.loads(req.text)
+ if output['output'] == 'ok':
+ print output['message']
+ else:
+ print 'Something went wrong:\n {0}'.format(output['error'])
diff --git a/coprcli-setup.py b/coprcli-setup.py
new file mode 100644
index 0000000..a7a40d3
--- /dev/null
+++ b/coprcli-setup.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+try:
+ from setuptools import setup
+except ImportError:
+ from ez_setup import use_setuptools
+ use_setuptools()
+ from setuptools import setup
+
+import sys
+
+f = open('README')
+long_description = f.read().strip()
+f.close()
+
+# Ridiculous as it may seem, we need to import multiprocessing and
+# logging here in order to get tests to pass smoothly on python 2.7.
+try:
+ import multiprocessing
+ import logging
+except ImportError:
+ pass
+
+from copr_cli.main import __description__, __version__
+
+requires = [
+ 'cliff',
+]
+
+subcommands = [
+ 'list = copr_cli.subcommands:List',
+ 'add-copr = copr_cli.subcommands:AddCopr',
+]
+
+__name__ = 'copr-cli'
+__version__ = __version__
+__description__ = __description__
+__author__ = "Pierre-Yves Chibon"
+__author_email__ = "pingou(a)pingoured.fr"
+__url__ = "http://fedorahosted.org/copr/"
+
+setup(
+ name=__name__,
+ version=__version__,
+ description=__description__,
+ long_description=long_description,
+ author=__author__,
+ author_email=__author_email__,
+ url=__url__,
+ license='GPLv2+',
+ classifiers=[
+ "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)",
+ "Programming Language :: Python :: 2",
+ "Programming Language :: Python :: 2.7",
+ "Topic :: System :: Archiving :: Packaging",
+ "Development Status :: 1 - Alpha",
+ ],
+ install_requires=requires,
+ packages=['copr_cli'],
+ namespace_packages=['copr_cli'],
+ include_package_data=True,
+ zip_safe=False,
+ entry_points={
+ 'console_scripts': [
+ 'copr-cli = copr_cli.main:main'
+ ],
+ 'copr_cli.subcommands': subcommands,
+ },
+)
11 years, 3 months