Source code for erecord_db.models_mixins

# -*- coding: utf-8 -*-
"""erecord_db.models_mixins

Mixins for models of the erecord_db application

"""

from django.db import models

from django.core.exceptions import ValidationError

from django import forms

import os
from erecord_cmn.utils.vle import get_rep_pkgname_list
from erecord_cmn.utils.vle import get_rep_pkg_exp_path
from erecord_cmn.utils.vle import get_rep_pkg_data_path

import datetime

# Some mixins for the erecord_db models

[docs]class VleRepMixin(object): """additional methods for VleRep """
[docs] def read_and_add_tree(self) : """reads a VleRep tree (its vle packages and their vpz files) in its path and add the relevant VlePkg and VleVpz into the database """ vleversion = self.get_vle_version_name() vlepkgname_list = get_rep_pkgname_list(rep_path=self.path, vle_version=vleversion) for vlepkgname in vlepkgname_list : vlepkg = self.vlepkg_list.create(name=vlepkgname) vlepkg_exp_path = get_rep_pkg_exp_path(rep_path=self.path, vle_version=vleversion, pkgname=vlepkgname ) for root, dirs, files in os.walk( vlepkg_exp_path, topdown=False): for name in files: vlevpzname = os.path.relpath( os.path.join(root, name), vlepkg_exp_path ) if vlevpzname != "CMakeLists.txt" : vlepkg.vlevpz_list.create(name=vlevpzname)
[docs] def read_and_update_tree(self) : """reads a VleRep tree (its vle packages and their vpz files) in its path and add or remove the relevant VlePkg and VleVpz into the database """ path_content = dict() # vlepkgname as key, list of vlevpzname as value vleversion = self.get_vle_version_name() vlepkgname_list = get_rep_pkgname_list(rep_path=self.path, vle_version=vleversion) for vlepkgname in vlepkgname_list : path_content[vlepkgname] = list() vlepkg_exp_path = get_rep_pkg_exp_path(rep_path=self.path, vle_version=vleversion, pkgname=vlepkgname) for root, dirs, files in os.walk( vlepkg_exp_path, topdown=False): for name in files: vlevpzname = os.path.relpath( os.path.join(root, name), vlepkg_exp_path ) if vlevpzname != "CMakeLists.txt" : path_content[vlepkgname].append(vlevpzname) # delete into the database what is not (anymore) in path for vlepkg in self.vlepkg_list.all(): if vlepkg.name not in path_content.keys(): vlepkg.delete() else : for vlevpz in vlepkg.vlevpz_list.all(): if vlevpz.name not in path_content[vlepkg.name]: vlevpz.delete() # add into the database what is new in path vlepkg_names = [vlepkg.name for vlepkg in self.vlepkg_list.all()] for vlepkgname in path_content.keys(): if vlepkgname not in vlepkg_names: # create vlepkg and its vlevpz vlepkg = self.vlepkg_list.create(name=vlepkgname) for vlevpzname in path_content[vlepkgname]: vlepkg.vlevpz_list.create(name=vlevpzname) else : # may be create some vlevpz for vlepkg in self.vlepkg_list.all().filter(name=vlepkgname): for vlevpzname in path_content[vlepkgname]: vlevpz_names = [vlevpz.name for vlevpz in vlepkg.vlevpz_list.all()] if vlevpzname not in vlevpz_names: vlepkg.vlevpz_list.create(name=vlevpzname)
[docs]class VlePkgMixin(object): """additional methods for VlePkg """
[docs] def get_datafilename_list(self): """Defines and returns the name list of data folder files of VlePkg The data folder is the default one : 'data' subdirectory of the vle package. 'CMakeLists.txt' is excluded. """ data_path = get_rep_pkg_data_path(rep_path=self.vlerep.path, vle_version = self.vlerep.get_vle_version_name(), pkgname=self.name ) tmp = forms.FilePathField(path=data_path, recursive=True, allow_files=True, allow_folders=False) data_list = [ os.path.relpath(v, data_path) for (v,c) in tmp.choices ] n = "CMakeLists.txt" if n in data_list: data_list.remove(n) return data_list
[docs]class VleVpzMixin(object): """additional methods for VleVpz """
[docs] def for_vpzact_creation(self): """ Prepares the creation of a VpzAct from a VleVpz VpzAct is part of erecord_vpz application models """ now = datetime.datetime.now() res = None text = "Vpz activity (Vpzact) created from VleVpz. " text = text+ "VleVpz id : " + str(self.id) + ", " text = text+ "verbose_name : " + self.verbose_name + ", " text = text+ "name : " + self.name + ". " text = text+ "VlePkg id : " + str(self.vlepkg.id) + ", " text = text+ "verbose_name : " + self.vlepkg.verbose_name + ", " text = text+ "name : " + self.vlepkg.name + ". " text = text+ "VleRep id : " + str(self.vlepkg.vlerep.id) + ", " text = text+ "verbose_name : " + self.vlepkg.vlerep.verbose_name + "." text = text+ "name : " + self.vlepkg.vlerep.name + ", " text = text+ "path : " + self.vlepkg.vlerep.path + ". " text = text+ "VleVersion id : " + str(self.vlepkg.vlerep.vleversion.id) + ", " text = text+ "verbose_name : " + self.vlepkg.vlerep.vleversion.verbose_name + "." text = text+ "name : " + self.vlepkg.vlerep.vleversion.name + ", " text = text+ "usr_path : " + self.vlepkg.vlerep.vleversion.usr_path + ". " text = text+ "Time:" + str(now) + "." res = { 'vlepath': self.vlepkg.vlerep.path, 'pkgname': self.vlepkg.name, 'vpzname': self.name, 'vleversion': self.vlepkg.vlerep.vleversion.name, 'vleusrpath': self.vlepkg.vlerep.vleversion.usr_path, 'textorigin': text, } return res