code review "courses"

feature/fix_generate_pass
wad 8 years ago
parent 2a1bd84f27
commit b9fc5a8cef
  1. 36
      course_service/courses/models.py
  2. 50
      gitlab_service/api.py

@ -73,20 +73,20 @@ class CourseManager(models.Manager):
class Course(models.Model):
hidden = models.BooleanField(verbose_name='Видно только оплатившим', default=False)
level = models.CharField(verbose_name='Уровень', choices=COURSE_LEVEL, default='B', max_length=3)
slug = models.SlugField(unique=True, editable=False, max_length=127)
direction = models.SmallIntegerField(choices=COURSE_DIRECTION, verbose_name='Направление')
public = models.BooleanField(verbose_name='Опубликовать', default=False)
title = models.CharField(verbose_name="Заголовок", max_length=255, unique=True)
description = models.TextField(verbose_name='Описание', blank=True)
level = models.CharField(verbose_name='Уровень', choices=COURSE_LEVEL, default='B', max_length=3)
direction = models.SmallIntegerField(choices=COURSE_DIRECTION, verbose_name='Направление')
public = models.BooleanField(verbose_name='Опубликовать', default=False)
route = models.OneToOneField(to=CourseRoute, verbose_name="Порядок прохождения по умолчанию", blank=True, null=True)
teachers = ArrayField(
models.CharField(max_length=15, blank=True, verbose_name='Ссылки на преподов'), default=[])
image = models.URLField(verbose_name='Изображение', blank=True, max_length=255)
big_image = models.URLField(verbose_name='Большое изображение', blank=True, max_length=255)
big_mobile_image = models.URLField(verbose_name='Под мобилку', blank=True,
help_text='Большая картинка для мобильной версии', max_length=255)
teachers = ArrayField(
models.CharField(max_length=15, blank=True, verbose_name='Ссылки на преподов'), default=[])
route = models.OneToOneField(to=CourseRoute, verbose_name="Порядок прохождения по умолчанию", blank=True, null=True)
hidden = models.BooleanField(verbose_name='Видно только оплатившим', default=False)
def __str__(self):
return self.title
@ -105,10 +105,10 @@ class Course(models.Model):
class Topic(models.Model):
course = models.ForeignKey(to=Course, verbose_name='курс')
title = models.CharField(verbose_name='Название', max_length=255)
icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True)
description = models.TextField(verbose_name='Описание', blank=True, null=True)
course = models.ForeignKey(to=Course, verbose_name='курс')
icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True)
class Meta:
verbose_name = "Тема"
@ -116,20 +116,24 @@ class Topic(models.Model):
class Vertex(models.Model):
# TODO переименовать в Lesson
token = models.CharField(max_length=15, verbose_name="Ключ доступа к узлу", unique=True, editable=False)
topic = models.ForeignKey(to=Topic, verbose_name='Тема')
title = models.CharField(verbose_name='Название', max_length=255)
description = models.TextField(verbose_name='Описание', blank=True, null=True)
video = models.TextField(verbose_name='Код видео', blank=True, null=True)
materials = ArrayField(models.CharField(max_length=15, blank=True, verbose_name='Материалы урока'))
# TODO material_tokens ???
free = models.BooleanField(default=False, verbose_name='Привилегии для узла не будут проверяться')
# TODO перейти на список валидаторов
VALID_TYPE = (
(3, 'Автаматическая валидация'),
(2, 'Полуавтаматическая валидация'),
(1, 'Ручная валидация'),
(0, 'Без валидации'),
)
topic = models.ForeignKey(to=Topic, verbose_name='Тема')
title = models.CharField(verbose_name='Название', max_length=255)
free = models.BooleanField(default=False, verbose_name='Привилегии для узла не будут проверяться')
description = models.TextField(verbose_name='Описание', blank=True, null=True)
video = models.TextField(verbose_name='Код видео', blank=True, null=True)
materials = ArrayField(models.CharField(max_length=15, blank=True, verbose_name='Материалы урока'))
valid_type = models.SmallIntegerField(choices=VALID_TYPE, default=0)
token = models.CharField(max_length=15, verbose_name="Ключ доступа к узлу", unique=True, editable=False)
def __str__(self):
return self.title

@ -1,18 +1,56 @@
# -*- coding: utf-8 -*-
def create_user(email, name):
""" Создает пользователя в GitLab и возвращает токен пользователя для последующей работы """
# Сервис может
# интерфейс учителя:
# - логин
# - выбор курса для работы
# - привязка (или создание) репы для курса (можно через веб)
# - прописывание соответствий ДЗ курса <-> путь в репе (можно через веб)
# - clone всех реп учеников данного курса и базовой репы
# - pull всех изменений реп студентов данного курса
# - push всех новых коммитов учителя в репы студентов (+ save point опционально)
# - changes по всем репам студентов данного курса с момента последнего save point (можно через веб)
# - save point состояния реп студентов (можно через веб)
# - разнесение изменений в базовой репе по репам студентов
# соотвтествие путей в гите к курсам/домашкам храним у себя, какая домашка следующая для ученика - спрашиваем ЛМС
# запросы к ЛМС
# - get по токену получить ИД учителя, емейл и имя
# - get по ИД учителя список его курсов (ИД, название)
# - get по ИД курса список всех опубликованных домашек (ИД, название)
# - get по ИД учителя и ИД курса список всех его студентов (ИД, емейл, имя)
# - get по ИД курса + ИД студента + ИД домашки дай следующую доамашку (ИД, название)
# - post ИД студента, ИД домашки - ДЗ принято
# запросы к сервису
# - get получение пользователя
# - get
def register_user(email, name):
""" Создает пользователя в сервисе и возвращает токен пользователя для последующей работы """
user_token = '...'
return user_token
def get_user(email, name):
""" Выбирает пользователя GitLab и возвращает токен пользователя для последующей работы """
def get_user(email):
""" Выбирает пользователя сервиса возвращает токен пользователя для последующей работы """
user_token = '...'
return user_token
def create_git_user(user):
""" Создает пользователя в GitLab"""
pass
def get_users(emails):
""" Выбирает пользователей GitLab и возвращает токены для последующей работы """
tokens = ['...', '...', '...', ]
return tokens
def create_repository(user, project_name):
""" Создает проект (репу) в GitLab и возвращает токен репу """
repository_token = '...'
@ -37,7 +75,6 @@ def copy_files_to_repository(base_repository, files_path, target_repository, aut
def approve_homework(teacher, base_repository, student, target_repository, files_path):
""" Принять домашку у студента, копировать новые файлы """
# TODO возможно это на уровне LMS надо делать, а с гитлабом вызвать copy_files_to_repository
pass
@ -49,4 +86,3 @@ def make_save_point(teacher, students):
def get_last_changes(teacher, students, save_point=None):
""" показать последние изменения в репах учеников относительно save point (последнего, если None) """
pass

Loading…
Cancel
Save