Intellij/IntellijURLProvider.py (43 lines of code) (raw):
#!/usr/bin/env python
"""Intellij URL Provider."""
# Copyright (c) Facebook, Inc. and its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import xml.etree.cElementTree as ET
from autopkglib.URLGetter import URLGetter
__all__ = ["IntellijURLProvider"]
intellij_version_url = "https://www.jetbrains.com/updates/updates.xml"
class IntellijURLProvider(URLGetter):
"""Provide URL for latest Intellij IDEA build."""
description = "Provides URL and version for the latest release of Intellij."
input_variables = {
"base_url": {
"required": False,
"description": (
"Default is " "https://www.jetbrains.com/updates/updates.xml"
),
},
"edition": {
"required": False,
"description": (
'Either "C" for "Community" or "U" for "Ultimate" '
'edition. Defaults to "C".'
),
},
}
output_variables = {"url": {"description": "URL to the latest release of Intellij"}}
__doc__ = description
def get_intellij_version(self, intellij_version_url):
"""Retrieve version number from XML."""
# Read XML
raw_xml = self.download(intellij_version_url, text=True)
# Select the latest released build
root = ET.fromstring(raw_xml)
product = root.find('product[@name="IntelliJ IDEA"]')
channel = product.find('channel[@status="release"]')
builds = channel.findall("build")
version = builds[0].attrib["version"]
# Return pkg url.
return str(version)
def main(self):
"""Main function."""
# Determine values.
version_url = self.env.get("version_url", intellij_version_url)
version = self.get_intellij_version(version_url)
download_url = "https://download.jetbrains.com/idea/" "ideaI%s-%s.dmg" % (
self.env.get("edition", "C"),
version,
)
self.env["url"] = download_url
self.output("URL: %s" % self.env["url"])
if __name__ == "__main__":
processor = IntellijURLProvider()
processor.execute_shell()