Skip to content

Commit

Permalink
Fix absoluteVersion comparison, reorder properties
Browse files Browse the repository at this point in the history
  • Loading branch information
noah978 committed Jun 8, 2023
1 parent 639fa55 commit 2c4d553
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 88 deletions.
5 changes: 4 additions & 1 deletion src/altparse/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,5 +263,8 @@ def save(self, alternate_dir: Path | str | None = None, prettify: bool = True, o
"""
full_src = dict(self.src) if only_standard_props else self.src.to_dict()
with open(alternate_dir or self.src.path, "w", encoding="utf-8") as fp:
json.dump(full_src, fp, indent = 2 if prettify else None)
if prettify:
json.dump(full_src, fp, sort_keys=False, indent=2)
else:
json.dump(full_src, fp)
fp.write("\n") # add missing newline to EOF
173 changes: 86 additions & 87 deletions src/altparse/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,9 @@ def __init__(self, src: dict[str] | None = None):

def __lt__(self, other):
if isinstance(other, self.__class__):
if (self.absoluteVersion is not None and other.absoluteVersion is not None and
version.parse(self.absoluteVersion) < version.parse(other.absoluteVersion)): return True
if self.absoluteVersion is not None and other.absoluteVersion is not None:
if version.parse(self.absoluteVersion) < version.parse(other.absoluteVersion): return True
else: return False

if (version.parse(self.version) < version.parse(other.version)): return True

Expand Down Expand Up @@ -330,20 +331,42 @@ def calculate_sha256(self, ipa_path: Path | None):
if ipa_path is not None:
self.sha256 = extract_sha256(ipa_path)

### Unofficial property ###
@property
def absoluteVersion(self) -> str:
return self._src.get("absoluteVersion")
@absoluteVersion.setter
def absoluteVersion(self, value: str):
self._src["absoluteVersion"] = value

@property
def version(self) -> str:
return self._src.get("version")
@version.setter
def version(self, value: str):
self._src["version"] = value

@property
def buildVersion(self) -> str:
return self._src.get("buildVersion")
@buildVersion.setter
def buildVersion(self, value: str):
self._src["buildVersion"] = value

@property
def date(self) -> str:
return self._src.get("date")
@date.setter
def date(self, value: str):
self._src["date"] = value

@property
def localizedDescription(self) -> str:
return self._src.get("localizedDescription")
@localizedDescription.setter
def localizedDescription(self, value: str):
self._src["localizedDescription"] = value

@property
def downloadURL(self) -> str:
return self._src.get("downloadURL")
Expand All @@ -352,10 +375,10 @@ def downloadURL(self, value: str):
self._src["downloadURL"] = value

@property
def size(self) -> str:
def size(self) -> int:
return self._src.get("size")
@size.setter
def size(self, value: str):
def size(self, value: int):
self._src["size"] = value

@property
Expand All @@ -366,27 +389,19 @@ def sha256(self, value: str):
self._src["sha256"] = value

@property
def localizedDescription(self) -> str:
return self._src.get("localizedDescription")
@localizedDescription.setter
def localizedDescription(self, value: str):
self._src["localizedDescription"] = value

# Start unofficial AltSource properties

def minOSVersion(self) -> str:
return self._src.get("minOSVersion")
@minOSVersion.setter
def minOSVersion(self, value: str):
self._src["minOSVersion"] = value

@property
def buildVersion(self) -> str:
return self._src.get("buildVersion")
@buildVersion.setter
def buildVersion(self, value: str):
self._src["buildVersion"] = value
def maxOSVersion(self) -> str:
return self._src.get("maxOSVersion")
@maxOSVersion.setter
def maxOSVersion(self, value: str):
self._src["maxOSVersion"] = value

@property
def absoluteVersion(self) -> str:
return self._src.get("absoluteVersion")
@absoluteVersion.setter
def absoluteVersion(self, value: str):
self._src["absoluteVersion"] = value
# End class Version

_required_keys = ["name", "bundleIdentifier", "developerName", "versions", "localizedDescription", "iconURL"]
Expand Down Expand Up @@ -474,7 +489,7 @@ def latest_version(self, use_dates: bool = False) -> Version:
def add_version(self, ver: Version):
versions_list = [(ver.version,ver.buildVersion) for ver in self.versions]
if (ver.version,ver.buildVersion) in versions_list:
logging.warning("Version already exists in AltSource. Automatically replaced with new one.")
logging.warning(f"Version already exists in {self.name}. Automatically replaced with new one.")
self.versions[versions_list.index((ver.version,ver.buildVersion))] = ver
else:
self.versions.insert(0,ver)
Expand Down Expand Up @@ -519,15 +534,6 @@ def subtitle(self) -> str:
def subtitle(self, value: str):
self._src["subtitle"] = value

@property
def versions(self) -> list[Version]:
return self._src.get("versions",[])
@versions.setter
def versions(self, value: list[Version]):
if self.versions is not None:
logging.warning(f"Entire `versions` section has been replaced for {self.name}.")
self._src["versions"] = value

@property
def localizedDescription(self) -> str:
return self._src.get("localizedDescription")
Expand All @@ -549,19 +555,21 @@ def tintColor(self) -> str:
def tintColor(self, value: str):
self._src["tintColor"] = value

@property
def beta(self) -> bool:
return self._src.get("beta")
@beta.setter
def beta(self, value: bool):
self._src["beta"] = value

@property
def screenshotURLs(self) -> list[str]:
return self._src.get("screenshotURLs")
@screenshotURLs.setter
def screenshotURLs(self, value: list[str]):
self._src["screenshotURLs"] = value

@property
def versions(self) -> list[Version]:
return self._src.get("versions",[])
@versions.setter
def versions(self, value: list[Version]):
if self.versions is not None:
logging.warning(f"Entire `versions` section has been replaced for {self.name}.")
self._src["versions"] = value

@property
def appPermissions(self) -> Permissions:
Expand All @@ -570,6 +578,13 @@ def appPermissions(self) -> Permissions:
def appPermissions(self, value: Permissions):
self._src["appPermissions"] = value

@property
def beta(self) -> bool:
return self._src.get("beta")
@beta.setter
def beta(self, value: bool):
self._src["beta"] = value

### Deprecated properties ###

@property
Expand Down Expand Up @@ -688,13 +703,6 @@ def title(self) -> str:
def title(self, value: str):
self._src["title"] = value

@property
def name(self) -> str:
return self._src.get("name")
@name.setter
def name(self, value: str):
self._src["name"] = value

@property
def identifier(self) -> str:
return self._src.get("identifier")
Expand All @@ -710,6 +718,13 @@ def caption(self) -> str:
def caption(self, value: str):
self._src["caption"] = value

@property
def date(self) -> str:
return self._src.get("date")
@date.setter
def date(self, value: str):
self._src["date"] = value

@property
def tintColor(self) -> str:
return self._src.get("tintColor")
Expand All @@ -724,20 +739,6 @@ def imageURL(self) -> str:
def imageURL(self, value: str):
self._src["imageURL"] = value

@property
def appID(self) -> str:
return self._src.get("appID")
@appID.setter
def appID(self, value: str):
self._src["appID"] = value

@property
def date(self) -> str:
return self._src.get("date")
@date.setter
def date(self, value: str):
self._src["date"] = value

@property
def notify(self) -> bool:
return self._src.get("notify")
Expand All @@ -751,6 +752,13 @@ def url(self) -> str:
@url.setter
def url(self, value: str):
self._src["url"] = value

@property
def appID(self) -> str:
return self._src.get("appID")
@appID.setter
def appID(self, value: str):
self._src["appID"] = value
# End class Article

_required_keys = ["name", "identifier", "apps"]
Expand All @@ -768,7 +776,7 @@ def __init__(self, src: dict | None = None, path: str | Path | None = None):
self._src["apps"] = [self.App(app) for app in src.get("apps", [])]
if "news" in self._src.keys():
self._src["news"] = [self.Article(art) for art in src["news"]]
self.version = 2 # set current API version
self.apiVersion = "v2" # set current API version

missing_keys = self.missing_keys()
if missing_keys:
Expand Down Expand Up @@ -830,6 +838,15 @@ def identifier(self) -> str:
def identifier(self, value: str):
logging.warning(f"Source `identifier` changed from {self._src['identifier']} to {value}.")
self._src["identifier"] = value

### Unofficial AltSource property ###
@property
def apiVersion(self) -> str:
"""Used to declare the AltSource API version."""
return self._src.get("apiVersion")
@apiVersion.setter
def apiVersion(self, value: str):
self._src["apiVersion"] = value

@property
def subtitle(self) -> str:
Expand All @@ -844,20 +861,20 @@ def description(self) -> str:
@description.setter
def description(self, value: str):
self._src["description"] = value

@property
def headerURL(self) -> str:
return self._src.get("headerURL")
@headerURL.setter
def headerURL(self, value: str):
self._src["headerURL"] = value

@property
def iconURL(self) -> str:
return self._src.get("iconURL")
@iconURL.setter
def iconURL(self, value: str):
self._src["iconURL"] = value

@property
def headerURL(self) -> str:
return self._src.get("headerURL")
@headerURL.setter
def headerURL(self, value: str):
self._src["headerURL"] = value

@property
def website(self) -> str:
Expand Down Expand Up @@ -903,24 +920,6 @@ def userinfo(self) -> dict:
@userinfo.setter
def userinfo(self, value: dict):
self._src["userinfo"] = value

# Start unofficial AltSource attributes.

@property
def sourceURL(self) -> str:
return self._src.get("sourceURL")
@sourceURL.setter
def sourceURL(self, value: str):
self._src["sourceURL"] = value

@property
def version(self) -> str:
"""Used to declare the AltSource API version.
"""
return self._src.get("version")
@version.setter
def version(self, value: str):
self._src["version"] = value
# End class AltSource

def altsource_from_file(filepath: Path | str) -> AltSource:
Expand Down

0 comments on commit 2c4d553

Please sign in to comment.