py_ext/py_ext_rt.py
author Edouard Tisserant <edouard@beremiz.fr>
Wed, 26 Feb 2025 16:24:35 +0100 (2 months ago)
changeset 4115 a734a4d3ef23
parent 4110 2d6446418d0d
permissions -rw-r--r--
python runtime: Wamp client now parses PSK file to extract secret from it instead of using the whole file as a secret.
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1132
diff changeset
     1
#!/usr/bin/env python
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1132
diff changeset
     2
# -*- coding: utf-8 -*-
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1132
diff changeset
     3
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
     4
# This file is part of Beremiz Runtime
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1132
diff changeset
     5
#
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
     6
# Copyright (C) 2013: Laurent BESSARD
1680
6db967480b7d make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
     7
# Copyright (C) 2017: Andrey Skvortsov
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
     8
# Copyright (C) 2025: Edouard Tisserant
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1132
diff changeset
     9
#
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1132
diff changeset
    10
# See COPYING file for copyrights details.
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    11
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    12
import csv
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    13
from collections import OrderedDict
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    14
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    15
csv_int_files = {}
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    16
cvs_int_changed = set()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    17
csv_str_files = {}
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    18
cvs_str_changed = set()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    19
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    20
class Entry():
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    21
    def __init__(self, *args):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    22
        self.args = args
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    23
    def __call__(self):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    24
        return self.args
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    25
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    26
def _CSV_int_Load(fname):
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    27
    global csv_int_files
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    28
    entry = csv_int_files.get(fname, None)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    29
    if entry is None:
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    30
        data = list()
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    31
        csvfile = open(fname, 'rt', encoding='utf-8')
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    32
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    33
        try:
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    34
            dialect = csv.Sniffer().sniff(csvfile.read(1024))
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    35
            csvfile.seek(0)
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    36
            reader = csv.reader(csvfile, dialect)
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    37
            for row in reader:
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    38
                data.append(row)
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    39
        finally:
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    40
            csvfile.close()
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    41
        entry = Entry(fname, dialect, data)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    42
        csv_int_files[fname] = entry
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    43
    return entry
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    44
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    45
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    46
def _CSV_str_Load(fname):
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    47
    global csv_str_files
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    48
    entry = csv_str_files.get(fname, None)
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    49
    if entry is None:
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    50
        data = []
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    51
        csvfile = open(fname, 'rt', encoding='utf-8')
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    52
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    53
        try:
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    54
            dialect = csv.Sniffer().sniff(csvfile.read(1024))
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    55
            csvfile.seek(0)
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    56
            reader = csv.reader(csvfile, dialect)
4110
2d6446418d0d PY_EXT: fix exception with CSV loading.
Edouard Tisserant <edouard@beremiz.fr>
parents: 4107
diff changeset
    57
            first_row = reader.next()
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    58
            data.append(first_row)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    59
            col_headers = OrderedDict([(name, index+1) for index, name 
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    60
                                        in enumerate(first_row[1:])])
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    61
            max_row_len = len(first_row)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    62
            row_headers = OrderedDict()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    63
            for index, row in enumerate(reader):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    64
                row_headers[row[0]] = index+1
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    65
                data.append(row)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    66
                max_row_len = max(max_row_len, len(row))
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    67
        finally:
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
    68
            csvfile.close()
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    69
        entry = Entry(fname, dialect, col_headers, row_headers, max_row_len, data)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    70
        csv_str_files[fname] = entry
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    71
    return entry
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    72
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    73
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    74
def _CSV_str_Create(fname):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    75
    global csv_str_files
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    76
    data = [[]] # start with an empty row, acounting for header row
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    77
    dialect = None
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    78
    col_headers = OrderedDict()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    79
    row_headers = OrderedDict()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    80
    max_row_len = 1  # set to one initialy, accounting for header column
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    81
    entry = Entry(fname, dialect, col_headers, row_headers, max_row_len, data)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    82
    csv_str_files[fname] = entry
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    83
    return entry
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    84
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    85
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    86
def _CSV_Save_data(fname, dialect, data):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    87
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    88
        wfile = open(fname, 'wt')
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    89
        writer = csv.writer(wfile) if not(dialect) else csv.writer(wfile, dialect)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    90
        for row in data:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    91
            writer.writerow(row)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    92
    finally:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    93
        wfile.close()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    94
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    95
def _CSV_int_Save(entry):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    96
    fname, dialect, data = entry()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    97
    _CSV_Save_data(fname, dialect, data)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    98
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
    99
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   100
def _CSV_str_Save(entry):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   101
    fname, dialect, col_headers, row_headers, max_row_len, data = entry()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   102
    _CSV_Save_data(fname, dialect, data)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   103
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   104
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   105
_already_registered_cb = False
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   106
def _CSV_OnIdle_callback():
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   107
    global _already_registered_cb, cvs_int_changed, cvs_str_changed
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   108
    _already_registered_cb = False
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   109
    while len(cvs_int_changed):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   110
        entry = cvs_int_changed.pop()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   111
        _CSV_int_Save(entry)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   112
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   113
    while len(cvs_str_changed):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   114
        entry = cvs_str_changed.pop()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   115
        _CSV_str_Save(entry)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   116
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   117
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   118
def _CSV_register_OnIdle_callback():
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   119
    global _already_registered_cb
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   120
    if not _already_registered_cb:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   121
        OnIdle.append(_CSV_OnIdle_callback)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   122
        _already_registered_cb = True
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   123
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   124
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   125
def _CSV_int_modified(entry):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   126
    global cvs_int_changed
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   127
    cvs_int_changed.add(entry)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   128
    _CSV_register_OnIdle_callback()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   129
    
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   130
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   131
def _CSV_str_modified(entry):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   132
    global cvs_str_changed
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   133
    cvs_str_changed.add(entry)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   134
    _CSV_register_OnIdle_callback()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   135
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   136
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   137
def CSVRdInt(fname, rowidx, colidx):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   138
    """
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   139
    Return value at row/column pointed by integer indexes
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   140
    Assumes data starts at first row and first column, no headers.
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   141
    """
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   142
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   143
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   144
        _fname, _dialect, data = _CSV_int_Load(fname)()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   145
    except IOError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   146
        return "#FILE_NOT_FOUND"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   147
    except csv.Error as e:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   148
        return "#CSV_ERROR"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   149
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   150
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   151
        row = data[rowidx]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   152
        if not row and rowidx == len(data)-1:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   153
            raise IndexError
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   154
    except IndexError:
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   155
        return "#ROW_NOT_FOUND"
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   156
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   157
    try:
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   158
        return row[colidx]
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   159
    except IndexError:
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   160
        return "#COL_NOT_FOUND"
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   161
4056
4b2de1a0fbf9 Extend HMI:JsonTable, create Edit CSV POU, create example, add some doc (#41)
Dino Kosic <44305363+kraskrom@users.noreply.github.com>
parents: 3750
diff changeset
   162
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   163
def CSVRdStr(fname, rowname, colname):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   164
    """
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   165
    Return value at row/column pointed by a pair of names as string
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   166
    Assumes first row is column headers and first column is row name.
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   167
    """
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   168
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   169
    if not rowname:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   170
        return "#INVALID_ROW"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   171
    if not colname:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   172
        return "#INVALID_COLUMN"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   173
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   174
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   175
        fname, dialect, col_headers, row_headers, max_row_len, data = _CSV_str_Load(fname)()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   176
    except IOError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   177
        return "#FILE_NOT_FOUND"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   178
    except csv.Error:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   179
        return "#CSV_ERROR"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   180
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   181
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   182
        rowidx = row_headers[rowname]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   183
    except KeyError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   184
        return "#ROW_NOT_FOUND"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   185
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   186
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   187
        colidx = col_headers[colname]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   188
    except KeyError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   189
        return "#COL_NOT_FOUND"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   190
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   191
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   192
        return data[rowidx][colidx]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   193
    except IndexError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   194
        return "#COL_NOT_FOUND"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   195
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   196
4060
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   197
def CSVWrInt(fname, rowidx, colidx, content):
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   198
    """
4056
4b2de1a0fbf9 Extend HMI:JsonTable, create Edit CSV POU, create example, add some doc (#41)
Dino Kosic <44305363+kraskrom@users.noreply.github.com>
parents: 3750
diff changeset
   199
    Update value at row/column pointed by integer indexes
4b2de1a0fbf9 Extend HMI:JsonTable, create Edit CSV POU, create example, add some doc (#41)
Dino Kosic <44305363+kraskrom@users.noreply.github.com>
parents: 3750
diff changeset
   200
    Assumes data starts at first row and first column, no headers.
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   201
    """
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   202
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   203
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   204
        entry = _CSV_int_Load(fname)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   205
    except IOError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   206
        return "#FILE_NOT_FOUND"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   207
    except csv.Error as e:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   208
        return "#CSV_ERROR"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   209
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   210
    fname, dialect, data = entry()
4060
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   211
    try:
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   212
        if rowidx == len(data):
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   213
            row = []
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   214
            data.append(row)
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   215
        else:
4056
4b2de1a0fbf9 Extend HMI:JsonTable, create Edit CSV POU, create example, add some doc (#41)
Dino Kosic <44305363+kraskrom@users.noreply.github.com>
parents: 3750
diff changeset
   216
            row = data[rowidx]
4060
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   217
    except IndexError:
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   218
        return "#ROW_NOT_FOUND"
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   219
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   220
    try:
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   221
        if rowidx > 0 and colidx >= len(data[0]):
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   222
            raise IndexError
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   223
        if colidx >= len(row):
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   224
            row.extend([""] * (colidx - len(row)) + [content])
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   225
        else:
4056
4b2de1a0fbf9 Extend HMI:JsonTable, create Edit CSV POU, create example, add some doc (#41)
Dino Kosic <44305363+kraskrom@users.noreply.github.com>
parents: 3750
diff changeset
   226
            row[colidx] = content
4060
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   227
    except IndexError:
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   228
        return "#COL_NOT_FOUND"
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   229
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   230
    _CSV_int_modified(entry)
4060
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   231
d2f5eb3c7d6e py_ext: fix CSV Writer
Edouard Tisserant <edouard@beremiz.fr>
parents: 4056
diff changeset
   232
    return "OK"
4056
4b2de1a0fbf9 Extend HMI:JsonTable, create Edit CSV POU, create example, add some doc (#41)
Dino Kosic <44305363+kraskrom@users.noreply.github.com>
parents: 3750
diff changeset
   233
4b2de1a0fbf9 Extend HMI:JsonTable, create Edit CSV POU, create example, add some doc (#41)
Dino Kosic <44305363+kraskrom@users.noreply.github.com>
parents: 3750
diff changeset
   234
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   235
def CSVWrStr(fname, rowname, colname, content):
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   236
    """
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   237
    Update value at row/column pointed by a pair of names as string.
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   238
    Assumes first row is column headers and first column is row name.
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   239
    """
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   240
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   241
    if not rowname:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   242
        return "#INVALID_ROW"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   243
    if not colname:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   244
        return "#INVALID_COLUMN"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   245
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   246
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   247
        entry = _CSV_str_Load(fname)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   248
    except IOError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   249
        entry = _CSV_str_Create(fname)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   250
    except csv.Error:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   251
        return "#CSV_ERROR"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   252
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   253
    fname, dialect, col_headers, row_headers, max_row_len, data = entry()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   254
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   255
        rowidx = row_headers[rowname]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   256
        row = data[rowidx]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   257
    except KeyError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   258
        # create a new row with appropriate header
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   259
        row = [rowname]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   260
        # put it at the end
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   261
        rowidx = len(data)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   262
        data.append(row)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   263
        row_headers[rowname] = rowidx
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   264
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   265
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   266
        colidx = col_headers[colname]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   267
    except KeyError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   268
        # adjust col headers content
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   269
        first_row = data[0] 
4107
d317b2ee46ef PY_EXT: fix wrong column header produced by csv_write_by_string.
Edouard Tisserant <edouard@beremiz.fr>
parents: 4105
diff changeset
   270
        first_row += [""]*(max_row_len - len(first_row)) + [colname]
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   271
        # create a new column
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   272
        colidx = col_headers[colname] = max_row_len
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   273
        max_row_len = max_row_len + 1
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   274
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   275
    try:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   276
        row[colidx] = content
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   277
    except IndexError:
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   278
        # create a new cell
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   279
        row += [""]*(colidx - len(row)) + [content]
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   280
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   281
    _CSV_str_modified(entry)
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   282
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   283
    return "OK"
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   284
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   285
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   286
def CSVReload():
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   287
    global csv_int_files, csv_str_files, cvs_int_changed, cvs_str_changed
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   288
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   289
    # Force saving modified CSV files
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   290
    _CSV_OnIdle_callback()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   291
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   292
    # Wipe data model
3707
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   293
    csv_int_files.clear()
3c60c78dfa5d py_ext: add CSV file reading POUs in python extension library
Edouard Tisserant
parents: 1853
diff changeset
   294
    csv_str_files.clear()
4105
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   295
    cvs_int_changed.clear()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   296
    cvs_str_changed.clear()
79aa1772f491 Py_ext: add CSV write by String FB + refactoring
Edouard Tisserant <edouard@beremiz.fr>
parents: 4060
diff changeset
   297