[Tutor] Fwd: Re: Need Help Modifying a wxPython GUI (scrolling display and logging)
Dave Angel
davea at davea.name
Thu Jun 13 19:48:02 CEST 2013
On 06/13/2013 12:32 PM, Matt D wrote:
> On 06/13/2013 11:23 AM, Dave Angel wrote:
>> On 06/13/2013 10:37 AM, Matt D wrote:
>>> On 06/13/2013 08:22 AM, Dave Angel wrote:
>>>> On 06/13/2013 12:18 AM, Matt D wrote:
>>>>>
>>>>>
>>>>> <SNIP>
>>>>>>
>>>>>>
>>>>
>>> Hey,
>>> line 202: self.logfile.write('%s,'%(str(f))) d
>>> does put the comma in properly but,
>>> line 203: self.logfile.write('\n')
>>> was putting the newline after each value like you said.
>>> I moved this back outside of the if statement to see (i am still a
>>> little unsure about the indention and i have to test) if it will create
>>> a new row only when all the k,v values have been looped through.
>>
>> Then put it AFTER the loop, not after the if. It should line up with
>> the for statement. And if you mix spaces with tabs, heaven help you.
>> Different people have different preferences, but I despise tabs in
>> source code. Notice that you've done it at least four places:
>>
>> #output the value with trailing comma
>> #if the field 'duid' == 'hdu', then clear all the fields
>> return 0
>> main()
>>
>> If your editor let you do that, you aren't using the right settings on
>> the editor (or the right editor). This didn't affect anything, since
>> indentation doesn't matter on comments, and the other two lines are
>> isolated indentations.
>>
>>
>>>
>>> the ordering: yes this is quite a hole in my understanding of what is
>>> going on here. the pickle is created in a collection of pretty
>>> complicated C++ code that doesn't explicitly show how the pickle is
>>> ordered or whats in it even in the pickle.cc and pickle.h files. the
>>> pickle files take in some sort of stream, pickle the data, and send it
>>> to a message queue that the trafficpanel waits on. i need to log this
>>> pickle or at at least dump it to terminal because i am pretty sure the
>>> 'source' and 'dest' fields (which currently are not available) are in
>>> the pickle, albeit in a different data unit. I have read
>>> "http://www.python.org/doc//current/library/pickle.html" two times
>>> already and still cant find a way to print the pickle in human readable
>>> form. my understanding of pickling stinks. The ordering at this point
>>> is not so important (not nearly as important as getting the 'source'
>>> 'dest' fields) because the point of the .csv file is just to import it
>>> into librecalc and work time series analysis on the data manually. at
>>> some later point in the development maybe this this task can be
>>> automated but for now just an unordered file will suffice.
>>
>> If you want a consistent ordering, then add the line I described to your
>> own source code, at module scope. Since you have no access to (control
>> over) the C++ code, you'll just have to make up your own list, as you've
>> already effectively done with your GUI. For every field that is NOT in
>> the dict, you should be outputting a simple comma.
>>
>> So your if test is wrong, since it will eat zeros as well as missing
>> values. And you need an else clause:
>>
>> for k,v in FIELD_LIST_NAMES:
>> # get the value of the current TextCtrl field
>> f = field_values.get(k, None)2013-06-12 16:28:59,Unknown (0x658),
> DES-OFB,
> HDU,
> 0xa4d5010ca0bbdb0900,
> 0xfff,
> Standard MFID (pre-2001),
> 00x1,
>> if not f is None:
>> #output the value with trailing comma
>> self.logfile.write('%s,'%(str(f)))
>> else:
>> self.logfile.write(",")
>> self.logfile.write("\n")
>>
>> And don't forget to add in the header line to your csv file, naming the
>> fields that are to be used in every line.
>>
> as of now the order in the .csv file is like this:
>
> 2013-06-12 16:28:59,Unknown (0x658),
> 00x80,
> $80 Clear,
> 0xa4d5010ca0bbdb0900,
> 0xfff,
> Standard MFID (pre-2001),
> 00x1,
>
> and keeps repeating this order as long as HUDs are coming in. i am
> unsure why the date/time is on the same line as NAC?
Because you don't have a bogus newline after the date/time, but do after
all the other fields.
Oh and i have not
> tested yet with the '\n' newline command out of the if statement. If i
> have to i can modify the C++ code but was hoping not to have to do that
> at this stage. the C++ is used for what is computationally intense and
> the Python is used mainly for the UI. Any idea of a way to write the
> pickle to file to see what it contains? because it is not explicit in
> the C++ files, at least not as far as I can tell as of yet.
> Thanks!
>
I don't see any need to modify the C++ sources.
I don't know how to examine a pickle, file or otherwise. You can,
however, trivially print out all the keys (and values even) in
field_values, for each record, and make sure they match your
FIELD_LIST_NAMES, other than for order. Perhaps they named source and
dest as Source and dESt, respectively, or src and dst, or whatever.
If you really want the pickle as a file, you could write pickled_dict to
a separate file. Just be sure to create that file as binary, since
(some ?) pickle formats are not text.
--
DaveA
More information about the Tutor
mailing list