Guest User

Untitled

a guest
Sep 21st, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.49 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3.  
  4. import itertools
  5. import unicodecsv as csv
  6.  
  7. from optparse import make_option
  8.  
  9. from django.core.exceptions import ObjectDoesNotExist
  10. from django.core.management.base import BaseCommand
  11.  
  12. from redmag.acuerdo.models import Nivel, Grado
  13. from redmag.nuevomodelo.models import CampoFormativoNME
  14.  
  15.  
  16. class Command(BaseCommand):
  17. def __init__(self, *args, **kwargs):
  18. self.campo_formativo_creados = 0
  19. self.campo_formativo_existentes = 0
  20. self.asignatura_creados = 0
  21. self.asignatura_existentes = 0
  22. self.tema_creados = 0
  23. self.tema_existentes = 0
  24. self.objetivo_creados = 0
  25. self.objetivo_existentes = 0
  26. self.practicasocial_creados = 0
  27. self.practicasocial_existentes = 0
  28. self.aprendizaje_creados = 0
  29. self.aprendizaje_existentes = 0
  30. super(Command, self).__init__(*args, **kwargs)
  31.  
  32. args = '<csv_path_espaniol>'
  33. help = 'Importa Aprendizajes esperados desde un archivo CSV'
  34.  
  35. option_list = BaseCommand.option_list + (
  36. make_option(
  37. '--es-ingles',
  38. action='store_true',
  39. dest='es_ingles',
  40. help='Indica si el archivo de cargar es para Inglés'
  41. ),
  42. make_option(
  43. '--delimiter',
  44. action='store',
  45. dest='delimiter',
  46. default=',',
  47. help='Delimitador de archivo CSV'
  48. ),
  49. )
  50.  
  51. def obtener_registros_csv(self, csv_path, delimiter=','):
  52. with open(csv_path, 'r') as csv_file:
  53. registros = csv.DictReader(csv_file, delimiter=delimiter)
  54. registros_list = list(registros)
  55. return registros_list
  56.  
  57. def obtener_campos_aprendizaje(self, campos):
  58. return sorted(
  59. filter(
  60. lambda nombre_campo: nombre_campo.lower().startswith('aprendizaje'), # noqa
  61. campos
  62. )
  63. )
  64.  
  65. def asignaturas_base(self, _dict):
  66. return (
  67. _dict['Nivel escolar'],
  68. _dict['Grado escolar'],
  69. _dict['Campo Formativo'],
  70. _dict['Asignatura'],
  71. _dict['Ámbito'], # Tema
  72. _dict['Prácticas sociales del Lenguage'], # Objetivo
  73. )
  74.  
  75. def asignaturas_ingles(self, _dict):
  76. return (
  77. _dict['Nivel escolar'],
  78. _dict['Grado escolar'],
  79. _dict['Campo Formativo'],
  80. _dict['Asignatura'],
  81. _dict['Ambientes Sociales de Aprendizaje'], # Tema
  82. _dict['Actividad Comunicativa'], # Objetivo
  83. _dict['Práctica Social del lenguaje'], # Practica social
  84. )
  85.  
  86. def handle(self, *args, **options):
  87. csv_path_espaniol = args[0]
  88.  
  89. csv_registros = self.obtener_registros_csv(
  90. csv_path_espaniol,
  91. delimiter=str(options['delimiter'])
  92. )
  93.  
  94. es_ingles = options['es_ingles']
  95. _sorted_groupby = (
  96. es_ingles and self.asignaturas_ingles
  97. ) or self.asignaturas_base
  98.  
  99. csv_registros_sorted = sorted(
  100. csv_registros,
  101. key=_sorted_groupby
  102. )
  103. csv_registros_groupby = itertools.groupby(
  104. csv_registros_sorted,
  105. key=_sorted_groupby
  106. )
  107.  
  108. for grouper, aprendizajes in csv_registros_groupby:
  109. # Asignaturas Inglés
  110. if es_ingles:
  111. (
  112. _nivel,
  113. _grado,
  114. _campo_formativo,
  115. _asignatura,
  116. _ambiente,
  117. _actividad,
  118. _practica_social,
  119. ) = grouper
  120.  
  121. nivel = Nivel.objects.get(nombre=_nivel)
  122. grado = Grado.objects.get(
  123. ciclo__nivel=nivel,
  124. texto__istartswith=_grado
  125. )
  126. campo_formativo = self.obtener_campo_formativo(
  127. _campo_formativo
  128. )
  129. asignatura = self.obtener_asignatura(
  130. _asignatura, grado, campo_formativo
  131. )
  132. tema = self.obtener_tema(
  133. _ambiente, asignatura
  134. )
  135. objetivo = self.obtener_objetivo(
  136. _actividad, tema
  137. )
  138. practicasocial = self.obtener_practicasocial(
  139. _practica_social, objetivo
  140. )
  141.  
  142. for aprendizaje in list(aprendizajes):
  143. campos_aprendizaje = self.obtener_campos_aprendizaje(
  144. aprendizaje.keys()
  145. )
  146. for campo_aprendizaje in campos_aprendizaje:
  147. nombre = aprendizaje[campo_aprendizaje].strip()
  148. if nombre:
  149. self.stdout.write(
  150. "procesando aprendizaje: ({nivel} - {grado} - {asignatura} {tema} - {objetivo}): {aprendizaje}".format( # noqa
  151. nivel=nivel,
  152. grado=grado,
  153. asignatura=asignatura,
  154. tema=tema,
  155. objetivo=objetivo,
  156. aprendizaje=campo_aprendizaje
  157. )
  158. )
  159. self.obtener_aprendizaje_desde_practicasocial(
  160. nombre, practicasocial
  161. )
  162. # Asignaturas base
  163. else:
  164. (
  165. _nivel,
  166. _grado,
  167. _campo_formativo,
  168. _asignatura,
  169. _ambito, _practicas_sociales,
  170. ) = grouper
  171.  
  172. nivel = Nivel.objects.get(nombre=_nivel)
  173. grado = Grado.objects.get(
  174. ciclo__nivel=nivel,
  175. texto__istartswith=_grado
  176. )
  177. campo_formativo = self.obtener_campo_formativo(
  178. _campo_formativo
  179. )
  180. asignatura = self.obtener_asignatura(
  181. _asignatura, grado, campo_formativo
  182. )
  183. tema = self.obtener_tema(
  184. _ambito, asignatura
  185. )
  186. objetivo = self.obtener_objetivo(
  187. _practicas_sociales, tema
  188. )
  189.  
  190. for aprendizaje in list(aprendizajes):
  191. campos_aprendizaje = self.obtener_campos_aprendizaje(
  192. aprendizaje.keys()
  193. )
  194. for campo_aprendizaje in campos_aprendizaje:
  195. nombre = aprendizaje[campo_aprendizaje].strip()
  196. if nombre:
  197. self.stdout.write(
  198. "procesando aprendizaje: ({nivel} - {grado} - {asignatura} {tema} - {objetivo}): {aprendizaje}".format( # noqa
  199. nivel=nivel,
  200. grado=grado,
  201. asignatura=asignatura,
  202. tema=tema,
  203. objetivo=objetivo,
  204. aprendizaje=campo_aprendizaje
  205. )
  206. )
  207. self.obtener_aprendizaje_desde_objetivo(
  208. nombre, objetivo
  209. )
  210.  
  211. self.stdout.write("campo_formativo_creados: {}\n".format(self.campo_formativo_creados))
  212. self.stdout.write("campo_formativo_existentes: {}\n".format(self.campo_formativo_existentes))
  213. self.stdout.write("asignatura_creados: {}\n".format(self.asignatura_creados))
  214. self.stdout.write("asignatura_existentes: {}\n".format(self.asignatura_existentes))
  215. self.stdout.write("tema_creados: {}\n".format(self.tema_creados))
  216. self.stdout.write("tema_existentes: {}\n".format(self.tema_existentes))
  217. self.stdout.write("objetivo_creados: {}\n".format(self.objetivo_creados))
  218. self.stdout.write("objetivo_existentes: {}\n".format(self.objetivo_existentes))
  219. self.stdout.write("practicasocial_creados: {}\n".format(self.practicasocial_creados))
  220. self.stdout.write("practicasocial_existentes: {}\n".format(self.practicasocial_existentes))
  221. self.stdout.write("aprendizaje_creados: {}\n".format(self.aprendizaje_creados))
  222. self.stdout.write("aprendizaje_existentes: {}\n".format(self.aprendizaje_existentes))
  223.  
  224. def obtener_campo_formativo(self, nombre):
  225. """
  226. Obtiene y retorna un campo formativo.
  227.  
  228. Si no existe lo crea.
  229. """
  230.  
  231. try:
  232. item = CampoFormativoNME.objects.get(
  233. nombre__iexact=nombre
  234. )
  235. item.validado = True
  236. item.save()
  237. self.campo_formativo_existentes += 1
  238. except ObjectDoesNotExist:
  239. item = CampoFormativoNME.objects.create(
  240. nombre=nombre,
  241. validado=True
  242. )
  243. self.campo_formativo_creados += 1
  244.  
  245. return item
  246.  
  247.  
  248. def obtener_asignatura(self, nombre, grado, campo_formativo):
  249. """
  250. Obtiene y retorna un objeto AsignaturaNME tomando como referencia
  251. un grado y un nombre de asignatura leído desde el documento.
  252.  
  253. Si la asignatura no existe es creada.
  254. """
  255.  
  256. try:
  257. item = grado.asignaturanme.get(
  258. nombre__iexact=nombre,
  259. campo_formativo=campo_formativo
  260. )
  261. item.validado = True
  262. item.save()
  263. self.asignatura_existentes += 1
  264. except ObjectDoesNotExist:
  265. item = grado.asignaturanme.create(
  266. nombre=nombre,
  267. campo_formativo=campo_formativo,
  268. validado=True
  269. )
  270. self.asignatura_creados += 1
  271.  
  272. return item
  273.  
  274. def obtener_tema(self, nombre, asignatura):
  275. """
  276. Obtiene y retorna un objeto TemaNME tomando como referencia
  277. un asignatura y un nombre de tema leído desde el documento.
  278.  
  279. Si el tema no existe es creado.
  280. """
  281.  
  282. try:
  283. item = asignatura.temanme.get(
  284. nombre__iexact=nombre
  285. )
  286. item.validado = True
  287. item.save()
  288. self.tema_existentes += 1
  289. except ObjectDoesNotExist:
  290. item = asignatura.temanme.create(
  291. nombre=nombre,
  292. validado=True
  293. )
  294. self.tema_creados += 1
  295.  
  296. return item
  297.  
  298. def obtener_objetivo(self, nombre, tema):
  299. """
  300. Obtiene y retorna un objeto ObjetivoNME tomando como referencia
  301. un nombre de objetivo y un tema leído desde el documento.
  302.  
  303. Si el objetivo no existe es creado.
  304. """
  305.  
  306. try:
  307. item = tema.objetivonme.get(
  308. nombre__iexact=nombre
  309. )
  310. item.validado = True
  311. item.save()
  312. self.objetivo_existentes += 1
  313. except ObjectDoesNotExist:
  314. item = tema.objetivonme.create(
  315. nombre=nombre,
  316. validado=True
  317. )
  318. self.objetivo_creados += 1
  319.  
  320. return item
  321.  
  322. def obtener_practicasocial(self, name, objetivo):
  323. """
  324. Obtiene y retorna un objeto PracticaSocialNME tomando como
  325. referencia un objetivo y un nombre de practicasocial
  326. leído desde el documento.
  327.  
  328. Si la practicasocial no existe es creada.
  329. """
  330.  
  331. try:
  332. item = objetivo.practicasocialnme.get(
  333. nombre__iexact=name
  334. )
  335. item.validado = True
  336. item.save()
  337. self.practicasocial_existentes += 1
  338. except ObjectDoesNotExist:
  339. item = objetivo.practicasocialnme.create(
  340. nombre=name,
  341. validado=True
  342. )
  343. self.practicasocial_creados += 1
  344.  
  345. return item
  346.  
  347. def obtener_aprendizaje_desde_objetivo(self, nombre, objetivo):
  348. """
  349. Obtiene y retorna un objeto aprendizajeesperado tomando como
  350. referencia un objetivo, con el nombre del
  351. aprendizaje esperado, leído del documento.
  352.  
  353. Si el aprendizaje esperado no existe es creado.
  354. """
  355.  
  356. try:
  357. item = objetivo.aprendizajeesperadonme.get(
  358. nombre__iexact=nombre
  359. )
  360. item.validado = True
  361. item.save()
  362. self.aprendizaje_existentes += 1
  363. except ObjectDoesNotExist:
  364. item = objetivo.aprendizajeesperadonme.create(
  365. nombre=nombre,
  366. is_ingles=False,
  367. validado=True
  368. )
  369. self.aprendizaje_creados += 1
  370.  
  371. return item
  372.  
  373. def obtener_aprendizaje_desde_practicasocial(self, name, practicasocial):
  374. """
  375. Obtiene y retorna un objeto aprendizajeesperado tomando como
  376. referencia una practica social, con el nombre del
  377. aprendizaje esperado, leído del documento.
  378.  
  379. Si el aprendizaje esperado no existe es creado.
  380. """
  381.  
  382. try:
  383. item = practicasocial.aprendizajeesperadonme.get(
  384. nombre__iexact=name
  385. )
  386. item.validado = True
  387. item.save()
  388. self.aprendizaje_existentes += 1
  389. except ObjectDoesNotExist:
  390. item = practicasocial.aprendizajeesperadonme.create(
  391. nombre=name,
  392. is_ingles=True,
  393. validado=True
  394. )
  395. self.aprendizaje_creados += 1
  396.  
  397. return item
Add Comment
Please, Sign In to add comment