<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi Cyril,<br>
      <br>
      The _create_copyfrom_buffer of cubicweb/dataimport.py is indeed a
      bit tricky...<br>
      <br>
      This function creates a CSV string that will be pushed in
      postgresql using COPY FROM.<br>
      However, if the separator used in the CSV string already exists in
      some attributes, it will crash. Thus it is possible to give a
      replace_sep to replace the separator by this given string.<br>
      <br>
      Indeed, the correct clause should be :<br>
      <pre class="literal-block"><i>if (replace_sep != None):

</i></pre>
      I have created a ticket on this issue
      (<a class="moz-txt-link-freetext" href="https://www.cubicweb.org/3845572">https://www.cubicweb.org/3845572</a>),<br>
      and I think that the whole function should be rewritten.<br>
      <br>
      Best,<br>
      <br>
      Vincent<br>
      <br>
      <br>
      <br>
      <br>
      On 19/05/2014 14:24, LANQUETUIT Cyril wrote:<br>
    </div>
    <blockquote
      cite="mid:1AB37ADB88BD0343B8A7CEB0471DF423C7C824@EXDAG0-B1.intra.cea.fr"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <style id="owaParaStyle" type="text/css">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
P {margin-top:0;margin-bottom:0;}</style>
      <div style="direction: ltr;font-family: Tahoma;color:
        #000000;font-size: 10pt;"><tt>Hello,<br>
          <br>
          In function _create_copyfrom_buffer of file dataimport.py, in
          the following part of code:</tt><br>
        <i><br>
                                  # If a replace_sep is given, replace<br>
                                  # the separator instead of returning
          None<br>
                                  # (and thus avoid empty buffer)<br>
                                  if replace_sep:<br>
                                      value = value.replace(_char,
          replace_sep)<br>
                                  else:<br>
                                      return</i><br>
        <br>
        <div style="font-family: Times New Roman; color: #000000;
          font-size: 16px">
          <div>
            <div style="direction:ltr; font-family:Tahoma;
              color:#000000; font-size:10pt">
              <pre class="literal-block">when the separator is set to '' (the default value when MassiveObjectStore is used for store)
the replace_sep is evaluate to false so the else clause is executed, the function _create_copyfrom_buffer return an empty buffer
then this following error is raised:

<i>File "/home/cl239099/cubicweb/cubes/dataio/dataimport.py", line 831, in flush_entities
    raise ValueError('Error in buffer creation for etype %s' % etype)
ValueError: Error in buffer creation for etype Question</i>

I don't understand exactly what the code should do or should be but if the clause
<i>
if replace_sep:</i>

is replaced by something like
<i>
if (replace_sep != None):
</i>
the else clause won't be executed in this case...

please could you examinate this issue and correct it if needed or let me know what is wrong in the precedent discribed comportement<i>
</i>
Thank's,
Cyril
</pre>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Cubicweb mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Cubicweb@lists.cubicweb.org">Cubicweb@lists.cubicweb.org</a>
<a class="moz-txt-link-freetext" href="http://lists.cubicweb.org/mailman/listinfo/cubicweb">http://lists.cubicweb.org/mailman/listinfo/cubicweb</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>