launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #27962
[Merge] ~jugmac00/turnip:move-formatters-into-extra-module into turnip:master
Jürgen Gmach has proposed merging ~jugmac00/turnip:move-formatters-into-extra-module into turnip:master.
Commit message:
Move formatters into separate module
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~jugmac00/turnip/+git/turnip/+merge/414167
--
Your team Launchpad code reviewers is requested to review the proposed merge of ~jugmac00/turnip:move-formatters-into-extra-module into turnip:master.
diff --git a/turnip/api/formatter.py b/turnip/api/formatter.py
new file mode 100644
index 0000000..ce353e7
--- /dev/null
+++ b/turnip/api/formatter.py
@@ -0,0 +1,68 @@
+import base64
+
+from pygit2 import (
+ GIT_OBJ_BLOB,
+ GIT_OBJ_COMMIT,
+ GIT_OBJ_TAG,
+ GIT_OBJ_TREE,
+ GitError,
+ )
+
+
+REF_TYPE_NAME = {
+ GIT_OBJ_COMMIT: 'commit',
+ GIT_OBJ_TREE: 'tree',
+ GIT_OBJ_BLOB: 'blob',
+ GIT_OBJ_TAG: 'tag'
+}
+
+
+def format_blob(blob):
+ """Return a formatted blob dict."""
+ if blob.type != GIT_OBJ_BLOB:
+ raise GitError('Invalid type: object {} is not a blob.'.format(
+ blob.oid.hex))
+ return {
+ 'size': blob.size,
+ 'data': base64.b64encode(blob.data),
+ }
+
+
+def format_commit(git_object):
+ """Return a formatted commit object dict."""
+ # XXX jugmac00 2022-01-14: this is an additional type check, which
+ # currently does not get executed by the test suite
+ # better safe than sorry
+ if git_object.type != GIT_OBJ_COMMIT:
+ raise GitError('Invalid type: object {} is not a commit.'.format(
+ git_object.oid.hex))
+ parents = [parent.hex for parent in git_object.parent_ids]
+ return {
+ 'sha1': git_object.oid.hex,
+ 'message': git_object.message,
+ 'author': format_signature(git_object.author),
+ 'committer': format_signature(git_object.committer),
+ 'parents': parents,
+ 'tree': git_object.tree.hex
+ }
+
+
+def format_ref(ref, git_object):
+ """Return a formatted object dict from a ref."""
+ return {
+ ref: {
+ "object": {
+ 'sha1': git_object.oid.hex,
+ 'type': REF_TYPE_NAME[git_object.type]
+ }
+ }
+ }
+
+
+def format_signature(signature):
+ """Return a formatted signature dict."""
+ return {
+ 'name': signature.name,
+ 'email': signature.email,
+ 'time': signature.time
+ }
diff --git a/turnip/api/store.py b/turnip/api/store.py
index 86df2df..7a2f883 100644
--- a/turnip/api/store.py
+++ b/turnip/api/store.py
@@ -1,7 +1,6 @@
# Copyright 2015 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
-import base64
from collections import defaultdict
import itertools
import logging
@@ -16,10 +15,8 @@ from contextlib2 import (
ExitStack,
)
from pygit2 import (
- GIT_OBJ_BLOB,
GIT_OBJ_COMMIT,
GIT_OBJ_TAG,
- GIT_OBJ_TREE,
GIT_REF_OID,
GIT_SORT_TOPOLOGICAL,
GitError,
@@ -31,6 +28,11 @@ from pygit2 import (
import six
from twisted.web import xmlrpc
+from turnip.api.formatter import (
+ format_blob,
+ format_commit,
+ format_ref,
+ )
from turnip.config import config
from turnip.helpers import TimeoutServerProxy
from turnip.pack.helpers import (
@@ -46,69 +48,10 @@ from turnip.tasks import (
logger = logging.getLogger(__name__)
-REF_TYPE_NAME = {
- GIT_OBJ_COMMIT: 'commit',
- GIT_OBJ_TREE: 'tree',
- GIT_OBJ_BLOB: 'blob',
- GIT_OBJ_TAG: 'tag'
- }
-
-
# Where to store repository status information inside a repository directory.
REPOSITORY_CREATING_FILE_NAME = '.turnip-creating'
-def format_ref(ref, git_object):
- """Return a formatted object dict from a ref."""
- return {
- ref: {
- "object": {
- 'sha1': git_object.oid.hex,
- 'type': REF_TYPE_NAME[git_object.type]
- }
- }
- }
-
-
-def format_commit(git_object):
- """Return a formatted commit object dict."""
- # XXX jugmac00 2022-01-14: this is an additional type check, which
- # currently does not get executed by the test suite
- # better safe than sorry
- if git_object.type != GIT_OBJ_COMMIT:
- raise GitError('Invalid type: object {} is not a commit.'.format(
- git_object.oid.hex))
- parents = [parent.hex for parent in git_object.parent_ids]
- return {
- 'sha1': git_object.oid.hex,
- 'message': git_object.message,
- 'author': format_signature(git_object.author),
- 'committer': format_signature(git_object.committer),
- 'parents': parents,
- 'tree': git_object.tree.hex
- }
-
-
-def format_signature(signature):
- """Return a formatted signature dict."""
- return {
- 'name': signature.name,
- 'email': signature.email,
- 'time': signature.time
- }
-
-
-def format_blob(blob):
- """Return a formatted blob dict."""
- if blob.type != GIT_OBJ_BLOB:
- raise GitError('Invalid type: object {} is not a blob.'.format(
- blob.oid.hex))
- return {
- 'size': blob.size,
- 'data': base64.b64encode(blob.data),
- }
-
-
def is_bare_repo(repo_path):
return not os.path.exists(os.path.join(repo_path, '.git'))
diff --git a/turnip/api/views.py b/turnip/api/views.py
index 27180c8..d5cf3d7 100644
--- a/turnip/api/views.py
+++ b/turnip/api/views.py
@@ -11,6 +11,7 @@ import pyramid.httpexceptions as exc
from pyramid.response import Response
from turnip.api import store
+from turnip.api.formatter import format_commit
from turnip.config import config
@@ -351,7 +352,7 @@ class CommitAPI(BaseAPI):
commit = store.get_commit(repo_store, repo_name, commit_sha1)
except GitError:
return exc.HTTPNotFound()
- return store.format_commit(commit)
+ return format_commit(commit)
@validate_path
def collection_post(self, repo_store, repo_name):
@@ -361,7 +362,7 @@ class CommitAPI(BaseAPI):
commits = store.get_commits(repo_store, repo_name, commits)
except GitError:
return exc.HTTPNotFound()
- return [store.format_commit(commit) for commit in commits]
+ return [format_commit(commit) for commit in commits]
@resource(path='/repo/{name}/log/{sha1}')