Files
boc/iom/api/__pycache__/main.cpython-39.pyc
T

76 lines
13 KiB
Plaintext
Raw Normal View History

a
Ïœ>jÕ9ã @dZddlmZmZmZmZmZddlmZddl m
Z
m Z ddl m
Z
ddlmZmZmZddlmZmZddlZed d
d ee
d d
ƒgdZejedgdgdgdddlZej dd¡ej dd¡ej dd¡ej dd¡ej dd¡ej dd¡ddlmZmZmZddlmZm Z ddl!m"Z"m#Z#ddl$m%Z%m&Z&ddl'm(Z(ddl)m*Z*m+Z+m,Z,ddl-m.Z.ddl/m0Z0eƒZ1e"ƒZ2e%ƒZ3e(ƒZ4e.dd Z5e0ƒZ6d!d"„Z7e,d#œd$d%„Z8Gd&d'„d'ƒZ9e :d(¡ed)œd*d+„ƒZ;e :d,¡ed)œd-d.„ƒZ<e =d/¡ee*j>ƒfe?ed0œd1d2„ƒZ@e =d3¡ee*j>ƒfe?ed0œd4d5„ƒZAe :d6¡dee*j>ƒfe?e?e?e?ee?ed7œd8d9„ƒZBe =d:¡ee*j>ƒfed;œd<d=„ƒZCe =d>¡ee*j>ƒfe?ed?œd@dA„ƒZDe =dB¡ee*j>ƒfe?e?edCœdDdE„ƒZEe :dF¡ee*j>ƒfeedGœdHdI„ƒZFe =dJ¡ee*j>ƒfe?edKœdLdM„ƒZGe =dN¡edOdPdQdRedddSee*j>ƒfe?eHeHedTœdUdV„ƒZIe =dW¡ee*j>ƒfe?ed0œdXdY„ƒZJe =dZ¡dd[ee*j>ƒfee?e?ed\œd]d^„ƒZKe =d_¡d[ee*j>ƒfe?e?ed`œdadb„ƒZLe =dc¡d[ee*j>ƒfe?e?eddœdedf„ƒZMe :dg¡ee*j>ƒfee?edhœdidj„ƒZNe :dk¡dlee*j>ƒfe&e?edmœdndo„ƒZOe :dp¡dlee*j>ƒfeHee?e?edqœdrds„ƒZPe =dt¡ee*j>ƒfe?eduœdvdw„ƒZQe :dx¡dydyee*j>ƒfe?e?eRee?e?edzœd{d|„ƒZSe :d}¡dydydydyee*j>ƒfe?eRee?e?e?e?ed~œdd€„ƒZTe :d¡ee*j>ƒfe?e?eReHeed‚œdƒd„„ƒZUe :d…¡ed)œd†d‡„ƒZVe :dˆ¡ed)œd‰dŠ„ƒZWe :d‹¡ed)œdŒdƒZXe =dŽ¡ddƒZYeZdkr¾ddl[Z[e[j\edd“d”dS)•zf
IOM API - FastAPI application for Infrastructure Object Model
Combines all layers into a unified API
é)ÚFastAPIÚ
HTTPExceptionÚQueryÚDependsÚRequest)ÚCORSMiddleware)Ú
HTTPBearerÚHTTPAuthorizationCredentials)Ú JSONResponse)ÚListÚOptionalÚDict)ÚdatetimeÚdateNzIOM APIzInfrastructure Object Model APIú1.0.0F)Z
auto_error)ÚtitleÚ descriptionÚversionZ dependenciesÚ*)Z
allow_originsZ
allow_methodsZ
allow_headersz(/home/bernt/.openclaw/workspace/iom/corez//home/bernt/.openclaw/workspace/iom/observationz*/home/bernt/.openclaw/workspace/iom/defectz(/home/bernt/.openclaw/workspace/iom/riskz*/home/bernt/.openclaw/workspace/iom/ledgerz6/home/bernt/.openclaw/workspace/iom/visual_geolocation)Ú
GOIDGeneratorÚ
validate_goidÚ
parse_goid)Ú ObservationÚObservationSummary)ÚDefectRegistryÚDefectCategory)ÚRiskCalculatorÚ
RiskScores)ÚIOMLedgerMapper)Ú auth_managerÚUserRoleÚ
Permission)ÚVisualGeolocationPipeline)ÚTemporalAnalyzerT)Z use_real_aicCs
ttjƒS©N)rrÚget_current_user©r&r&ú//home/bernt/.openclaw/workspace/iom/api/main.pyÚ require_auth:sr(©Z
permissioncCstt |¡ƒSr$)rrÚrequire_permissionr)r&r&r'r*=sr*c@s eZdZdeeedœddZdS)Ú AuthRequestÚreadonly©ÚusernameÚpasswordÚrolecCs||_||_||_dSr$r-)Úselfr.r/r0r&r&r'Ú__init__DszAuthRequest.__init__N)r,)Ú__name__Ú
__module__Ú __qualname__Ústrr2r&r&r&r'r+Csr+z/auth/register)ÚrequestcÃs|| d¡}| d¡}| dd¡}|r(|s4tdddz t|ƒ}Wn$tydtdd|dYn0t ||¡}||d œS)
zRegister a new userr.r/r0r,éúUsername and password required©Ú status_codeZdetailzInvalid role: )Útokenr0)Úgetrr Ú
ValueErrorrÚ create_token)r7r.r/r0Z user_roler<r&r&r'Ú
register_userIs

     r@z /auth/logincÃs>| d¡}| d¡}|r|s(tdddt |tj¡}d|iS)zLogin and get tokenr.r/r8r9r:r<)r=rrr?r ZREADONLY)r7r.r/r<r&r&r'Úlogin]s 

 rAz/goid/validate/{goid}©ÚgoidÚusercÃst|ƒ\}}||dœS)zValidate a GOID)ZvalidÚerror)r)rCrDZis_validrEr&r&r'Úvalidate_goid_endpointms rFz/goid/parse/{goid}c
ÃsHzt|ƒ}|WStyB}ztdt|ƒdWYd}~n
d}~00dS)zParse a GOID into componentsr8r:N)rr>rr6)rCrDÚparsedÚer&r&r'Úparse_goid_endpointts
rIz/goid/generate)ÚdomainÚsystemÚ subsystemÚobj_typeÚ
location_hashrDc
ÃsVzt |||||¡}d|iWStyP}ztdt|ƒdWYd}~n
d}~00dS)zGenerate a new GOIDrCr8r:N)Úgoid_genZgenerater>rr6)rJrKrLrMrNrDrCrHr&r&r'Ú
generate_goid~s

rPz/taxonomy/domains©rDcÃst ¡S)zList all domains)rOÚ list_domainsrQr&r&r'rRsrRz"/taxonomy/domains/{domain}/systems)rJrDc
ÃsFz t |¡WSty@}ztdt|ƒdWYd}~n
d}~00dS)zList systems in a domainé”r:N)rOÚ list_systemsr>rr6)rJrDrHr&r&r'rTs rTz3/taxonomy/domains/{domain}/systems/{system}/objects)rJrKrDc
ÃsHzt ||¡WStyB}ztdt|ƒdWYd}~n
d}~00dS)zList objects in a systemrSr:N)rOÚ list_objectsr>rr6)rJrKrDrHr&r&r'rUžsrUz
/observations©Z observationrDcÃs"|jpdt ¡jdd|jdœS)zCreate a new observationzOBS-z-0000001Úcreated)ÚidÚstatusÚ object_goid)rXrÚnowÚyearrZrVr&r&r'Úcreate_observation©sýr]z/observations/{observation_id}©Úobservation_idrDcÃstddddS)zGet observation by IDrSzObservation not foundr:N)rr^r&r&r'Úget_observation´sr`z/objects/{goid}/observationsédé)ÚgeÚle)rc©rCÚlimitÚoffsetrDcÃs |gddœS)zGet observations for an objectr)rZÚ observationsÚtotalr&rer&r&r'Úget_object_observations»s
ýrjz/objects/{goid}/summarycÃs |dddœS)z%Get observation summary for an objectrN)rZZobservation_countZlatest_conditionr&rBr&r&r'Úget_object_summaryËsýrkz/defectsÚsv)ÚcategoryÚlangrDcƒsb|rBzt|ƒ}t |¡}WqPty>tdd|dYqP0nttj ¡ƒ}fdd|DƒS)zList all defect codesr8zInvalid category: r:csg|]}| ˆ¡qSr&©Úto_dict©Ú.0Úcode©rnr&r'Ú
<listcomp>èóz list_defects.<locals>.<listcomp>)rÚ
defect_regZget_by_categoryr>rÚlistZ_codesÚvalues)rmrnrDÚcatZcodesr&rtr'Ú list_defectsØs r{z/defects/{code})rsrnrDcÃs*t |¡}|s tdd|d| |¡S)zGet defect code by coderSzDefect code not found: r:)rwr=rrp)rsrnrDZdefectr&r&r'Ú
get_defectës
r|z/defects/search/{query})ÚqueryrnrDcƒst |ˆ¡}fdd|DƒS)zSearch defect codescsg|]}| ˆ¡qSr&rorqrtr&r'ruørvz"search_defects.<locals>.<listcomp>)rwÚsearch)r}rnrDÚresultsr&rtr'Úsearch_defectsôs r€z/defects/suggest)ÚkeywordsrDcÃst |¡}dd|DƒS)z)Suggest defect codes based on AI keywordscSs g|]\}}|j|j|dœqS))rsÚnameÚ
confidence)rsZname_en)rrrsr&r&r'ruÿs
üýz#suggest_defects.<locals>.<listcomp>)rwZget_ai_suggestions)rrDZ suggestionsr&r&r'Úsuggest_defectsûs
úr„z/risk/calculateÚdefault)ÚscoresÚ object_typerDcÃst ||¡}|S)zCalculate risk score)Ú risk_calcZ calculate)r†r‡rDÚresultr&r&r'Úcalculate_risk s z /risk/calculate-from-observation)Ú conditionÚ defect_codesr‡rDcÃst |||¡}|S)z$Calculate risk from observation data)rˆZcalculate_from_observation)rr‡rDr‰r&r&r'Úcalculate_risk_from_observationsrz/risk/weights/{object_type})r‡rDcÃst |¡}||dœS)z Get risk weights for object type)r‡Úweights)rˆZget_weights_for_type)r‡rDr&r&r'Úget_risk_weights"s
rz/ledger/installationÚ)rCr‡ÚcostÚinstallation_dateÚ
contractorÚprojectrDcÃs(t ||||||¡}|dd|DƒdœS)z'Map installation to ledger transactionscSsg|] }| ¡qSr&ro©rrÚtr&r&r'ru;rvz$map_installation.<locals>.<listcomp>©rCÚ transactions)Ú
ledger_mapperÚmap_installation)rCr‡rrr“r”rDr˜r&r&r'+s  ÿ þršz/ledger/maintenance)rCrÚmaintenance_dater_Ú defect_coder“rrDc Ãs*t |||||||¡}|dd|DƒdœS)z&Map maintenance to ledger transactionscSsg|] }| ¡qSr&ror•r&r&r'ruPrvz#map_maintenance.<locals>.<listcomp>r—)r™Úmap_maintenance) rCrrr_r“rrDr˜r&r&r'r?s ÿ þrz/ledger/depreciation)rCr‡Úacquisition_valueÚ useful_lifeÚdepreciation_daterDcÃs&t |||||¡}|dd|DƒdœS)z'Map depreciation to ledger transactionscSsg|] }| ¡qSr&ror•r&r&r'rucrvz$map_depreciation.<locals>.<listcomp>r—)r™Úmap_depreciation)rCr‡r rDr˜r&r&r'Ts

ÿ þr¡z/visual-geolocation/analyzec
Ã| d¡}| d¡}|s$tdddzbt ||¡}|p8d|j|j|j|jdœ|j|j |j
j |j
j t
|j
jƒt
|j
jƒdœ|j|jd œWSt}ztd
t|ƒdWYd }~n
d }~00d S) z*Analyze image and extract evidence packageÚ
image_pathÚimage_idr8zimage_path requiredr:Úunknown)ÚlatÚlngÚaccuracyrƒ)ZoverallÚuncertainty_radiusZsupporting_evidence_countZcontradicting_evidence_count)ÚpositionÚmethodÚevidence_summaryÚconfidence_reportÚ map_matchesÚsimilar_imagesiôN)r=rÚ
visual_geoÚ
process_imager¥Zoverall_confidencer¨ÚlenZsupporting_evidenceZcontradicting_evidencer­Ú Exceptionr6)r7r‰rHr&r&r'Ú
analyze_imageis0

  ü