From 61c438619634c80a9fb5579beb0a6609eaf00f2d Mon Sep 17 00:00:00 2001 From: Conor Branagan Date: Wed, 11 Apr 2012 17:11:08 -0400 Subject: Add issues service for issues, comments and events. has tests and updated docs --- pygithub3/requests/issues/comments.py | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 pygithub3/requests/issues/comments.py (limited to 'pygithub3/requests/issues/comments.py') diff --git a/pygithub3/requests/issues/comments.py b/pygithub3/requests/issues/comments.py new file mode 100644 index 0000000..0601db3 --- /dev/null +++ b/pygithub3/requests/issues/comments.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from pygithub3.requests.base import Request, ValidationError +from pygithub3.resources.issues import Comment + +class List(Request): + + uri = 'repos/{user}/{repo}/issues/{number}/comments' + resource = Comment + + +class Get(Request): + + uri = 'repos/{user}/{repo}/issues/comments/{id}' + resource = Comment + + +class Create(Request): + + uri = 'repos/{user}/{repo}/issues/{number}/comments' + resource = Comment + body_schema = { + 'schema': ('body', ), + 'required': ('body', ) + } + + +class Edit(Request): + + uri = 'repos/{user}/{repo}/issues/comments/{id}' + resource = Comment + body_schema = { + 'schema': ('body', ), + 'required': ('body', ) + } + + +class Delete(Request): + + uri = 'repos/{user}/{repo}/issues/comments/{id}' + resource = Comment \ No newline at end of file -- cgit v1.2.3-59-g8ed1b From 8972834a85a17ebbeb326a9d4493725d53913e33 Mon Sep 17 00:00:00 2001 From: Alejandro Gómez Date: Thu, 26 Apr 2012 21:00:13 +0200 Subject: Labels and Milestones services added --- pygithub3/requests/issues/comments.py | 2 +- pygithub3/requests/issues/labels.py | 81 ++++++++++++++++ pygithub3/requests/issues/milestones.py | 38 ++++++++ pygithub3/requests/repos/__init__.py | 16 ++++ pygithub3/resources/issues.py | 26 +++++- pygithub3/services/issues/__init__.py | 7 +- pygithub3/services/issues/comments.py | 2 +- pygithub3/services/issues/events.py | 2 +- pygithub3/services/issues/labels.py | 159 ++++++++++++++++++++++++++++++++ pygithub3/services/issues/milestones.py | 104 +++++++++++++++++++++ pygithub3/services/repos/__init__.py | 30 ++++++ pygithub3/tests/services/test_issues.py | 107 ++++++++++++++++++++- pygithub3/tests/services/test_repos.py | 12 +++ 13 files changed, 578 insertions(+), 8 deletions(-) create mode 100644 pygithub3/requests/issues/labels.py create mode 100644 pygithub3/requests/issues/milestones.py create mode 100644 pygithub3/services/issues/labels.py create mode 100644 pygithub3/services/issues/milestones.py (limited to 'pygithub3/requests/issues/comments.py') diff --git a/pygithub3/requests/issues/comments.py b/pygithub3/requests/issues/comments.py index 0601db3..638c9cf 100644 --- a/pygithub3/requests/issues/comments.py +++ b/pygithub3/requests/issues/comments.py @@ -39,4 +39,4 @@ class Edit(Request): class Delete(Request): uri = 'repos/{user}/{repo}/issues/comments/{id}' - resource = Comment \ No newline at end of file + resource = Comment diff --git a/pygithub3/requests/issues/labels.py b/pygithub3/requests/issues/labels.py new file mode 100644 index 0000000..47337f9 --- /dev/null +++ b/pygithub3/requests/issues/labels.py @@ -0,0 +1,81 @@ +# -*- encoding: utf-8 -*- + +from pygithub3.requests.base import Request, ValidationError +from pygithub3.resources.issues import Label + + + +class Get(Request): + uri = 'repos/{user}/{repo}/labels/{name}' + resource = Label + + +class Create(Request): + uri = 'repos/{user}/{repo}/labels' + resource = Label + body_schema = { + 'schema': ('name', 'color'), + 'required': ('name', 'color' ) + } + + def validate_color(color): + color = color.get('color', '') + if not Label.is_valid_color(color): + raise ValidationError('colors must have 6 hexadecimal characters, ' + 'without # in the beggining') + + +class Update(Request): + + uri = 'repos/{user}/{repo}/labels/{name}' + resource = Label + body_schema = { + 'schema': ('name', 'color'), + 'required': ('name', 'color' ) + } + + def validate_color(color): + color = color.get('color', '') + if not Label.is_valid_color(color): + raise ValidationError('colors must have 6 hexadecimal characters, ' + 'without # in the beggining') + + +class Delete(Request): + uri = 'repos/{user}/{repo}/labels/{name}' + resource = Label + + +class List_by_repo(Request): + uri = 'repos/{user}/{repo}/labels' + resource = Label + + + +class List_by_issue(Request): + uri = 'repos/{user}/{repo}/issues/{number}/labels' + resource = Label + + +class Add_to_issue(Request): + uri = 'repos/{user}/{repo}/issues/{number}/labels' + resource = Label + +class Remove_from_issue(Request): + uri = 'repos/{user}/{repo}/issues/{number}/labels/{name}' + resource = Label + + +class Replace_all(Request): + uri = 'repos/{user}/{repo}/issues/{number}/labels' + resource = Label + + +class Remove_all(Request): + uri = 'repos/{user}/{repo}/issues/{number}/labels' + resource = Label + + +class List_by_milestone(Request): + uri = 'repos/{user}/{repo}/milestones/{number}/labels' + resource = Label diff --git a/pygithub3/requests/issues/milestones.py b/pygithub3/requests/issues/milestones.py new file mode 100644 index 0000000..355c3b0 --- /dev/null +++ b/pygithub3/requests/issues/milestones.py @@ -0,0 +1,38 @@ +# -*- encoding: utf-8 -*- + +from pygithub3.requests.base import Request +from pygithub3.resources.issues import Milestone + + +class List(Request): + uri = 'repos/{user}/{repo}/milestones' + resource = Milestone + + +class Get(Request): + uri = 'repos/{user}/{repo}/milestones/{number}' + resource = Milestone + + +class Create(Request): + uri = 'repos/{user}/{repo}/milestones' + resource = Milestone + body_schema = { + 'schema': ('title', 'state', 'description', 'due_on'), + 'required': ('title',) + } + + +class Update(Request): + + uri = 'repos/{user}/{repo}/milestones/{number}' + resource = Milestone + body_schema = { + 'schema': ('title', 'state', 'description', 'due_on'), + 'required': ('title',) + } + + +class Delete(Request): + uri = 'repos/{user}/{repo}/milestones/{number}' + resource = Milestone diff --git a/pygithub3/requests/repos/__init__.py b/pygithub3/requests/repos/__init__.py index cd920fe..7a145f2 100644 --- a/pygithub3/requests/repos/__init__.py +++ b/pygithub3/requests/repos/__init__.py @@ -2,6 +2,7 @@ from pygithub3.requests.base import Request, ValidationError from pygithub3.resources.users import User +from pygithub3.resources.issues import Label, Milestone from pygithub3.resources.repos import Repo, Team, Tag, Branch class List(Request): @@ -78,3 +79,18 @@ class List_branches(Request): uri = 'repos/{user}/{repo}/branches' resource = Branch + +class List_labels(Request): + + uri = 'repos/{user}/{repo}/labels' + resource = Label + +class List_milestones(Request): + + uri = 'repos/{user}/{repo}/milestones' + resource = Milestone + # TODO: validate + body_schema = { + 'schema': ('state', 'sort', 'direction'), + 'required': () + } diff --git a/pygithub3/resources/issues.py b/pygithub3/resources/issues.py index e864e79..c560faa 100644 --- a/pygithub3/resources/issues.py +++ b/pygithub3/resources/issues.py @@ -1,9 +1,33 @@ #!/usr/bin/env python # -*- encoding: utf-8 -*- +import re + from .base import Resource from .users import User + +class Label(Resource): + @staticmethod + def is_valid_color(color): + valid_color = re.compile(r'[0-9abcdefABCDEF]{6}') + match = valid_color(color) + if match is None: + return False + return match.start() == 0 and match.end() == len(color) + + def __str__(self): + return '