File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1919async def create_software_update (uri : str , temp_file : Path | None ) -> Software :
2020 parsed_uri = urlparse (uri )
2121
22- # parse swu header into update_info
22+ # parse image header into update_info
2323 if parsed_uri .scheme == "file" :
2424 if temp_file is None :
2525 raise HTTPException (500 , "Temporary file missing, cannot parse file information" )
2626 try :
2727 update_info = await swdesc .parse_file (temp_file )
2828 except Exception :
29- raise HTTPException (422 , "Software swu header cannot be parsed" )
29+ raise HTTPException (422 , "Software image header cannot be parsed" )
3030
3131 elif parsed_uri .scheme .startswith ("http" ):
3232 try :
3333 update_info = await swdesc .parse_remote (uri )
3434 except Exception :
35- raise HTTPException (422 , "Software swu header cannot be parsed" )
35+ raise HTTPException (422 , "Software image header cannot be parsed" )
3636 else :
3737 raise HTTPException (422 , "Software URI protocol unknown" )
3838
3939 if update_info is None :
40- raise HTTPException (422 , "Software swu header contains invalid data" )
40+ raise HTTPException (422 , "Software image header contains invalid data" )
4141
4242 # check for collisions
4343 is_colliding = await _is_software_colliding (update_info )
Original file line number Diff line number Diff line change 11import configparser
22import logging
3+ import re
34
45import semver
56from anyio import Path , open_file
@@ -32,14 +33,17 @@ async def parse_file(file: Path):
3233def parse_descriptor (manifest : configparser .ConfigParser ):
3334 swdesc_attrs = {}
3435 try :
35- swdesc_attrs ["version" ] = semver .Version .parse (manifest ["system" ].get ("version" ))
36- swdesc_attrs ["compatibility" ] = [{"hw_model" : "default" , "hw_revision" : manifest ["system" ]["compatible" ]}]
37- except KeyError :
38- try :
39- swdesc_attrs ["version" ] = semver .Version .parse (manifest ["update" ].get ("version" ))
40- swdesc_attrs ["compatibility" ] = [{"hw_model" : "default" , "hw_revision" : manifest ["update" ]["compatible" ]}]
41- except KeyError as e :
42- logger .warning (f"Parsing RAUC descriptor failed, error={ e } " )
43- raise ValueError ("Parsing RAUC descriptor failed" , e )
36+ swdesc_attrs ["version" ] = semver .Version .parse (manifest ["update" ].get ("version" ))
37+ pattern = re .compile (r"^(?P<hw_model>.+?)[- ]?(?P<hw_revision>\w*[\d.]+\w*)?$" )
38+ hw_model = "default"
39+ hw_revision = "default"
40+ m = pattern .match (manifest ["update" ]["compatible" ])
41+ if m :
42+ hw_model = m .group ("hw_model" )
43+ hw_revision = m .group ("hw_revision" ) or "default"
44+ swdesc_attrs ["compatibility" ] = [{"hw_model" : hw_model , "hw_revision" : hw_revision }]
45+ except KeyError as e :
46+ logger .warning (f"Parsing RAUC descriptor failed, error={ e } " )
47+ raise ValueError ("Parsing RAUC descriptor failed" , e )
4448
4549 return swdesc_attrs
Original file line number Diff line number Diff line change @@ -26,7 +26,8 @@ dependencies = [
2626 " pydantic-settings[yaml] (>=2.10.1,<3.0.0)" ,
2727 " uvicorn (>=0.35.0,<0.36.0)" ,
2828 " boto3 (>=1.40.8,<2.0.0)" ,
29- " pysquashfsimage (>=0.9.0,<1.0.0)"
29+ " pysquashfsimage (>=0.9.0,<1.0.0)" ,
30+ " zstandard (>=0.24.0,<0.25.0)"
3031]
3132
3233[project .optional-dependencies ]
You can’t perform that action at this time.
0 commit comments