U vi=@sdZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z m Z mZddlmZddlmZdZd Zd ZeeegZGd d d eZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddZdS)z>Parsing response from InfluxDB to FluxStructures or DataFrame.N)Enum)List) FluxTable FluxColumn FluxRecord TableList)get_date_helper)_UTF_8_encodingz#defaultz#groupz #datatypec@seZdZdZddddZdS)FluxQueryExceptionzThe exception from InfluxDB.NreturncCs||_||_dS)zInitialize defaults.N)message reference)selfr rrW/opt/alt/python38/lib/python3.8/site-packages/influxdb_client/client/flux_csv_parser.py__init__szFluxQueryException.__init__)__name__ __module__ __qualname____doc__rrrrrr sr c@seZdZdZdS)FluxCsvParserExceptionz$The exception for not parsable data.N)rrrrrrrrrsrc@seZdZdZdZdZdZdS)FluxSerializationModez'The type how we want to serialize data.N)rrrrtablesstream dataFramerrrrr#src@seZdZdZdZdZdS)FluxResponseMetadataModezIThe configuration for expected amount of metadata response from InfluxDB.rrN)rrrrfull only_namesrrrrr+src@seZdZddZdS)_FluxCsvParserMetadatacCs(d|_d|_d|_d|_g|_d|_dS)NrF) table_indextable_idstart_new_tabletablegroupsparsing_state_errorrrrrr4s z_FluxCsvParserMetadata.__init__N)rrrrrrrrr"3sr"c@seZdZdZddejdfeeeeddddZ ddZ d d Z d d Z dd ddZ dd ddZddZddZddZddZddZddZddZd d!Zed"d#Zed$d%Zed&d'Zed(d)Zd*d+Zeed,d-d.Ze ed/d0d1Z!e"d d2d3Z#ed4d5d6Z$dS)7 FluxCsvParserzJParse to processing response from InfluxDB to FluxStructures or DataFrame.NF)serialization_modedata_frame_indexresponse_metadata_moder cCsp||_t|_||_||_||_||_g|_|dk r:|jnd|_ |dk rN|j nd|_ dt |j krfdnd|_dS)z Initialize defaults. :param response: HTTP response from a HTTP client. Acceptable types: `urllib3.response.HTTPResponse`, `aiohttp.client_reqrep.ClientResponse`. NZClientResponseTF) _responserr_serialization_mode_response_metadata_mode_use_extension_dtypes_data_frame_index_data_frame_valuesZ profilers _profilersZprofiler_callback_profiler_callbacktyperZ _async_mode)rresponser,r-Z query_optionsr.Zuse_extension_dtypesrrrr@s zFluxCsvParser.__init__cCs|jdSN)r/closer*rrr_closeUszFluxCsvParser._closecCsVt|jdr<|jjr csv_parserreaderdatadecoder _readercodecs iterdecode)rr>rrr __enter__Xs  zFluxCsvParser.__enter__cCs |dS)zClose HTTP response.N)r;rexc_typeexc_valexc_tbrrr__exit__bszFluxCsvParser.__exit__r cs"ddlm}|t|jj|_|S)r<r) AsyncReader)ZaiocsvrN_StreamReaderToWithAsyncReadr/contentrE)rrNrrr __aenter__fs zFluxCsvParser.__aenter__cs||||dS)zShutdown the client.N)rMrIrrr __aexit__mszFluxCsvParser.__aexit__c cs(|}|D] }|VqW5QRXdS)zReturn Python generator.N)_parse_flux_response)rparservalrrr generatorqs zFluxCsvParser.generatorcCs|S)zReturn Python async-generator.)_parse_flux_response_asyncr*rrrgenerator_asyncwszFluxCsvParser.generator_asyncccs^t}|jD]}|||D] }|Vqq |jtjkt|d@rZ|}||j sZ|VdS)N _data_frame) r"rE_parse_flux_response_rowr0rrr?_prepare_data_frame_is_profiler_tabler')rmetadatacsvrUdfrrrrS{s   z"FluxCsvParser._parse_flux_responsec Cst}zzb|j2z$3dHW}|||D] }|Vq(q6|jtjkt|d@rh|}| |j sh|VWnHt k r}z*t |j }d|ksd|kr|dW5d}~XYnXW5|XdS)NrYCancelledError TimeoutErrorzTStream cancelled during read. Recommended: Check Influxdb client `timeout` setting.)r"r;rErZr0rrr?r[r\r' BaseExceptionr7rZadd_note)rr]r^rUr_ee_typerrrrWs     z(FluxCsvParser._parse_flux_response_asyncc cst|dkrnd|dkr2d|dkr2d|_n|jrR|d}|d}t|||d}|tkrh|jrz|jtjkr|js|j t j kt |d@r| }||js|Vd|_t|_||j|j|jd|_d|_n|jdkrtd t|kr ||j|nt|kr||_nt|kr:||j|n|jr|jjs|jtjkr||jttd d |ttd d ||_||j|j||j|d |_|j t j krddlm }ttdd |jj}|j!g|dd|_"nt#|d} |jdkr| |_|j| kr\|jj} t|_|jj$| ||j|j|jd|_| |_|%|jd|j|} |&| r|'| nV|j t j(kr|j(|jdj)*| |j t j+kr| V|j t j kr|j,*| j-dS)NrerrorrrTrrYr#zAUnable to parse CSV response. FluxTable definition was not found.cSsdS)Nstringrcolumnrrrz8FluxCsvParser._parse_flux_response_row..cSsdS)NfalserrgrrrrirjFpdcSs|jSr9)label)itrrrrirj)rCcolumnsindex).lenr)r ANNOTATIONSr&r1rr!r'r0rrr?r[r\r _insert_tabler$r%rANNOTATION_DATATYPEadd_data_typesANNOTATION_GROUPr(ANNOTATION_DEFAULTadd_default_empty_valuesrplistmap add_groupsadd_column_names_and_tagsextrasrm DataFramerYintextend parse_record_is_profiler_record_print_profiler_inforrecordsappendrr4values) rr]r^reZreference_valuetokenr_rmlabelsZ current_idZ flux_columns flux_recordrrrrZs                    z&FluxCsvParser._parse_flux_response_rowcCsjddlm}||j}g|_|jr@|j|j|_||j}||j|j |g}|j rf| S|S)Nrrl) r~rmrr4r3rYZ set_indexconcatZastypeZdtypesr2Zconvert_dtypes)rrmZ_temp_dfr_rrrr[s   z!FluxCsvParser._prepare_data_framecCsPt|}|jD]<}|j}||jd}||||j|<|j|j|q|S)zParse one record.r)rrprnrq _to_valuerrowr)rr$r'r^recordZ fluxColumnZ column_namestr_valrrrr s zFluxCsvParser.parse_recordcCs|dks|dkr^|j}|dks&|dkrR|jtjkrN|jrJddlm}|jSdSdS|||Sd|j krl|Sd|j kr~d|kSd|j ksd|j krt |Sd |j krt |Sd |j krt |Sd |j ksd |j krt|Sd |j krt |SdS)NrrlrfbooleantrueZ unsignedLonglongdoubleZ base64BinaryzdateTime:RFC3339zdateTime:RFC3339Nanoduration) default_valuer0rrr2r~rmZNAr data_typerfloatbase64 b64decoderZ parse_date)rrrhrrmrrrrs0          zFluxCsvParser._to_valuecCs8tdt|D]$}t|d||d}|j|qdS)zAdd data types to columns.r)rqrN)rangerrrrpr)r' data_typesrqZ column_defrrrrv;szFluxCsvParser.add_data_typescCs*d}|jD]}||dk|_|d7}q dS)zAdd group keys to columns.rrN)rpgroup)r'r^irhrrrr|Bs zFluxCsvParser.add_groupscCs&d}|jD]}|||_|d7}q dS)zAdd default values to columns.rN)rpr)r'default_valuesrrhrrrryJs  z&FluxCsvParser.add_default_empty_valuescCsZt|tt|kr4d|d}t|tt|d}|jD]}|||_|d7}q>dS)zAdd labels to columns.z6The response contains columns with duplicated names: 'z_'. You should use the 'record.row' to access your data instead of 'record.values' dictionary. rN)rrsetwarningswarn UserWarningprintrprn)r'r^r rrhrrrr}Rs    z'FluxCsvParser.add_column_names_and_tagscCs|jtjkr|j||dSr9)r0rrinsert)rr'r$rrrrtas zFluxCsvParser._insert_table)rr cCs:|js dS|jD]$}d|jkr|dd|krdSqdS)NFZ _measurement profiler/T)r5r)rrZprofilerrrrres  z!FluxCsvParser._is_profiler_record)r'r cCs|js dSttdd|jS)NFcSs|jdko|jdkS)NZ _profilerresult)rrnrgrrrritrjz2FluxCsvParser._is_profiler_table..)r5anyfilterrp)rr'rrrr\os  z FluxCsvParser._is_profiler_tablecs(js jSttfddjSdS)zGet the list of flux tables.cs | Sr9)r\)r'r*rrri|rjz*FluxCsvParser.table_list..N)r5rrrr*rr*r table_listwszFluxCsvParser.table_list)rcCs|dr|jr ||nd|}tdt|dt|tt|d|jD]V}||}t|trt|dkrt|dd|q^|dk r^t|dd|dq^dS) Nrz Profiler:  =2z<20z: z: )get_measurement startswithr6rrrr isinstancestr)rrmsgnamerUrrrr~s   z"FluxCsvParser._print_profiler_info)%rrrrrr rrrrr;rHrMrQrRrVrXrSrWrZr[rr staticmethodrvr|ryr}rtrboolrrr\rrrrrrrr+=sH   \ #     r+c@s$eZdZddZeedddZdS)rOcCs||_tt|_dSr9)r8rFgetincrementaldecoderr decoder)rr8rrrrsz%_StreamReaderToWithAsyncRead.__init__)sizer cs6|j|IdH}|s&|jjdddS|jj|ddS)NrjT)finalF)r8readrrD)rrZ raw_bytesrrrrsz!_StreamReaderToWithAsyncRead.readN)rrrrrrrrrrrrOsrO) rrrFr^rArenumrtypingrZ!influxdb_client.client.flux_tablerrrrZ&influxdb_client.client.util.date_utilsrZinfluxdb_client.restr rxrwrurs Exceptionr rrrobjectr"r+rOrrrrs,       T