Merge branch 'new_lms_dev(critical)' into 'new_lms_dev'

New lms dev(critical)

See merge request skillbox/go.skillbox.ru!78
feature/fix_generate_pass
Andrey 8 years ago
commit d04613e005
  1. 3
      access/migrations/0001_initial.py
  2. 20
      access/migrations/0003_auto_20180115_1953.py
  3. 20
      access/migrations/0004_auto_20180117_1558.py
  4. 1
      access/models/user.py
  5. 18
      access/serializers.py
  6. 1
      access/urls.py
  7. 19
      access/views.py
  8. 4
      achievements/migrations/0001_initial.py
  9. 2
      courses/migrations/0001_initial.py
  10. 2
      courses/urls.py
  11. 2
      courses/views.py
  12. 7328
      csv/access/account.csv
  13. 20277
      csv/access/progress.csv
  14. 8672
      csv/access/users.csv
  15. 49
      csv/achievement/achievement.csv
  16. 66
      csv/achievement/diploma.csv
  17. 2230
      csv/achievement/user_achievement.csv
  18. 53
      csv/course/course.csv
  19. 78891
      csv/course/storage.csv
  20. 3158
      csv/course/vertex.csv
  21. 16176
      csv/finance/bill.csv
  22. 4
      csv/load_comments.py
  23. 581266
      csv/management/comment.csv
  24. 2
      finance/migrations/0001_initial.py
  25. 2
      library/migrations/0001_initial.py
  26. 6
      storage/api.py
  27. 4
      storage/migrations/0001_initial.py
  28. 2
      storage/models.py
  29. 22
      storage/tests.py

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-15 17:54
# Generated by Django 1.11.6 on 2018-01-22 09:27
from __future__ import unicode_literals
import access.models.user
@ -28,6 +28,7 @@ class Migration(migrations.Migration):
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('out_key', models.UUIDField(default=uuid.uuid4, editable=False, verbose_name='Токен')),
('in_key', models.UUIDField(default=uuid.uuid4, editable=False, verbose_name='Токен')),
('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
('first_name', models.CharField(blank=True, default='Гость', max_length=63, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=63, verbose_name='last name')),

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-15 19:53
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0002_init_group'),
]
operations = [
migrations.AlterField(
model_name='progresslesson',
name='date',
field=models.DateTimeField(auto_now_add=True, verbose_name='Дата зачтения задания'),
),
]

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-17 15:58
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0003_auto_20180115_1953'),
]
operations = [
migrations.AlterField(
model_name='progresslesson',
name='date',
field=models.DateTimeField(blank=True, null=True, verbose_name='Дата зачтения задания'),
),
]

@ -94,6 +94,7 @@ class CustomUserManager(BaseUserManager):
class User(AbstractBaseUser, PermissionsMixin):
out_key = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False)
in_key = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False)
email = models.EmailField(_('email address'), unique=True)
first_name = models.CharField(_('first name'), max_length=63, blank=True, default='Гость')
last_name = models.CharField(_('last name'), max_length=63, blank=True)

@ -52,7 +52,7 @@ class UserSelfSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ('id', 'email', 'first_name', 'last_name', 'progress', 'achievements',
fields = ('out_key', 'email', 'first_name', 'last_name', 'progress', 'achievements',
'account', 'groups', 'is_staff', 'is_superuser', 'diplomas', 'is_active')
@staticmethod
@ -83,7 +83,7 @@ class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = (
'id', 'email', 'first_name', 'last_name',
'out_key', 'email', 'first_name', 'last_name',
'account', 'groups', 'is_staff', 'is_superuser',
)
@ -102,7 +102,7 @@ class UserSearchSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ('id', 'email', 'first_name', 'last_name', 'phone', 'pay')
fields = ('out_key', 'email', 'first_name', 'last_name', 'phone', 'pay')
@staticmethod
def get_phone(self):
@ -111,3 +111,15 @@ class UserSearchSerializer(serializers.ModelSerializer):
@staticmethod
def get_pay(self):
return sum([i.get_full_price() for i in self.bill_user.all()])
class UserMiniSerializer(serializers.ModelSerializer):
photo = serializers.SerializerMethodField()
class Meta:
model = get_user_model()
fields = ('photo', 'first_name', 'last_name')
@staticmethod
def get_photo(self):
return self.account.photo.url

@ -5,6 +5,7 @@ urlpatterns = [
url(r'teachers/$', views.TeacherListView.as_view()),
url(r'detail/$', views.DetailUserView.as_view()),
url(r'detail/([0-9]{1,99})/$', views.DetailUserView.as_view()),
url(r'info/(?P<out_key>[0-9A-Fa-f-]+)/$', views.MinUserView.as_view()),
url(r'guard/(?P<pk>[0-9]{1,99})/(?P<page>.+)/$', views.UserGuardView.as_view()),
url(r'find/$', views.FindUserView.as_view()),
url(r'registration/$', views.RegistrationView.as_view()),

@ -16,7 +16,7 @@ from rest_framework.views import APIView
from access.models.other import Invite, ResetPassword
from access.models.progress import ProgressLesson
from access.models import Progress
from access.serializers import UserSelfSerializer, UserSearchSerializer, ProgressLessonSerializer
from access.serializers import UserSelfSerializer, UserSearchSerializer, ProgressLessonSerializer, UserMiniSerializer
class TeacherListView(APIView):
@ -132,10 +132,10 @@ class DetailUserView(APIView):
return Response('anonymous', status=200)
if request.user.is_authenticated() and request.user.is_superuser \
or request.user.is_staff or request.user.id == int(pk):
or request.user.is_staff or request.user.out_key == pk:
try:
user = get_user_model().objects.get(id=pk)
user = get_user_model().objects.get(out_key=pk)
except get_user_model().DoesNotExist:
return Response("User doesn't exist", status=404)
@ -274,7 +274,7 @@ class UserGuardView(APIView):
@staticmethod
def get(request, pk, page):
try:
user = get_user_model().objects.get(id=pk)
user = get_user_model().objects.get(out_key=pk)
except get_user_model().DoesNotExist:
return Response("User doesn't exist", status=404)
@ -316,3 +316,14 @@ class CourseProgressDynamicView(APIView):
return Response("Bad request", status=400)
return Response(status=403)
class MinUserView(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod
def get(request, out_key):
try:
return Response(UserMiniSerializer(get_user_model().objects.get(out_key=out_key)).data, status=200)
except get_user_model().DoesNotExist:
return Response("User not found", status=404)

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-15 17:54
# Generated by Django 1.11.6 on 2018-01-22 09:27
from __future__ import unicode_literals
from django.conf import settings
@ -12,8 +12,8 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('courses', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('courses', '0001_initial'),
]
operations = [

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-15 17:54
# Generated by Django 1.11.6 on 2018-01-22 09:27
from __future__ import unicode_literals
import django.contrib.postgres.fields

@ -3,7 +3,7 @@ from django.conf.urls import url
from courses import views as views
urlpatterns = [
url(r'vertex/(?P<token>.+)/$', views.VertexDetail.as_view()),
url(r'vertex/(?P<token>.+)/$', views.LessonDetail.as_view()),
url(r'tree/(?P<slug>.+)/$', views.TreeView.as_view()),
url(r'^$', views.CourseListView.as_view()),
]

@ -32,7 +32,7 @@ class CourseListView(APIView):
return Response(res, self.status_code)
class VertexDetail(APIView):
class LessonDetail(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

@ -0,0 +1,49 @@
id,img,text
17,achives/14t_rpXjXAR.png,Java: Основы построения веб-приложений
16,achives/15t.png,"Java: Веб-приложения:формы, заголовки и сессии"
15,achives/16_JHghTAS.png,Java: Дипломная работа
18,achives/13t_8wJaFO6.png,Java: Многопоточность
19,achives/12t.png,Java: Работа с базами данных
20,achives/11t_PlIJyKE.png,Java: Работа с файлами и сетью
21,achives/10t.png,Java: Внешний вид GUI и рисование
22,achives/9t_XB04aQi.png,Java: Основы построения GUI
23,achives/8t.png,Java: Тестирование и отладка
24,achives/7t_IcXWV0J.png,Java: Наследование и полиморфизм
25,achives/6t_6GPa4Cm.png,Java: Объекты и классы
26,achives/5t_MwDFKjE.png,Java: Типы данных: Коллекции
27,achives/4t_Wicy963.png,Java: Типы данных: Строки и даты
28,achives/3t_LEiFMmW.png,Java: Типы данных: числа
29,achives/2t_4GxlPla.png,Java: Синтаксис языка
30,achives/1t_95r5sEe.png,Java: Первые шаги
31,achives/16t_ElpMZT4.png,iOS: Обзор публикации приложений
32,achives/15t_G2dHbG0.png,iOS: WatchKit
33,achives/14t_zjLTw3C.png,"iOS: iPad, Swift 2 и iOS 9"
34,achives/13t_r5AUBkb.png,iOS: Анимация в iOS
35,achives/12t_O9ziZtQ.png,iOS: CoreData и CoreGraphics
36,achives/11t_R6ZFGPo.png,iOS: Работа с Сетью
37,achives/10t_rmSFxlx.png,iOS: Структуры данных и парсинг
38,achives/9t_FNgfsfx.png,iOS: Функциональные возможности
39,achives/8t_6caS4Mz.png,iOS: Инструменты ООП
40,achives/7t_U1hXqEE.png,"iOS: Enums, Structs"
41,achives/6t_6Q4gH9C.png,iOS: Optionals и Кортежи и отображение данных
42,achives/5t_Vg8scWj.png,"iOS: Классы, UIViewController"
43,achives/4t_M29zQP7.png,iOS: Программирование на Swift и основы UIKit
44,achives/3t_EzvoNos.png,iOS: Ветвление и коллекции
45,achives/2t_yq8f6nn.png,iOS: Основы Swift как языка программирования
46,achives/1t_VRlv8Gf.png,iOS: Основы программирования под iOS
47,achives/16t_9WuvuNR.png,Excel: Введение в макросы и язык VBA (продолжение)
48,achives/15t_B3SKKLm.png,Excel: Введение в макросы и язык VBA
49,achives/14t_1w3a59I.png,Excel: Работа с внешними источниками данных
50,achives/13t_QyBcCES.png,Excel: Сложные диаграммы
51,achives/12t_W1ecROl.png,Excel: Прогнозирование
52,achives/11t_Fzu2ICH.png,Excel: Инструменты анализа и оптимизации 2
53,achives/10t_z5VaRjv.png,Excel: Инструменты анализа и оптимизации
54,achives/9t_nBtNR8G.png,Excel: Формулы массивов
55,achives/8t_rFqrijw.png,Excel: Сводные таблицы
56,achives/7t_yXjsXUR.png,Excel: Визуализация данных
57,achives/6t_JYzPjTH.png,Excel: Формулы и функции. Работа с ошибками
58,achives/5t_noq5RnK.png,Excel: Формулы и функции.Более сложные формулы
59,achives/4t_Xl2DpdL.png,Excel: Формулы и функции.Работать с формулами
60,achives/3t_afQm2YN.png,Excel: Формулы и функции.Введение
61,achives/2t_79u4GW7.png,Excel: Основной функционал (продолжение)
62,achives/1t_xLDdZ54.png,Excel: Основной функционал
unable to load file from base commit

@ -0,0 +1,66 @@
user,img
volnov_mv@mail.ru,diploms/378-005-104-3681735945.png
flintl@bk.ru,diploms/366-005-081-3414761253.png
slava-sh@yandex.ru,diploms/378-005-106-5622100597.png
rock_n_vladok@mail.ru,diploms/373-005-088-8460749285.png
mahneva-mariya@mail.ru,diploms/365-005-080-7809812978.png
krrera@mail.ru,diploms/378-005-116-0406189146.png
a.michurin1783@mail.ru,diploms/367-005-082-4390339652.png
dron84@gmail.com,diploms/378-005-100-0453317915.png
garuskin.dima@gmail.com,diploms/372-005-087-7268502359.png
artemshchurev@gmail.com,diploms/378-005-110-5734330734.png
vladislav-avdeev@mail.ru,diploms/378-005-101-0579235306.png
serge-meb@mail.ru,diploms/378-005-093-9287022829.png
walerock@mail.ru,diploms/371-005-086-2010728249.png
threed@rsgc.ru,diploms/370-005-085-1445403214.png
ebortnikov@mail.ru,diploms/363-005-078-8013223405.png
tsubasa@tut.by,diploms/378-005-105-1400814657.png
susenko_a@ukr.net,diploms/363-005-077-4635813020.png
vladimir_glight@mail.ru,diploms/378-005-107-7721009995.png
aselya.bekenova@gmail.com,diploms/378-005-097-9345817764.png
kovalev.home@mail.ru,diploms/363-005-079-4953079839.png
grapeperson@inbox.ru,diploms/sharp378-005-123-4175944962.png
irinki@mail.ru,diploms/378-005-108-3003245596.png
komplekt_17@mail.ru,diploms/378-005-098-9891625101.png
o.gricenko@yandex.ru,diploms/378-005-117-1653742224.png
softmay@inbox.ru,diploms/378-005-099-6127989680.png
orloff.eg@yandex.ru,diploms/375-005-090-0013188516.png
izumovn@gmail.com,diploms/378-005-112-1318768199.png
anton_semenchuk@rambler.ru,diploms/374-005-089-1818186998.png
misha41192@mail.ru,diploms/378-005-109-8808693661.png
nadin12233@mail.ru,diploms/377-005-092-2649819525.png
lukin68@mail.ru,diploms/378-005-119-1396775116.png
caplinos@mail.ru,diploms/sharp378-005-124-8590405231.png
artyomzolotykh@gmail.com,diploms/363-005-076-8109754653.png
joy76@mail.ru,diploms/378-005-118-7596974049.png
vitalikbog@gmail.com,diploms/378-005-113-6643879642.png
artyomzykov@gmail.com,diploms/369-005-084-6514008928.png
v.vahmintsev@gmail.com,diploms/378-005-120-1857123638.png
malkolm063@yandex.ru,diploms/378-005-102-3225259917.png
cathayraht@gmail.com,diploms/sharp378-005-127-5465822465.png
ol88@bk.ru,diploms/378-005-103-4917135722.png
tatyana.best@list.ru,diploms/378-005-114-5045779647.png
kaa-work@yandex.ru,diploms/sharp378-005-121-6828207500.png
lissy@mail.ru,diploms/sharp378-005-125-7455009303.png
host510@mail.ru,diploms/378-005-115-8424668311.png
viktorbeznosov@mail.ru,diploms/sharp378-005-122-2445336751.png
danikanisa@gmail.com,diploms/sharp378-005-126-9693925734.png
aivis@ukr.net,diploms/sharp378-005-128-0750907505.png
chiganu@gmail.com,diploms/sharp378-005-129-3202020273.png
my-post@mail.ru,diploms/sharp378-005-131-1850096338.png
mr.titarev@mail.ru,diploms/sharp378-005-130-3534666982.png
roman@proskurnin.ru,diploms/sharp378-005-132-0213523725.png
miklik@yandex.ru,diploms/sharp378-005-133-1393432393.png
vikpointer@yandex.ru,diploms/sharp378-005-134-0649133567.png
firenskiy@yandex.ru,diploms/sharp378-005-137-3289702004.png
uglukfearless@gmail.com,diploms/sharp378-005-135-0135161426.png
hazhaev@gmail.com,diploms/sharp378-005-136-2411124105.png
d6232@bigmir.net,diploms/sharp378-005-138-8182572282.png
alexplatinum@yandex.ru,diploms/sharp378-005-139-5436334541.png
oleguch@ya.ru,diploms/sharp378-005-141-3016802392.png
volkovv71@gmail.com,diploms/sharp378-005-140-1452821946.png
cyrius@yandex.ru,diploms/sharp378-005-142-9487486532.png
orlenko23@mail.ru,diploms/sharp378-005-143-3541435391.png
vilorovna@yandex.ru,diploms/sharp378-005-144-3873082140.png
bpkprog@yandex.ru,diploms/sharp378-005-145-0913411150.png
roman@kislovs.ru,diploms/sharp378-005-146-1693156186.png
unable to load file from base commit

File diff suppressed because it is too large Load Diff

@ -0,0 +1,53 @@
hidden,level,slug,direction,public,title,image,big_image,big_mobile_image,teachers
False,B,SMM-–menedzher,3,True,SMM –менеджер,course/670х270_LMS_SMM.png,course/1480х238_LMS_SMM.png,,['lubov.loginova@ingate.ru']
False,B,Draw&Go,4,True,Акварельная живопись,course/mal_1.png,course/bol_1.png,course/bol_6A56hsO.jpg,['kristinagalockina@gmail.com']
False,B,ux-analitik,2,True,ux аналитик,course/analyticsprm.jpg,course/analyticsprw.jpg,course/analyticsprm_2J0YORM.jpg,['aic.analytics@skill-box.ru']
False,B+A,Android-razrabotchik,1,True,Android-разработчик,course/android_TK1Lu3x.jpg,course/android1.jpg,,"['raynor73@gmail.com', 'gerasimenkosv@bk.ru']"
False,B,UI-animatsiya,2,True,UI анимация,course/motion.jpg,course/motionlong.jpg,course/motion_sqnScls.jpg,['aic.motion@skill-box.ru']
True,B,"diplomnyy-proekt-""professiya-internet-marketolog""",3,True,"Дипломный проект ""Профессия Интернет-маркетолог""",course/670х270_LMS_маркетолог___uTutc3u.png,course/LMS_hard_ingate_1EM8sL7.png,,['lubov.loginova@ingate.ru']
True,E,diplomnyy-proekt-«ntv-plyus»,2,True,Дипломный проект «НТВ ПЛЮС»,course/нтв_плюс_маленькая.jpg,course/нтв_плюс_большая.jpg,,['ntvplus@skill-box.ru']
False,B,Key-Visual,2,True,Key Visual,course/670х270_Ретушь.png,course/1480х238_Ретушь.png,,['pajasu@gmail.com']
False,A,Excel-prodvinutyy,1,True,Excel продвинутый,course/excel_ni9vwCu.jpg,course/excel1_CcJM6br.jpg,course/excel_EEMEX0r.jpg,['buyavets@gmail.com']
True,E,diplomnyy-proekt-«festival'-molodezhi»,2,True,Дипломный проект «Фестиваль молодежи»,course/Фестиваль_молодежи_маленькая.jpg,course/Untitled-1.jpg,,['fm@skill-box.ru']
True,B,programmist-1s-bitriks-(2018),1,True,Программист 1С-Битрикс (2018),course/670х270_Xr9I0hT.png,course/1480х238_Om0nUCO.png,,['hex2bomb@gmail.com']
True,E,diplomnyy-proekt-«gazprombank»,2,True,Дипломный проект «Газпромбанк»,course/gazprom2.jpg,course/gazprom1.jpg,course/gazprom2_ZShOr5R.jpg,['gpb@skillbox.ru']
True,E,diplomnyy-proekt-«pochta-bank»,2,True,Дипломный проект «ПОЧТА БАНК»,course/почта_банк_маленькая.jpg,course/почтабанк_большая.jpg,,['pochtabank@skill-box.ru']
True,E,diplomnyy-proekt-«smp-bank»,2,True,Дипломный проект «СМП БАНК»,course/спм_маленькая_IGl1R5y.jpg,course/спм_большая_BBAUsvw.jpg,,['cmpbank@skill-box.ru']
False,B,veb-dizayn-dlya-nachinayuschih,2,True,Веб-Дизайн для начинающих,course/design.jpg,course/design1.jpg,,['camb@ya.ru']
False,B,JavaScript,1,True,JavaScript,course/js.jpg,course/js2.jpg,course/js_bBp5dM2.jpg,"['gerasimenkosv@bk.ru', 'yegor.yakovishen@me.com']"
True,B,"diplomnyy-proekt-""upravlenie-proektami""",3,True,"Дипломный проект ""Управление проектами""",course/670х238_Sibirix.jpg,course/1480х238_Sibirix.jpg,,['sibirix@skill-box.ru']
True,E,diplomnyy-proekt-«Yota»,2,True,Дипломный проект «Yota»,course/yota2.jpg,course/yota1.jpg,course/yota2_D06GbKi.jpg,['yota@skillbox.ru']
False,B+A,veb-razrabotchik,1,True,Веб-разработчик,course/web.jpg,course/web1.jpg,,"['gerasimenkosv@bk.ru', 'html@bedev.ru', 't@skillbox.ru']"
True,B,diplomnyy-proekt-«promsvyaz'bank»,2,True,Дипломный проект «Промсвязьбанк»,course/670х270_Промсвязьбанк_1.png,course/1480х238_Промсвязьбанк_1.png,,['komanda.promsvyazbank@yandex.ru']
True,B,test,1,False,Таргетированная реклама,,,,['t@skillbox.ru']
False,A,kak-otkryt-veb-studiyu,3,True,Как открыть веб-студию,course/Studio.jpg,course/webs.jpg,,['inna.spirina@gmail.com']
True,B,Sound-design,5,True,Sound design,course/670х270_Саунд_topSg6J.png,course/1480х238_Саунд_JpMiW6C.png,,['basie.ru@gmail.com']
False,B,kak-otkryt'-salon-krasoty,3,True,Как открыть салон красоты,course/670х270.png,course/1480х238_pX5zoz0.png,,['dbeleshko@gmail.com']
False,B,videobloging,3,True,Видеоблогинг,course/vb1.jpg,course/vb2.jpg,course/vb1_6ZsdrSE.jpg,['yoola@skill-box.ru']
True,B+A,razrabotchik-1s-bitriks,1,False,Разработчик 1С-Битрикс,course/bitrix_waWRT5T.jpg,course/bitrix1.jpg,,['t@skillbox.ru']
True,E,diplomnyy-proekt-«Kaspi.kz»,2,True,Дипломный проект «Kaspi.kz»,course/kaspi2.jpg,course/kaspi1.jpg,course/kaspi2_QzZi0IX.jpg,['kaspi@skillbox.ru']
True,E,diplomnyy-proekt-«MOS.RU»,2,True,Дипломный проект «MOS.RU»,course/mosru2.jpg,course/mosru1.jpg,course/mosru2_hDuLl1H.jpg,['mosru@skillbox.ru']
False,A,veb-dizayn-PRO,2,True,Веб-Дизайн PRO,course/Pro.jpg,course/pro1.jpg,,['colloum.ux@gmail.com']
True,B,1--s-bitriks-(2017),1,False,1 -с битрикс (2017),,,,['t@skillbox.ru']
True,B,sinema-4D-dlya-veb-dizayna,2,True,Cinema 4D для веб-дизайна,course/Обложка_LMS_Cinema_4D.jpg,course/Обложка_LMS_большая_Cinema_4D_aXJ3Ocs.jpg,,['rovshen.eyubov@yahoo.com']
True,B,diplomnyy-proekt-«Mos.ru-2»,2,True,Дипломный проект «Mos.ru-2»,course/mosru2_иконка_дипломныи_проект.jpg,course/mosru1_экран_в_курсе_большое_изображение.jpg,course/mosru2_hDuLl1H_изображение_под_мобилку.jpg,['mosru@skillbox.ru']
False,A,professiya-internet-marketolog-ot-a-do-ya,3,True,Профессия интернет-маркетолог от А до Я,course/marketolog_Ykj1b1J.jpg,course/marketolog1_bOfeJXW.jpg,,['buyavets@gmail.com']
True,B,Python-razrabotchik-s-nulya-(2018),1,True,Python-разработчик с нуля (2018),course/670х238_Python_dQO3TkP.jpg,course/1480х238_Python.jpg,,['vadim.shandrinov@skillbox.ru']
True,B,diplomnyy-proekt-«Ticketland»,2,True,Дипломный проект «Ticketland»,course/670х270_Тикетлэнд_1.png,course/1480х238_Тикетлэнд_1.png,,['komanda.ticketland@yandex.ru']
False,B,Blockchain,3,True,Blockchain,course/670x270.png,course/1480x238.png,,['blockchain.skillbox@yandex.ru']
True,B,ux-design-special-AIC-,2,True,ux design special AIC,course/ux.jpg,course/aic1.jpg,,"['ux@aic.ru', 'aic@skillbox.ru', 't@skillbox.ru']"
False,B,sketching-dlya-dizaynera,2,True,Скетчинг для дизайнера,course/sketch1.jpg,course/sketch2.jpg,course/sketch1_fUHb6TG.jpg,['sketch@skill-box.ru']
False,E,ux-design,2,True,ux design,course/ux.jpg,course/aic1.jpg,,['aic@skillbox.ru']
True,B,Python,1,False,Python,,,,['t@skillbox.ru']
False,B,upravlenie-proektami,3,True,Управление проектами,course/иконки-тем-для-LMS.jpg,course/обложкА-для-страницы-курса-в-ЛМС.jpg,,['sibirix@skill-box.ru']
True,B,zadanie-k-kursu-«professiya-PR-menedzher»-dlya-komandy-«megafon-–-severo-zapad»,3,True,ЗАДАНИЕ К КУРСУ «ПРОФЕССИЯ PR-МЕНЕДЖЕР» ДЛЯ КОМАНДЫ «МЕГАФОН – СЕВЕРО-ЗАПАД»,,,,['kstrifonova@gmail.com']
False,A,professiya---internet-marketolog,3,True,Профессия — интернет-маркетолог,course/LMS_mini_ingate.png,course/LMS_hard_ingate.png,,['lubov.loginova@ingate.ru']
False,B,reklamnaya-grafika,2,True,Рекламная графика,course/670х270_Тикетлэнд_1_wE1a3an.png,course/1480х238_Тикетлэнд_1_ObFQyCr.png,,['korumart@gmail.com']
False,A,professiya-PR-menedzher,3,True,Профессия PR-менеджер,course/pr.jpg,course/pr1.jpg,,['nataliya.akimova47@gmail.com']
True,B,rasprodazha,3,True,Распродажа,,,,['t@skillbox.ru']
False,B,dizayn-mobil'nyh-prilozheniy,2,True,Дизайн мобильных приложений RMR,course/photoRB_BZ5JhPj.jpg,course/photo5467609895021946983.jpg,,['skillbox@redmadrobot.com']
True,B,diplomnyy-proekt-«vtb24»,2,True,Дипломный проект «ВТБ24»,,,,['komanda.vtb24@yandex.ru']
False,B+A,Java-razrabotchik,1,True,Java разработчик,course/java.jpg,course/java1.jpg,,"['it.is.the.g@list.ru', 'gerasimenkosv@bk.ru', 't@skillbox.ru']"
False,B+A,iOS-razrabotchik,1,True,iOS Разработчик,course/swift.jpg,course/ios1.jpg,,"['exeypanteleev@gmail.com', 't@skillbox.ru']"
False,B,Excel-bazovyy,1,True,Excel базовый,course/excel.jpg,course/excel1.jpg,,['buyavets@gmail.com']
False,B+A,Csharp-razrabotchik,1,True,C# разработчик,course/csharp.jpg,course/csharp1.jpg,,"['codemy.csharp@gmail.com', 't@skillbox.ru', 'johntorohov@mail.ru']"
unable to load file from base commit

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

@ -55,8 +55,8 @@ if __name__ == '__main__':
if not file == '']
comment = Comment.objects.create(
text=row['text'],
email=row['owner__email'],
text=row['text'] or row['bb_text'],
user_key=get_user_model().objects.get(email=row['owner__email']).out_key,
)
if row['status'] == 'Одобренно':

File diff suppressed because one or more lines are too long

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-15 17:54
# Generated by Django 1.11.6 on 2018-01-22 09:27
from __future__ import unicode_literals
from django.conf import settings

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-15 17:54
# Generated by Django 1.11.6 on 2018-01-22 09:27
from __future__ import unicode_literals
import datetime

@ -13,10 +13,10 @@ def upload_file(original=None, name=None, base64=None) -> File:
return new_file
def add_comment(text: str, email: str, files=None) -> Comment:
def add_comment(text: str, out_key: str, files=None) -> Comment:
"""
:param text: sting
:param email: string
:param out_key: string
:param files: {name?: string, original?: File, base64?: string}[] одно из двух последних свойств должно быть указано
:return: Comment
"""
@ -25,7 +25,7 @@ def add_comment(text: str, email: str, files=None) -> Comment:
comment = Comment.objects.create(
text=text,
email=email,
user_key=out_key,
)
for file in files:

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-15 17:54
# Generated by Django 1.11.6 on 2018-01-22 09:27
from __future__ import unicode_literals
from django.db import migrations, models
@ -18,7 +18,7 @@ class Migration(migrations.Migration):
name='Comment',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.CharField(max_length=63, verbose_name='email автора')),
('user_key', models.UUIDField(editable=False, verbose_name='Ссылка на юзера')),
('text', models.TextField(default='', verbose_name='Текст комментария')),
('token', models.UUIDField(default=uuid.uuid4, editable=False, verbose_name='Ключ')),
('date', models.DateTimeField(auto_now_add=True, verbose_name='Дата коментария')),

@ -36,7 +36,7 @@ class File(models.Model):
class Comment(models.Model):
email = models.CharField(verbose_name="email автора", max_length=63)
user_key = models.UUIDField(verbose_name="Ссылка на юзера", editable=False)
text = models.TextField(default="", verbose_name="Текст комментария")
files = models.ManyToManyField(to=File, blank=True, verbose_name='Файлы')
token = models.UUIDField(verbose_name="Ключ", default=uuid.uuid4, editable=False)

@ -1,4 +1,4 @@
import tempfile
import uuid
from django.test import TestCase
from storage.api import add_comment, delete_comment, update_comment, get_comment
@ -10,8 +10,10 @@ from storage.models import Comment
class CommentTestCase(TestCase):
def setUp(self):
self.first_comment = add_comment("first comment", "vasia@rambler.ru")
self.second_comment = add_comment(text="Привет, отличная работа", email="artem4000@gmail.com")
self.f_k = uuid.uuid4()
self.s_k = uuid.uuid4()
self.first_comment = add_comment("first comment", self.f_k)
self.second_comment = add_comment(text="Привет, отличная работа", out_key=self.s_k)
def tearDown(self):
Comment.objects.all().delete()
@ -25,9 +27,9 @@ class CommentTestCase(TestCase):
self.assertEqual(get_comment(self.first_comment.token).text, new_text)
# def test_comment_create(self):
# token = 'fskjfskj'
# comment1 = add_comment(text=token, email="artem4000@gmail.com")
# self.assertEqual(comment1.text, token)
# text = 'fskjfskj'
# comment1 = add_comment(text=text, out_key=uuid.uuid4())
# self.assertEqual(comment1.text, text)
# with tempfile.gettempdir() as dir_path:
# file_for_upload = SimpleUploadedFile(dir_path + '/1.txt', 'Я файл!'.encode('utf-8'))
# file_name = 'Клёвый файл'
@ -48,8 +50,8 @@ class CommentTestCase(TestCase):
class FileTestCase(TestCase):
def setUp(self):
self.first_comment = add_comment("first comment", "vasia@rambler.ru")
self.second_comment = add_comment(text="Привет, отличная работа", email="artem4000@gmail.com")
self.first_comment = add_comment("first comment", uuid.uuid4())
self.second_comment = add_comment(text="Привет, отличная работа", out_key=uuid.uuid4())
def test_comment_get(self):
self.assertEqual(self.first_comment, get_comment(self.first_comment.token))
@ -61,12 +63,12 @@ class FileTestCase(TestCase):
def test_comment_create(self):
token = 'fskjfskj'
comment1 = add_comment(text=token, email="artem4000@gmail.com")
comment1 = add_comment(text=token, out_key=uuid.uuid4())
self.assertEqual(comment1.text, token)
file_for_upload = SimpleUploadedFile('1.txt', 'Я файл!'.encode('utf-8'))
file_name = 'Клёвый файл'
object_for_upload = {'original': file_for_upload, 'name': file_name}
comment2 = add_comment(text=token, email="artem4000@gmail.com", files=[object_for_upload])
comment2 = add_comment(text=token, out_key=uuid.uuid4(), files=[object_for_upload])
self.assertEqual(comment2.files.count(), 1)
self.assertEqual(comment2.files.all()[0].name, file_name)

Loading…
Cancel
Save