Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Gepetto
dashboard
Commits
9702ed66
Commit
9702ed66
authored
Jan 08, 2018
by
Guilhem Saurel
Browse files
ProjectView
parent
88e680e8
Changes
5
Hide whitespace changes
Inline
Side-by-side
rainboard/models.py
View file @
9702ed66
from
django.db
import
models
from
django.urls
import
reverse
from
autoslug
import
AutoSlugField
from
ndh.models
import
NamedModel
,
TimeStampedModel
from
ndh.models
import
NamedModel
,
TimeStampedModel
,
Links
from
ndh.utils
import
enum_to_choices
,
query_sum
import
requests
...
...
@@ -22,19 +23,25 @@ class License(NamedModel):
return
self
.
spdx_id
or
self
.
name
class
Project
(
NamedModel
,
TimeStampedModel
):
class
Project
(
Links
,
NamedModel
,
TimeStampedModel
):
private
=
models
.
BooleanField
(
default
=
False
)
main_namespace
=
models
.
ForeignKey
(
Namespace
,
on_delete
=
models
.
SET_NULL
,
null
=
True
,
blank
=
True
)
license
=
models
.
ForeignKey
(
License
,
on_delete
=
models
.
SET_NULL
,
blank
=
True
,
null
=
True
)
homepage
=
models
.
URLField
(
max_length
=
200
,
blank
=
True
,
null
=
True
)
def
get_absolute_url
(
self
):
return
reverse
(
'rainboard:project'
,
kwargs
=
{
'slug'
:
self
.
slug
})
class
Forge
(
NamedModel
):
class
Forge
(
Links
,
NamedModel
):
source
=
models
.
PositiveSmallIntegerField
(
choices
=
enum_to_choices
(
SOURCES
))
url
=
models
.
URLField
(
max_length
=
200
)
token
=
models
.
CharField
(
max_length
=
50
,
blank
=
True
,
null
=
True
)
verify
=
models
.
BooleanField
(
default
=
True
)
def
get_absolute_url
(
self
):
return
self
.
url
def
api_data
(
self
,
url
=
''
):
return
requests
.
get
(
self
.
api_url
()
+
url
,
verify
=
self
.
verify
,
headers
=
self
.
headers
()).
json
()
...
...
rainboard/tables.py
View file @
9702ed66
from
django.utils.safestring
import
mark_safe
import
django_tables2
as
tables
from
.models
import
Project
from
.models
import
Project
,
Repo
class
ProjectTable
(
tables
.
Table
):
...
...
@@ -7,3 +10,18 @@ class ProjectTable(tables.Table):
model
=
Project
fields
=
(
'main_namespace'
,
'name'
,
'license'
,
'homepage'
)
attrs
=
{
'class'
:
'table table-striped'
}
def
render_name
(
self
,
record
):
return
record
.
get_link
()
class
RepoTable
(
tables
.
Table
):
class
Meta
:
model
=
Repo
fields
=
(
'forge'
,
'namespace'
,
'license'
,
'homepage'
,
'default_branch'
,
'open_issues'
,
'open_pr'
)
def
render_forge
(
self
,
value
):
return
value
.
get_link
()
def
render_namespace
(
self
,
record
):
return
mark_safe
(
f
'<a href="
{
record
.
url
}
">
{
record
.
namespace
}
</a>'
)
rainboard/templates/rainboard/project_detail.html
0 → 100644
View file @
9702ed66
{% extends 'base.html' %}
{% load django_tables2 bootstrap3 %}
{% block content %}
<div
class=
"clearfix"
>
{% if project.main_namespace %}
<h2
class=
"pull-right"
>
{{ project.main_namespace }}
</h2>
{% endif %}
<h1>
{{ project }}
</h1>
<div
class=
"pull-right"
>
{% if project.license %}
{% bootstrap_label project.license label_class='label label-primary' %}
{% else %}
{% bootstrap_label 'UNLICENSED' label_class='label label-warning' %}
{% endif %}
{% if project.private %}
{% bootstrap_label 'private' label_class='label label-danger' %}
{% else %}
{% bootstrap_label 'public' label_class='label label-success' %}
{% endif %}
</div>
{% if project.homepage %}
<a
href=
"{{ project.homepage }}"
>
{{ project.homepage }}
</a>
{% endif %}
</div>
{% render_table repos %}
{% endblock %}
rainboard/urls.py
View file @
9702ed66
...
...
@@ -5,10 +5,11 @@ from django.views.generic import ListView
from
.models
import
Forge
,
Namespace
,
Project
from
.
import
views
app_name
=
'
cine
'
app_name
=
'
rainboard
'
urlpatterns
=
[
path
(
r
''
,
views
.
home
,
name
=
'home'
),
path
(
r
'forges'
,
ListView
.
as_view
(
model
=
Forge
),
name
=
'forges'
),
path
(
r
'namespaces'
,
ListView
.
as_view
(
model
=
Namespace
),
name
=
'namespaces'
),
path
(
r
'projects'
,
ListView
.
as_view
(
model
=
Project
),
name
=
'projects'
),
path
(
r
'project/<str:slug>'
,
views
.
ProjectView
.
as_view
(),
name
=
'project'
),
]
rainboard/views.py
View file @
9702ed66
from
django.shortcuts
import
render
from
django.views.generic
import
DetailView
from
django_tables2
import
RequestConfig
from
.models
import
Forge
,
Namespace
,
Project
from
.tables
import
ProjectTable
from
.tables
import
ProjectTable
,
RepoTable
def
home
(
request
):
...
...
@@ -14,3 +15,14 @@ def home(request):
'namespaces'
:
Namespace
.
objects
.
all
(),
'projects'
:
projects
,
})
class
ProjectView
(
DetailView
):
model
=
Project
def
get_context_data
(
self
,
**
kwargs
):
ctx
=
super
().
get_context_data
(
**
kwargs
)
repos
=
RepoTable
(
self
.
object
.
repo_set
.
all
())
RequestConfig
(
self
.
request
).
configure
(
repos
)
ctx
[
'repos'
]
=
repos
return
ctx
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment