clean bills

remotes/origin/pm_task_31703
Michail Bortnikov 9 years ago
parent cf8727331f
commit 606000fb18
  1. 0
      __migrate/__init__.py
  2. 9
      __migrate/dump_fixtures.py
  3. 15
      __migrate/fix_arch.py
  4. 1
      __migrate/fixtures/access.json
  5. 1
      __migrate/fixtures/courses.json
  6. 1
      __migrate/fixtures/finance.json
  7. 1
      __migrate/fixtures/management.json
  8. 1
      __migrate/fixtures/storage.json
  9. 105
      __migrate/journal_merge.py
  10. 63
      __migrate/load_fixtures.py
  11. 277
      __migrate/merge_courses.py
  12. 110
      __migrate/merge_finance.py
  13. 111
      __migrate/merge_fixtures.py
  14. 228
      __migrate/merge_journals.py
  15. 88
      __migrate/merge_management.py
  16. 100
      __migrate/merge_storage.py
  17. 116
      __migrate/merge_users.py
  18. 1
      __migrate/pk_maps.json
  19. 121
      __migrate/post_fixtures.py
  20. 11
      __migrate/test_course_map.py
  21. BIN
      __test/access_api.rar
  22. 83
      __test/access_api/form.js
  23. 5
      __test/access_api/jquery.min.js
  24. 19
      __test/access_api/text.html
  25. 13
      __test/other_pay.html
  26. 15
      __test/time_test.html
  27. 5796
      _practice/1.txt
  28. 10
      _practice/reg_test.py

@ -1,9 +0,0 @@
# coding=utf-8
import os
apps = ['access', 'courses', 'finance', 'management', 'storage']
for app in apps:
os.system('python manage.py dumpdata {0} -o fixtures/{0}.json'.format(app))
print u'Загружаю медиа'
os.system('tar czf media.tar.gz media/')

@ -1,15 +0,0 @@
# coding=utf-8
import json
print 'Вытаскиваю материалы'
_fixture = json.load(open('fixtures/courses.json'))
loader = ('courses.course')
w = open('fixtures/courses.json', 'w')
for i in _fixture:
if i['model'] in loader.keys():
i['model'] = loader[i['model']]
json.dump(_fixture, w)
w.close()
print 'Закончил вытаскивание'

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,105 +0,0 @@
# coding=utf-8
def set_hm_success(obj):
# Получить статус домашку в success
if obj['fields']['status'] == 'F':
return True
else:
return False
def create_try(obj):
# Создать попытку со всеми комментариями и результатом
global HT
HT += 1
if obj["fields"]["teacher"]:
_journal_result.append({"model": "journals.homeworktry",
"pk": HT, "fields": {"parent": obj['pk'], "student": obj['fields']['student'],
"teacher": obj['fields']['teacher'],
"material": obj['fields']['homework'],
"date": obj['fields']['date'], "f_date": obj['fields']['f_date'],
"comments": obj['fields']['comments'],
"success": set_hm_success(obj),
"expired": False}})
print 'Создание карты курса'
# id: {'themes': {}, 'exam': 'id экзамена'}
# 'themes': {'id темы': {'lessons': [список id уроков], 'homework': id дз}
_courses_map = {}
for i in _fixture:
if i['model'] == 'courses.course':
if i['pk'] not in _courses_map.keys():
# Добавить курс на карту
_courses_map[i['pk']] = {'themes': {}, 'exam': {}}
elif i['model'] == 'courses.coursetheme':
# Добавить тему в курс
if i['pk'] not in _courses_map[i['fields']['course']]['themes'].keys():
_courses_map[i['fields']['course']]['themes'][i['pk']] = {'lessons': set({}), 'homework': ''}
elif i['model'] == 'courses.exam':
# Присвоить курсу ID экзамена
_courses_map[i['fields']['course']]['exam'] = i['pk']
elif i['model'] == 'courses.homework':
# Добавить домашнее задание в тему
_courses_map[i['fields']['course']]['themes'][i['fields']['theme']]['homework'] = i['pk']
elif i['model'] == 'courses.lesson':
_courses_map[i['fields']['course']]['themes'][i['fields']['theme']]['lessons'].add(i['pk'])
# Вторая обработка
print 'Постобработка'
for key, value in _theme_counts.items():
value['fix'] = int(value['fix']) + 1
value['last'] = value['fix']
# +1 - готовый ID для новой темы
print 'Обход по карте'
_merge_map = {
'journals.teacherj': {'exclude': ['lessons', 'homeworks', 'exam', 'f_date'],
'new': {'progress': 0},
'rename': {},
'rebuild': {}},
'journals.lessonj': {'exclude': ['status'],
'new': {'success': True, 'parent': None},
'rename': {'lesson': 'material'},
'rebuild': {}},
'journals.homeworkj': {'exclude': ['status', 'comments'],
'new': {'success': set_hm_success, 'parent': None},
'rename': {'homework': 'material'},
'rebuild': {'comments': create_try}},
'journals.examj': {'exclude': ['status', 'comments'],
'new': {'success': False, 'parent': None},
'rename': {'exam': 'material'},
'rebuild': {}},
}
# Преобразовать модели объектов
_journal_result = []
for i in _journal:
if i['model'] in _merge_map.keys():
__tmp = {}
for key, value in _merge_map[i['model']]['rebuild'].items():
value(i)
for key, value in i['fields'].items():
# Исключить не используемые поля
if key not in _merge_map[i['model']]['exclude']:
if key in _merge_map[i['model']]['rename'].keys():
# Переименовать переменные
__tmp[_merge_map[i['model']]['rename'][key]] = value
else:
__tmp[key] = value
for key, value in _merge_map[i['model']]['new'].items():
if type(value) in [str, int, bool] or value is None:
__tmp[key] = value
else:
# Получение не определенного заранее ответа
__tmp[key] = value(i)
# Как получить ID журнала темы
__tmp = {"pk": i['pk'], "model": i['model'], "fields": __tmp}
_journal_result.append(__tmp)
else:
_journal_result.append(i)
json.dump(_journal_result, open('fixtures/journals.json', 'w'))

@ -1,63 +0,0 @@
м# coding=utf-8
import os
import django
from post_fixtures import main
from _utils.clear_db import main as clear_main
print '==== Загружаю DJANGO'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from storage.models import Storage, CroppedImage
print '==== Загрузил DJANGO'
# == Загрузка данных
print '==== Обрабатываю модели'
# Загрузка материалов
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print BASE_DIR
APPS = ('storage', 'access', 'management', 'courses', 'finance', )
#courses_models = ('courses.course', 'courses.coursetheme', 'courses.lesson', 'courses.homework', 'courses.exam')
#journal_models = ('courses.teacherj', 'courses.lessonj', 'courses.homeworkj', 'courses.examj')
#finance_models = ("courses.bill", 'courses.price', 'courses.servicerequest')
clear_main()
os.system('python merge_fixtures.py')
# Загрузить фикстуры не изменившихся моделей
print '==== Заливаю модели'
for app in APPS:
print app.upper()
os.system('python manage.py loaddata fixtures/{0}.json'.format(app))
print '==== Заливаю MEDIA'
os.system('tar xfz media.tar.gz')
print '==== Проверка заливки'
# Проверить существование файлов из storage
errors = []
for store in Storage.objects.all():
# Проверить original, f_format.icon
obj = (store.original.path if store.original else '',
store.f_format.icon.path if store.f_format and store.f_format.icon else '')
for i in obj:
if i and not os.path.exists(i):
errors.append(i)
#print 'Ошибки файлов: {0}'.format(len(errors))
for store in CroppedImage.objects.all():
# croppedimage.big, croppedimage.middle, croppedimage.small
obj = (store.big.path if store.big else '',
store.middle.path if store.middle else '',
store.small.path if store.small else '')
for i in obj:
if i and not os.path.exists(i):
errors.append(i)
#print 'Ошибки файлов: {0}'.format(len(errors))
print 'Ошибки файлов: {0}'.format(len(errors))
#print errors
main()

@ -1,277 +0,0 @@
# coding=utf-8
import os
import django
import sys
import simplejson as json
sys.path.append("/var/www/projects/lms/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from __migrate.post_fixtures import show_progress
from courses.models import Course, CourseTheme, Lesson, Homework, Exam, Skills, SkillJ, Achievements, CourseBuilder
from management.models import Comment
from storage.models import Storage
_fixture = json.load(open('fixtures/courses.json'))
user_pk = 1
courses = []
lessons = []
themes = []
homeworks = []
exams = []
skills = []
skillsj = []
achs = []
def new_index(model, key, obj):
if str(key) in pk_map[model]:
return obj.objects.get(id=pk_map[model][str(key)])
return None
# Пример записи маршрута
pk_map = json.load(open('pk_maps.json'))
if 'courses.course' not in pk_map.keys():
pk_map['courses.course'] = {}
if 'courses.coursetheme' not in pk_map.keys():
pk_map['courses.coursetheme'] = {}
if 'courses.lesson' not in pk_map.keys():
pk_map['courses.lesson'] = {}
if 'courses.homework' not in pk_map.keys():
pk_map['courses.homework'] = {}
if 'courses.exam' not in pk_map.keys():
pk_map['courses.exam'] = {}
if 'courses.skills' not in pk_map.keys():
pk_map['courses.skills'] = {}
if 'courses.skillj' not in pk_map.keys():
pk_map['courses.skillj'] = {}
if 'courses.achievements' not in pk_map.keys():
pk_map['courses.achievements'] = {}
for i in _fixture:
if i['model'] == 'courses.course':
if i not in courses:
courses.append(i)
elif i['model'] == 'courses.coursetheme':
if i not in themes:
themes.append(i)
elif i['model'] == 'courses.lesson':
if i not in lessons:
lessons.append(i)
elif i['model'] == 'courses.homework':
if i not in homeworks:
homeworks.append(i)
elif i['model'] == 'courses.exam':
if i not in exams:
exams.append(i)
elif i['model'] == 'courses.skills':
if i not in skillsj:
skills.append(i)
elif i['model'] == 'courses.skillj':
if i not in skillsj:
skillsj.append(i)
elif i['model'] == 'courses.achievements':
if i not in achs:
achs.append(i)
print '\nCourse'
_now = 0
big_len = len(courses)
show_progress(big_len, _now)
for i in courses:
c = Course.objects.create(
level=i['fields']['level'],
public=True,
title=i['fields']['title'],
description=i['fields']['description'],
image=i['fields']['image'],
big_image=i['fields']['big_image'],
page=i['fields']['page'],
preview=i['fields']['preview'],
sort=i['fields']['sort'],
use_fail=i['fields']['use_fail'],
basic_len=i['fields']['basic_len'],
addition_len=i['fields']['addition_len'],
min_price=i['fields']['min_price'],
buy_icon=i['fields']['buy_icon']
)
pk_map['courses.course'][str(i['pk'])] = str(c.id)
_now += 1
show_progress(big_len, _now)
print u'\nCourseTheme'
_now = 0
big_len = len(themes)
show_progress(big_len, _now)
for i in themes:
c = CourseTheme.objects.create(
price_type='E' if i['fields']['type'] == 'A' else i['fields']['type'],
_type='E' if i['fields']['type'] == 'A' else i['fields']['type'],
icon=i['fields']['icon'],
course=new_index('courses.course', i['fields']['course'], Course),
sort=i['fields']['sort'],
title=i['fields']['title'],
description=i['fields']['description'],
)
# print i['fields']['course']
# print new_index('courses.course', i['fields']['course'], Course)
pk_map['courses.coursetheme'][str(i['pk'])] = str(c.id)
_now += 1
show_progress(big_len, _now)
print u'\nLessons'
_now = 0
big_len = len(lessons)
show_progress(big_len, _now)
for i in lessons:
c = Lesson.objects.create(
free=i['fields']['free'],
token=i['fields']['token'],
title=i['fields']['title'],
sort=i['fields']['sort'],
course=new_index('courses.course', i['fields']['course'], Course),
theme=new_index('courses.coursetheme', i['fields']['theme'], CourseTheme),
description=i['fields']['description'],
video=i['fields']['video']
)
for key in i['fields']['materials']:
c.materials.add(new_index('storage.storage', key, Storage))
for key in i['fields']['comments']:
# print key
# print new_index('management.comment', key, Comment)
c.comments.add(new_index('management.comment', key, Comment))
pk_map['courses.lesson'][str(i['pk'])] = str(c.id)
_now += 1
show_progress(big_len, _now)
print u'\nHomework'
_now = 0
big_len = len(homeworks)
show_progress(big_len, _now)
for i in homeworks:
c = Homework.objects.create(
token=i['fields']['token'],
course=new_index('courses.course', i['fields']['course'], Course),
theme=new_index('courses.coursetheme', i['fields']['theme'], CourseTheme),
description=i['fields']['description'],
sort=1
)
for key in i['fields']['materials']:
c.materials.add(new_index('storage.storage', key, Storage))
_now += 1
show_progress(big_len, _now)
pk_map['courses.homework'][str(i['pk'])] = str(c.id)
print u'\nExams'
_now = 0
big_len = len(exams)
show_progress(big_len, _now)
for i in exams:
tm = CourseTheme.objects.create(
course=new_index('courses.course', i['fields']['course'], Course),
_type='Ex'
)
pk_map['courses.coursetheme'][str(tm.id)] = str(tm.id)
c = Exam.objects.create(
token=i['fields']['token'],
sort=1,
course=new_index('courses.course', i['fields']['course'], Course),
theme=tm,
icon=new_index('storage.storage', i['fields']['diploma'], Storage),
title=i['fields']['title'],
description=i['fields']['description'],
diploma=new_index('storage.storage', i['fields']['diploma'], Storage)
)
for key in i['fields']['materials']:
c.materials.add(new_index('storage.storage', key, Storage))
_now += 1
show_progress(big_len, _now)
pk_map['courses.exam'][str(i['pk'])] = str(c.id)
print u'\nПереформировать порядок'
for course in Course.objects.all():
_count = 1
#print course
for _type in ['B', 'M', 'Ex', 'E', 'P']:
for theme in CourseTheme.objects.filter(course=course, _type=_type):
theme.sort = _count
_count += 1
theme.save()
#print _count
print u'\nКарты курсов'
for course in Course.objects.all():
CourseBuilder(course).main()
print u'\nSkills'
_now = 0
big_len = len(skills)
show_progress(big_len, _now)
for i in skills:
c, c2 = Skills.objects.get_or_create(
title=i['fields']['title'],
color=i['fields']['color']
)
_now += 1
show_progress(big_len, _now)
pk_map['courses.skills'][str(i['pk'])] = str(c.id)
print u'\nSkillsJ'
_now = 0
big_len = len(skillsj)
show_progress(big_len, _now)
for i in skillsj:
c, c2 = SkillJ.objects.get_or_create(
skill=new_index('courses.skills', i['fields']['skill'], Skills),
lesson=new_index('courses.lesson', i['fields']['lesson'], Lesson),
size=i['fields']['size']
)
_now += 1
show_progress(big_len, _now)
pk_map['courses.skillj'][str(i['pk'])] = str(c.id)
print u'\nAchivements'
_now = 0
big_len = len(achs)
show_progress(big_len, _now)
for i in achs:
c, c2 = Achievements.objects.get_or_create(
tech_name=i['fields']['tech_name'],
icon=i['fields']['icon'],
title=i['fields']['title'],
image=i['fields']['image'],
background=i['fields']['background'],
border=i['fields']['border'],
)
_now += 1
show_progress(big_len, _now)
pk_map['courses.achievements'][str(i['pk'])] = str(c.id)
for course in Course.objects.all():
course.build_map()
json.dump(pk_map, open('pk_maps.json', 'w'))

@ -1,110 +0,0 @@
# coding=utf-8
import os
import django
import sys
import simplejson as json
sys.path.append("/var/www/projects/lms/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from __migrate.post_fixtures import show_progress
from courses.models import Course
from finance.models import Price, Bill, ServiceRequest
from access.models import User
_fixture = json.load(open('fixtures/courses.json'))
user_pk = 1
prices = []
bills = []
requests = []
def new_index(model, key, obj):
if str(key) in pk_map[model]:
return obj.objects.get(id=pk_map[model][str(key)])
return None
# Пример записи маршрута
pk_map = json.load(open('pk_maps.json'))
if 'finance.price' not in pk_map.keys():
pk_map['finance.price'] = {}
if 'finance.bill' not in pk_map.keys():
pk_map['finance.bill'] = {}
if 'finance.servicerequest' not in pk_map.keys():
pk_map['finance.servicerequest'] = {}
for i in _fixture:
if i['model'] == 'courses.price':
prices.append(i)
elif i['model'] == 'courses.bill':
bills.append(i)
elif i['model'] == 'courses.servicerequest':
requests.append(i)
print u'\nPrice'
_now = 0
big_len = len(prices)
show_progress(big_len, _now)
for i in prices:
f, c = Price.objects.get_or_create(
m_type=i['fields']['m_type'],
public=i['fields']['public'],
title=i['fields']['title'],
cost=i['fields']['cost'],
course=new_index('courses.course', i['fields']['course'], Course),
description=i['fields']['description']
)
_now += 1
show_progress(big_len, _now)
pk_map['finance.price'][str(i['pk'])] = str(f.id)
print u'\nBill'
_now = 0
big_len = len(bills)
show_progress(big_len, _now)
for i in bills:
s = Bill.objects.create(
status=i['fields']['status'],
user=new_index('access.user', i['fields']['user'], User),
manager=new_index('access.user', i['fields']['manager'], User),
service=new_index('finance.price', i['fields']['service'], Price),
key=i['fields']['key'],
out_id=i['fields']['out_id'],
date=i['fields']['date'],
status_changed=i['fields']['status_changed'],
comment=i['fields']['comment'],
finish_date=i['fields']['finish_date'],
salt=i['fields']['salt'],
)
_now += 1
show_progress(big_len, _now)
pk_map['finance.bill'][str(i['pk'])] = str(s.id)
print u'\nServiceRequest'
_now = 0
big_len = len(requests)
show_progress(big_len, _now)
for i in requests:
c = ServiceRequest.objects.create(
status=i['fields']['status'],
student=new_index('access.user', i['fields']['student'], User),
course=new_index('courses.course', i['fields']['course'], Course),
manager=new_index('access.user', i['fields']['manager'], User),
cancel_description=i['fields']['cancel_description'],
charge=i['fields']['charge'],
date=i['fields']['date'],
f_date=i['fields']['f_date'],
send=i['fields']['send'],
)
_now += 1
show_progress(big_len, _now)
pk_map['finance.servicerequest'][str(i['pk'])] = str(c.id)
json.dump(pk_map, open('pk_maps.json', 'w'))

@ -1,111 +0,0 @@
# coding=utf-8
import json
HT = 0
print 'Приступил к МЕРДЖУ'
loader = {
'courses.teacherj': 'journals.teacherj',
'courses.lessonj': 'journals.lessonj',
'courses.homeworkj': 'journals.homeworkj',
'courses.examj': 'journals.examj',
'courses.bill': 'finance.bill',
'courses.price': 'finance.price',
'courses.servicerequest': 'finance.servicerequest',
'courses.selfbillrequest': 'finance.selfbillrequest',
'courses.selfbillhistory': 'finance.selfbillhistory',
'courses.achievementj': 'journals.achievementj'
}
_journal = []
_finance = []
_courses = []
_theme_count = 0
_theme_counts = {}
M_material = ''
_fixture = json.load(open('fixtures/courses.json'))
# Первая обработка
for i in _fixture:
if i['model'] in loader.keys():
i['model'] = loader[i['model']]
if i['model'] == 'courses.coursetheme':
# Проверяем существование реестра счетчиков по курсу
if i['fields']['course'] not in _theme_counts.keys():
_theme_counts[i['fields']['course']] = 0
if int(i['pk']) > _theme_count:
# Ловим последний ID темы
_theme_count = int(i['pk'])
if i['fields']['type'] == 'A':
i['fields']['price_type'] = 'E'
i['fields']['type'] = 'E'
# Считаем количество расширеных тем
else:
i['fields']['price_type'] = i['fields']['type']
# Ловим последнюю сортировку базовых тем курса
if i['fields']['type'] == 'B' and int(i['fields']['sort']) > _theme_counts[i['fields']['course']]:
_theme_counts[i['fields']['course']] = int(i['fields']['sort'])
if i['fields']['type'] == 'M':
# Ловим предэкзаменационные материалы
i['fields']['price_type'] = 'B'
M_material = i
M_material['fields']['sort'] = False
if i['model'] == 'courses.homework':
i['fields']['sort'] = '1'
if i['model'] == 'courses.course':
i['fields']['public'] = True
if i['model'] == 'courses.exam':
i['fields']['sort'] = '1'
if 'finance' in i['model']:
_finance.append(i)
elif 'courses' in i['model']:
_courses.append(i)
_theme_counts[M_material['fields']['course']] += 1
for i in _fixture:
if i['model'] == 'courses.exam':
# Создаю для каждого экзамена экзаменационную тему
if not M_material['fields']['sort'] and M_material['fields']['course'] == i['fields']['course']:
M_material['fields']['sort'] = int(_theme_counts[M_material['fields']['course']])
_theme_counts[M_material['fields']['course']] += 1
_courses.append(M_material)
_theme_count += 1 # Пересчет количества экзаменов
_courses.append({"model": "courses.coursetheme",
"pk": int(_theme_count), # Расчитать ID темы - последняя
"fields": {"type": "Ex",
"price_type": "B",
"icon": "",
"course": i['fields']['course'],
"sort": int(_theme_counts[i['fields']['course']]), # Расчитать сортировку
"title": "Экзаменационная тема",
"description": ""}
})
i['fields']['theme'] = int(_theme_count)
json.dump(_courses, open('fixtures/courses.json', 'w'))
json.dump(_finance, open('fixtures/finance.json', 'w'))
_fixture = json.load(open('fixtures/management.json'))
for i in _fixture:
if i['model'] == 'management.comment':
i['fields']['saw'] = []
tmp = {}
for key, value in i['fields'].items():
# Убрать не нужны поля
if key != 'public':
tmp[key] = value
i['fields'] = tmp
json.dump(_fixture, open('fixtures/management.json', 'w'))
print 'Закончил МЕРДЖ'

@ -1,228 +0,0 @@
# coding=utf-8
import os
import django
import sys
import simplejson as json
sys.path.append("/var/www/projects/lms/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from __migrate.post_fixtures import show_progress
from access.models import User
from courses.models import Exam, Homework, Lesson, Achievements, Course, CourseTheme
from journals.models import TeacherJ, AchievementJ, LessonJ, HomeworkJ, ExamJ, CourseThemeJ, HomeworkTry, check_journal
from storage.models import Storage
from management.models import Comment
_fixture = json.load(open('fixtures/courses.json'))
teachers = []
achss = []
lessonss = []
homeworks = []
exams = []
def new_index(model, key, obj):
if str(key) in pk_map[model]:
return obj.objects.get(id=pk_map[model][str(key)])
return None
# Пример записи маршрута
pk_map = json.load(open('pk_maps.json'))
if 'journals.teacherj' not in pk_map.keys():
pk_map['journals.teacherj'] = {}
if 'journals.achievementj' not in pk_map.keys():
pk_map['journals.achievementj'] = {}
if 'journals.lessonj' not in pk_map.keys():
pk_map['journals.lessonj'] = {}
if 'journals.homeworkj' not in pk_map.keys():
pk_map['journals.homeworkj'] = {}
if 'journals.examj' not in pk_map.keys():
pk_map['journals.examj'] = {}
for i in _fixture:
if i['model'] == 'courses.teacherj':
teachers.append(i)
elif i['model'] == 'courses.achievementj':
achss.append(i)
elif i['model'] == 'courses.lessonj':
lessonss.append(i)
elif i['model'] == 'courses.homeworkj':
homeworks.append(i)
elif i['model'] == 'courses.examj':
exams.append(i)
def achnivs():
print u'\nAchievementJ'
_now = 0
big_len = len(achss)
show_progress(big_len, _now)
for i in achss:
s = AchievementJ.objects.create(
group=i['fields']['group'],
title=i['fields']['title'],
text=i['fields']['text'],
student=new_index('access.user', i['fields']['student'], User),
achievement=new_index('courses.achievements', i['fields']['achievement'], Achievements),
got=i['fields']['got'],
date=i['fields']['date']
)
_now += 1
show_progress(big_len, _now)
pk_map['journals.achievementj'][str(i['pk'])] = str(s.id)
def tej():
print u'\nПереформирование журналов TeacherJ'
for i in teachers:
tj, c = TeacherJ.objects.get_or_create(student=new_index('access.user', i['fields']['student'], User),
course=new_index('courses.course', i['fields']['course'], Course))
# print i['fields']
if tj.start_date != i['fields']['start_date']:
tj.start_date = i['fields']['start_date']
if tj.teacher != new_index('access.user', i['fields']['teacher'], User):
tj.teacher = new_index('access.user', i['fields']['teacher'], User)
# check_journal(tj, tj.student, tj.course)
tj.save()
check_journal(tj)
pk_map['journals.teacherj'][str(i['pk'])] = str(tj.id)
print u'\nCreate CourseThemeJ'
for journal in TeacherJ.objects.all():
for theme in CourseTheme.objects.filter(course=journal.course):
c, c2 = CourseThemeJ.objects.get_or_create(material=theme, student=journal.student)
if c.parent != journal:
c.parent = journal
c.save()
def get_point(point, t, f):
if point:
return t
else:
return f
def lj():
print u'\nLessonJ'
_now = 0
big_len = len(lessonss)
show_progress(big_len, _now)
for i in lessonss:
# print i
c, c2 = LessonJ.objects.get_or_create(
student=new_index('access.user', i['fields']['student'], User),
material=new_index('courses.lesson', i['fields']['lesson'], Lesson),
# parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User),
# material=new_index('courses.lesson', i['fields']['lesson'], Lesson).theme)
)
c.success = bool(i['fields']['status'] == 'F')
c.date = get_point(i['fields']['status'] != 'N', i['fields']['date'], None)
c.f_date = get_point(i['fields']['status'] == 'F', i['fields']['f_date'], None)
c.save()
_now += 1
show_progress(big_len, _now)
pk_map['journals.lessonj'][str(i['pk'])] = str(c.id)
def create_try(parent, date):
return HomeworkTry.objects.create(
parent=parent,
material=parent.material,
student=parent.student,
teacher=parent.teacher,
date=date
)
def hj():
print u'\nHomeworkJ'
_now = 0
big_len = len(homeworks)
show_progress(big_len, _now)
for i in homeworks:
c, c2 = HomeworkJ.objects.get_or_create(
student=new_index('access.user', i['fields']['student'], User),
material=new_index('courses.homework', i['fields']['homework'], Homework)
# parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User),
# material=new_index('courses.homework', i['fields']['homework'],
# Homework).theme)
)
c.date = i['fields']['date']
c.f_date = i['fields']['f_date']
c.teacher = new_index('access.user', i['fields']['teacher'], User)
c.success = False
c.save()
comments = [new_index('management.comment', comment, Comment) for comment in i['fields']['comments']]
_try = None
for comment in comments:
must_del = False
if not _try:
_try = create_try(c, comment.date)
if '<span class="label label-success">Задача принята! </span><br>' in comment.text.encode('utf8'):
_try.f_date = comment.date
_try.success = True
must_del = True
if '<span class="label label-danger">Отправлено на доработку!</span><br>' in comment.text.encode('utf8'):
_try.f_date = comment.date
must_del = True
_try.comments.add(comment)
_try.save()
if must_del:
_try = None
must_del = False
_now += 1
show_progress(big_len, _now)
pk_map['journals.homeworkj'][str(i['pk'])] = str(c.id)
def exj():
print u'\nExamJ'
_now = 0
big_len = len(exams)
show_progress(big_len, _now)
for i in exams:
# print i
c, c2 = ExamJ.objects.get_or_create(
material=new_index('courses.exam', i['fields']['exam'], Exam),
student=new_index('access.user', i['fields']['student'], User)
# parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User),
# material___type='Ex',
# material__course=new_index('courses.exam', i['fields']['exam'],
# Exam).course)
)
c.teacher = new_index('access.user', i['fields']['teacher'], User)
c.date = i['fields']['date']
c.f_date = i['fields']['f_date']
c.success = False
c.diploma = new_index('storage.storage', i['fields']['diploma'], Storage)
c.save()
_now += 1
show_progress(big_len, _now)
pk_map['journals.examj'][str(i['pk'])] = str(c.id)
if __name__ == '__main__':
# achnivs()
lj()
hj()
exj()
tej()
json.dump(pk_map, open('pk_maps.json', 'w'))

@ -1,88 +0,0 @@
# coding=utf-8
import os
import django
import sys
import simplejson as json
sys.path.append("/var/www/projects/lms/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from __migrate.post_fixtures import show_progress
from storage.models import Storage
from access.models import User
from management.models import News, Comment, Feedback
_fixture = json.load(open('fixtures/management.json'))
user_pk = 1
findex = []
storage = []
crimg = []
def new_index(model, key, obj):
if str(key) in pk_map[model]:
return obj.objects.get(id=pk_map[model][str(key)])
return None
# Пример записи маршрута
pk_map = json.load(open('pk_maps.json'))
if 'management.news' not in pk_map.keys():
pk_map['management.news'] = {}
if 'management.comment' not in pk_map.keys():
pk_map['management.comment'] = {}
if 'management.feedback' not in pk_map.keys():
pk_map['management.feedback'] = {}
for i in _fixture:
if i['model'] == 'management.news':
findex.append(i)
elif i['model'] == 'management.comment':
storage.append(i)
elif i['model'] == 'management.feedback':
crimg.append(i)
print u'\nComments'
_now = 0
big_len = len(storage)
show_progress(big_len, _now)
for i in storage:
s = Comment.objects.create(
closed=i['fields']['closed'],
parent_id=i['fields']['parent_id'],
owner=new_index('access.user', i['fields']['owner'], User),
text=i['fields']['text'],
date=i['fields']['date'],
send=i['fields']['send']
)
for key in i['fields']['files']:
s.files.add(new_index('storage.storage', key, Storage))
_now += 1
show_progress(big_len, _now)
pk_map['management.comment'][str(i['pk'])] = str(s.id)
print u'\nFeedBack'
_now = 0
big_len = len(crimg)
show_progress(big_len, _now)
for i in crimg:
c = Feedback.objects.create(
closed=i['fields']['closed'],
name=i['fields']['name'],
email=i['fields']['email'],
phone=i['fields']['phone'],
text=i['fields']['text'],
date=i['fields']['date'],
send=i['fields']['send']
)
_now += 1
show_progress(big_len, _now)
pk_map['management.feedback'][str(i['pk'])] = str(c.id)
json.dump(pk_map, open('pk_maps.json', 'w'))

@ -1,100 +0,0 @@
# coding=utf-8
import os
import django
import sys
import simplejson as json
sys.path.append("/var/www/projects/lms/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from __migrate.post_fixtures import show_progress
from storage.models import FormatIndex, Storage, CroppedImage
_fixture = json.load(open('fixtures/storage.json'))
user_pk = 1
findex = []
storage = []
crimg = []
def new_index(model, key, obj):
if str(key) in pk_map[model]:
return obj.objects.get(id=pk_map[model][str(key)])
return None
# Пример записи маршрута
pk_map = json.load(open('pk_maps.json'))
if 'storage.formatindex' not in pk_map.keys():
pk_map['storage.formatindex'] = {}
if 'storage.storage' not in pk_map.keys():
pk_map['storage.storage'] = {}
if 'storage.croppedimage' not in pk_map.keys():
pk_map['storage.croppedimage'] = {}
for i in _fixture:
if i['model'] == 'storage.formatindex':
findex.append(i)
elif i['model'] == 'storage.storage':
storage.append(i)
elif i['model'] == 'storage.croppedimage':
crimg.append(i)
print u'\nFormatIndex'
_now = 0
big_len = len(findex)
show_progress(big_len, _now)
for i in findex:
f = FormatIndex.objects.create(
f_type=i['fields']['f_type'],
name=i['fields']['name'],
description=i['fields']['description'],
icon=i['fields']['icon'],
icon_class=i['fields']['icon_class'],
)
pk_map['storage.formatindex'][str(i['pk'])] = str(f.id)
_now += 1
show_progress(big_len, _now)
print u'\nStorage'
_now = 0
big_len = len(storage)
show_progress(big_len, _now)
for i in storage:
s = Storage.objects.create(
loaded=i['fields']['loaded'],
name=i['fields']['name'],
key=i['fields']['key'],
original=i['fields']['original'],
f_format=new_index('storage.formatindex', i['fields']['f_format'], FormatIndex),
description=i['fields']['description'],
date=i['fields']['date'],
error=i['fields']['error'],
)
pk_map['storage.storage'][str(i['pk'])] = str(s.id)
_now += 1
show_progress(big_len, _now)
print u'\nCroppedImg'
_now = 0
big_len = len(crimg)
show_progress(big_len, _now)
for i in crimg:
c = CroppedImage.objects.create(
original=new_index('storage.storage', i['fields']['original'], Storage),
big=i['fields']['big'],
middle=i['fields']['middle'],
small=i['fields']['small'],
cropped=i['fields']['cropped'],
)
pk_map['storage.croppedimage'][str(i['pk'])] = str(c.id)
_now += 1
show_progress(big_len, _now)
json.dump(pk_map, open('pk_maps.json', 'w'))

@ -1,116 +0,0 @@
# coding=utf-8
import os
import django
import sys
import simplejson as json
sys.path.append("/var/www/projects/lms/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from __migrate.post_fixtures import show_progress
from access.models import User, Subscription, ActionJ
_fixture = json.load(open('fixtures/access.json'))
user_pk = 1
users = []
subs = []
acts = []
actjs = []
# Пример записи маршрута
pk_map = json.load(open('pk_maps.json'))
if 'access.user' not in pk_map:
pk_map['access.user'] = {}
if 'access.subscription' not in pk_map:
pk_map['access.subscription'] = {}
if 'access.actionj' not in pk_map:
pk_map['access.actionj'] = {}
for i in _fixture:
if i['model'] == 'access.user':
users.append(i)
elif i['model'] == 'access.subscription':
subs.append(i)
elif i['model'] == 'access.actionj':
actjs.append(i)
print u'\nUsers'
_now = 0
big_len = len(users)
show_progress(big_len, _now)
for i in users:
u = User.objects.create(
password=i['fields']['password'],
email=i['fields']['email'],
changed_email=i['fields']['changed_email'],
phone=i['fields']['phone'],
back_phone=i['fields']['back_phone'],
status=i['fields']['status'],
in_role=i['fields']['in_role'],
deactivate=i['fields']['deactivate'],
city=i['fields']['city'],
b_day=i['fields']['b_day'],
token=i['fields']['token'],
activate_time=i['fields']['activate_time'],
reg_status=i['fields']['reg_status'],
is_active=i['fields']['is_active'],
is_admin=i['fields']['is_admin'],
is_staff=i['fields']['is_staff'],
avatar=i['fields']['avatar'],
fname=i['fields']['fname'],
name=i['fields']['name'],
oname=i['fields']['oname'],
skype='',
facebook='',
vk='',
linkedin='',
odnoklassniki='',
date_joined=i['fields']['date_joined']
)
_now += 1
show_progress(big_len, _now)
pk_map['access.user'][str(i['pk'])] = str(u.id)
print u'\nSubscriptions'
_now = 0
big_len = len(subs)
show_progress(big_len, _now)
for i in subs:
s = Subscription.objects.create(
owner=User.objects.get(id=pk_map['access.user'][str(i['fields']['owner'])]),
news=i['fields']['news'],
teacher=i['fields']['teacher'],
new_comments=i['fields']['new_comments'],
send_sms=i['fields']['send_sms'],
courses=i['fields']['courses'],
)
_now += 1
show_progress(big_len, _now)
pk_map['access.subscription'][str(i['pk'])] = str(s.id)
print u'\nActions'
_now = 0
big_len = len(actjs)
show_progress(big_len, _now)
for i in actjs:
a = ActionJ.objects.create(
student=User.objects.get(id=pk_map['access.user'][str(i['fields']['student'])]),
a_type=i['fields']['a_type'],
place=i['fields']['place'],
date=i['fields']['date'],
text=i['fields']['text'],
)
_now += 1
show_progress(big_len, _now)
pk_map['access.actionj'][str(i['pk'])] = str(a.id)
json.dump(pk_map, open('pk_maps.json', 'w'))

@ -1,121 +0,0 @@
# coding=utf-8
import os
import django
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from courses.models import CourseTheme, Course
from journals.models import HomeworkTry as HT, TeacherJ, CourseThemeJ, LessonJ, HomeworkJ, ExamJ
def split_ht():
# Разделить комментарии по попыткам
print '==== Разбиваю попытки'
big_length = HT.objects.all().count()
_now = 0
show_progress(big_length, _now)
for i in HT.objects.all():
# Получить все попытки
# Пройтись по комментариям по порядку
# Если в тексте преподавателя есть <span class="label label-danger">Отправлено на доработку!</span>
# <span class="label label-success">Задача принята! </span><br> - одобрено
do = True
for n in i.comments.all().order_by('id'):
if do:
_tmp = HT.objects.create(parent=i.parent, material=i.material, student=i.student, teacher=i.teacher,
date=i.date, f_date=i.f_date)
do = False
if '<span class="label label-success">Задача принята! </span><br>' in n.text.encode('utf8'):
#print 'Нашел одобрение'
_tmp.success = True
_tmp.f_date = n.date
_tmp.save()
do = True
elif '<span class="label label-danger">Отправлено на доработку!</span><br>' in n.text.encode('utf8'):
#print 'Нашел отказ'
_tmp.success = False
_tmp.f_date = n.date
_tmp.save()
do = True
#print 'Добавил комментарий в попытку {0}'.format(_tmp.id)
_tmp.comments.add(n)
i.delete()
_now += 1
show_progress(big_length, _now)
print ''
def CTJ_split():
print '==== Создаю журналы тем'
# TODO: Не нужно создавать тему там, где нет журналов?
# Присвоить журналы тем домашним работам/ урокам/ экзаменам
big_length = TeacherJ.objects.all().count()
_now = 0
show_progress(big_length, _now)
for journal in TeacherJ.objects.all():
for theme in CourseTheme.objects.filter(course=journal.course):
CTJ = CourseThemeJ.objects.create(parent=journal, material=theme, student=journal.student)
if CTJ.material.type == 'B':
for lesson in LessonJ.objects.filter(material__theme=theme, student=journal.student):
if lesson.parent != CTJ:
lesson.parent = CTJ
lesson.save()
for homework in HomeworkJ.objects.filter(material__theme=theme, student=journal.student):
if homework.parent != CTJ:
homework.parent = CTJ
homework.save()
elif CTJ.material.type == 'Ex':
try:
ex = ExamJ.objects.get(material__course=journal.course, student=journal.student)
except ExamJ.DoesNotExist:
pass
else:
ex.parent = CTJ
ex.save()
_now += 1
show_progress(big_length, _now, post=journal.id)
print ''
def empty_journals():
print '==== Создаю пустые журналы'
big_length = Course.objects.all().count()
_now = 0
show_progress(big_length, _now)
for course in Course.objects.all():
try:
TeacherJ.objects.create(course=course, student=None)
except:
continue
else:
_now += 1
show_progress(big_length, _now)
print ''
def show_progress(full, now, post=''):
# + Процесс отображения процентов выполнения
# Отображение процента выполнения
if full != 0:
progress = float(now / (full * 0.01))
else:
progress = '100'
sys.stdout.write(u'\rВыполнено: {0:6.4}% {1}'.format(progress, post))
sys.stdout.flush()
def rights():
os.system('chown www-data:www-data -R *')
def main():
rights()
#CTJ_split()
empty_journals()
#split_ht()
if __name__ == '__main__':
main()

@ -1,11 +0,0 @@
# coding=utf-8
import os
import django
print '==== Загружаю DJANGO'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from courses.models import Lesson, CourseMap
l = Lesson.objects.all().first()
CourseMap.objects.create(lesson=l, sort=0)

Binary file not shown.

@ -1,83 +0,0 @@
function parseGetParams() {
var $_GET = {};
var __GET = window.location.search.substring(1).split("&");
for(var i=0; i<__GET.length; i++) {
var getVar = __GET[i].split("=");
$_GET[getVar[0]] = typeof(getVar[1])=="undefined" ? "" : getVar[1];
}
return $_GET;
}
function in_array(value, array) {
for(var i=0; i<array.length; i++){
if(value == array[i]) return true;
}
return false;
}
function check_email(data){
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(data);
}
function not_empty(data){
var result = false;
if (data.length > 0){
result = true
}
return result;
}
function check_form(email, phone, data, error) {
$(error).fadeOut('fast');
if(check_email(email) && not_empty(phone)){
create_bill($(data), $(error))
} else {
$('[name=error_place]').html('Форма заполнена не верно').fadeIn();
}
}
function create_bill(form, error){
var get = parseGetParams();
if ('admitad_uid' in get){
var forms = $('forms');
var ad_ui = get['admitad_uid'];
var input = '<input readonly name="uid" style="display: none;" value="'+ad_ui+'">';
for (var i =0;i<forms.length;i++){
$(forms[i]).append(input)
}
}
$(error).fadeOut();
$.ajax({
type: 'POST',
url: 'https://lms.ru/access/create_bill/',
data: $(form).serialize(),
success: function(data) {
if (data.code == '0'){
$(error).html(data.response).fadeIn();
} else {
if (data['data']['gift']){
location.href=data['data']['pay_url']
} else {
$(error).html('Счет успешно добавлен').fadeIn();
}
}
}
});
}
function create_user(form, error){
$(error).fadeOut();
$.ajax({
type: 'POST',
url: 'https://lms.ru/access/create_user/',
data: $(form).serialize(),
success: function(data) {
if (data.code == '0'){
$(error).html(data.response).fadeIn();
} else {
$(error).html('Пользователь успешно зарегистрирован').fadeIn();
}
}
});
}

File diff suppressed because one or more lines are too long

@ -1,19 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src='jquery.min.js'></script>
<script type="text/javascript" src='form.js'></script>
</head>
<body>
<form onclick="return false;" name="bill_form">
<p name="error_place" style="background: #ffc; display: none;"></p>
<input name="email" placeholder="Почта" type="text">
<input name="phone" placeholder="Телефон" type="text">
<input name="token" value="iLeeoRvQM7gpAyAglTi3" readonly style="display: none;">
<input name="service" value="k7vNYr2bg7q0oAznexWfsmd9ik91OtuVjizKJQuuaRiJ3aOr5I" readonly style="display: none;">
<button onclick="check_form($('[name=email]').val(), $('[name=phone]').val(), $($(this).parent()), $('[name=error_place]'))">Отправить</button>
</form>
</body>
</html>

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Подключение оплаты со стороннего ресурса</title>
</head>
<body>
<form>
<input name="email">
<button onclick></button>
</form>
</body>
</html>

@ -1,15 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script language="javascript" src="../static/js/prototype.js"></script>
<script language="javascript" src="../static/js/NTP.js"></script>
<script language="javascript">
NTP.sync();
</script>
</head>
<body>
</body>
</html>

File diff suppressed because it is too large Load Diff

@ -1,10 +0,0 @@
# coding=utf-8
import re
with open('1.txt', 'r') as myfile:
data=myfile.read()
r = re.compile(r"^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@([a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)*(aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[a-z][a-z])$")
n = re.compile(r'\w+$')
print r.findall(data)
Loading…
Cancel
Save