o
    z!h                     @   s   d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	G dd dej
Zdd ZdddZdd	d
ZedkrIee  dS dS )    N)OrderedDictc                       s   e Zd Z fddZ  ZS )RecordJSONEncoderc              
      s  t |tjr
t|S t |tjr| S t |tjr| S t |tjr6t	d|j
fd|jfdt|jffS t |tjjrWt	d|jfd|jfd|jjfd|jjfd|jffS t |tjjrwt	d|jfd|jfd|jfd|jjfd|jffS t |tjjrt	d|jfd	|jfd
|jr|jndfd|jfd|jffS t |tjr|jr|jnd}t	dd|jfd|jfd|jfd|jfd|dfd|j fd|j!ffS t |tj"rt	dd|jdfd|j#fd|j!ffS t |tj$rt	dd|jfdt	d|j%fd|j&fd|j'fffd|j(fd|j)fd |j*fd!|j+fd|j!ffS t |tj,rBt	d"d|jfdt	d|j%fd|j&fd|j'fffd#|j-fd|j!ffS t. /|S )$Nindexoffsetsizenamedef_num	type_namebase_type_namedev_data_indexvalueunits 	raw_valuer   )
frame_typeheaderheader_size	proto_verprofile_ver	body_sizecrcz#06xcrc_matchedchunk)r   r   matched)r   definition_messager   local_mesg_numtime_offsetis_developer_dataglobal_mesg_numendian
field_defsdev_field_defs)r   data_messagefields)0
isinstancetypesGeneratorTypelistdatetimetime	isoformat	fitdecodeFitChunkr   r   r   lenbytesFieldDefinitionr   r   type	base_typer   DevFieldDefinitionr   	FieldDatar   r   r   	FitHeaderr   r   r   r   r   r   r   FitCRCr   FitDefinitionMessager   r   r   r   r   r    r!   FitDataMessager#   superdefault)selfobjr   	__class__ K/var/www/html/gps/gps/lib/python3.10/site-packages/fitdecode/cmd/fitjson.pyr9      s   




zRecordJSONEncoder.default)__name__
__module____qualname__r9   __classcell__r>   r>   r<   r?   r      s    r   c           	      C   s   t dt j}|s|d fS i }d}|D ]_}d }||}|r\|d r*|d dkr*dnd}|d  }|s6d}ztj|}W n ty[   zt	t
dd}W n tyX   d }Y nw Y nw |d u rn| d	| d
 td |||< q||fS )Nz^\s*([\+\-]?)\s*([^\s]+)\s*$F   -T   r   )basezmalformed filter: "")recompileA	fullmatchlowerr+   utilsget_mesg_num
ValueErrorintmsg_nameerrorsysexit)	
arg_parser
filter_optFILTER_DESCfiltrdefault_include_policydescmsgremincluder>   r>   r?   parse_filter_argsj   s8   


r_   c                 C   s   t jddtj dd}|jddt jddd	d
dd |jdddd |jddtjjtjjdd |jdddd |jdddd |jddddd |jddt jdd d!d" |	| }t
||j\|_|_|S )#NzDump a FIT file to JSON formatzfitdecode version F)descriptionepilogallow_abbrevz--outputz-owtzutf-8)modeencodingrE   z-File to output data into (defaults to stdout))r0   r9   helpz--pretty
store_truezPrettify JSON output.)actionrf   z--nocrcstore_constz7Some devices seem to write invalid CRC's, ignore these.)rh   constr9   rf   z--nodefz,Do not output FIT local message definitions.z--nounkz7Do not output unknown FIT messages (e.g. "unknown_140")z--filterz-fappendzMessage name(s) (or global numbers) to filter-in or out, depending on sign prefix.  Examples: "-record" to exclude record messages; "+file_id" or "file_id" to include file_id messages.infileFITFILErb)rd   z!Input .FIT file (use - for stdin))metavarr0   rf   )argparseArgumentParserr+   __version__add_argumentFileTypeCrcCheckDISABLEDWARN
parse_argsr_   filterdefault_filter)argsparseroptionsr>   r>   r?   rx      sP   



rx   c              
   C   s<  t | }g }zitj|jt |jddR}|D ]G}|jr#|jtjkr#q|j	r5|jtjtj
fv r5|jd u r5q|jrY|jtjtj
fv rYz|j|j }W n tyU   |j}Y nw |sYq|| qW d    n1 siw   Y  W n ty   tdtjd tdtjd t  Y nw |jrdnd }tj||jt|d dS )	NT)	processor	check_crckeep_raw_chunkszkWARNING: the following error occurred while parsing FIT file. Output file might be incomplete or corrupted.)filer   	)fpclsindentr   )rx   r+   	FitReaderrl   StandardUnitsDataProcessornocrcnodefr   FIT_FRAME_DEFINITIONnounkFIT_FRAME_DATA	mesg_typery   r   KeyErrorrz   rk   	ExceptionprintrT   stderr	traceback	print_excprettyjsondumpoutputr   )r{   r}   framesfitframer^   r   r>   r>   r?   main   s`   

r   __main__)N)rp   collectionsr   r(   r   r%   rI   rT   r   r+   JSONEncoderr   r_   rx   r   r@   rU   r>   r>   r>   r?   <module>   s    Y
$
/2