コード例 #1
0
ファイル: Gestion.py プロジェクト: bubux29/snsm
 def sauvegarder_modif(self):
     inst = self.instance
     cls = type(inst)
     for reponse in self.form.reponses:
         if is_related(cls, reponse.champ):
             champ = getmember(inst, reponse.champ)
             vide_refs(champ)
             rajoute_refs(champ, reponse.get_value())
             inst.save()
         elif reponse.get_value() != getmember(inst, reponse.champ):
             inst = modifier_champ(cls, inst, reponse.champ,
                                   reponse.get_value())
コード例 #2
0
ファイル: Gestion.py プロジェクト: bubux29/snsm
def ajouter_nouveau(classe, **elems):
    # Malheureusement, la création d'un nouvel objet en base ne peut pas se faire
    # directement avec des cross-reference (ManyToMany).
    # On crée d'abord l'objet, ensuite on ajoute les cross-ref
    cross_ref = {
        cr: elems[cr]
        for cr in elems.keys() if is_related(classe, cr)
    }
    not_cross_ref = {r: elems[r] for r in elems.keys() if r not in cross_ref}
    obj = classe.create(**not_cross_ref)
    for elem in cross_ref.keys():
        getmember(obj, elem).add(cross_ref[elem])
    obj.save()
コード例 #3
0
ファイル: Gestion.py プロジェクト: bubux29/snsm
def consultationElements(classe):
    elems = list()
    # D'abord, on voit s'il y a une image dans le modèle
    try:
        chemin = getmember(classe, 'image')[0]
    except Exception as e:
        chemin = ''
    for elem in formation_db.liste_par_classe(classe):
        elem_details = OrderedDict()
        if chemin:
            path = getmember(elem, chemin)
            elem_details[chemin] = ImageViewCell(path, width=80, name='Photo')
            elem_details[chemin].hidden = elem
        elem_details = cells(elem, elem_details)
        elems.append(elem_details)
    return elems
コード例 #4
0
ファイル: Gestion.py プロジェクト: bubux29/snsm
def modifier_champ(cls, inst, champ, valeur):
    q = cls.update({getmember(cls, champ): valeur}).where(cls.id == inst.id)
    q.execute()
    # On met à jour la valeur de l'instance qu'on vient de modifier
    # Opération nécessaire : en cas d'absence, il n'y a pas de mise-à-jour
    # si l'instance ne contient qu'un champ dans cette base de donnée...
    # (va comprendre)
    return cls.get(cls.id == inst.id)
コード例 #5
0
ファイル: Gestion.py プロジェクト: bubux29/snsm
def gti(nom_champ, class_obj, current_values=None):
    # Si jamais, dans le design, on limite les choix à un ensemble fermé
    if getmember(class_obj, 'choices'):
        liste_de_vals = [value for enum, value in class_obj.choices]
        return GestionListeChoixUnique(nom_champ,
                                       liste_de_vals,
                                       current_values=current_values)
    else:
        return GestionTextInput(current_values=current_values)
コード例 #6
0
ファイル: Gestion.py プロジェクト: bubux29/snsm
def generateForm(classe, instance=None):
    box = GridLayout(cols=2)
    box.reponses = list()
    # D'abord, on voit s'il y a une image dans le modèle
    try:
        images = getmember(classe, 'image')
        if not images:
            images = []
    except Exception as e:
        images = []

    for image in images:
        if image in classe.requis:
            elem = getmember(classe, image)
            box.add_widget(Label(text=elem.verbose_name))
            if instance:
                values = getmember(instance, image)
            else:
                values = None
            reponse = widgetDict['E_ImageField'](image, elem, values)
            reponse.champ = image
            box.add_widget(reponse)
            box.reponses.append(reponse)
    others = [champ for champ in classe.requis if champ not in images]
    fdict = dict([(name, obj) for name, obj in inspect.getmembers(
        classe, lambda x: dbHelper.isType(type(x))) if name in others])
    for nom_champ in others:
        box.add_widget(Label(text=fdict[nom_champ].verbose_name))
        ty = dbHelper.whatType(type(fdict[nom_champ]))
        if instance:
            values = getmember(instance, nom_champ)
            if is_related(classe, nom_champ):
                values = list(values)
        else:
            values = None
        reponse = widgetDict[ty](nom_champ, fdict[nom_champ], values)
        reponse.champ = nom_champ
        box.add_widget(reponse)
        box.reponses.append(reponse)
    box.add_widget(Widget())
    return box
コード例 #7
0
ファイル: Gestion.py プロジェクト: bubux29/snsm
def is_related(classe, elem):
    return whatType(type(getmember(classe, elem))) == 'E_MultiLinkField' \
            or whatType(type(getmember(classe, elem))) == 'E_LinkField'