diff --git a/roles/devserver/userland-home/files/dereckson/bin/http2pls b/roles/devserver/userland-home/files/dereckson/bin/http2pls new file mode 100755 index 0000000..ff195d6 --- /dev/null +++ b/roles/devserver/userland-home/files/dereckson/bin/http2pls @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 + +from bs4 import BeautifulSoup +from urllib import request, parse +from os import path +from sys import argv, exit, stderr + + +def get_url(base_url, tag): + relative_url = tag.get('href') + return parse.urljoin(base_url, relative_url) + + +def is_media_extension(extension): + valid_extensions = [ + # Videos + ".avi", ".flv", ".mp4", ".wmv" + ] + return extension in valid_extensions + + +def is_media_link(url): + extension = path.splitext(url)[1] + return is_media_extension(extension) + + +def print_pls(url): + links = get_media_links(url) + + if not links: + return + + print("[playlist]") + + i = 0 + for link in links: + i += 1 + print('File{:d}={:s}'.format(i, link)) + + print("") + print("NumberOfEntries={:d}".format(i)) + print("Version=2") + + +def get_media_links(url): + return [link for link in get_links(url) if is_media_link(link)] + + +def get_links(url): + try: + with request.urlopen(url) as response: + body = response.read() + + soup = BeautifulSoup(body, 'html.parser') + return [get_url(url, link) for link in soup.find_all('a')] + except ValueError: + print("No valid URL: " + url, file=stderr) + return [] + + +def run(): + if len(argv) < 2: + exit(1) + + print_pls(argv[1]) + + +if __name__ == "__main__": + run() diff --git a/roles/devserver/userland-software/dev.sls b/roles/devserver/userland-software/dev.sls index 331583d..2527edd 100644 --- a/roles/devserver/userland-software/dev.sls +++ b/roles/devserver/userland-software/dev.sls @@ -1,155 +1,159 @@ # ------------------------------------------------------------- # Salt — Provision dev software # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Project: Nasqueron # Created: 2017-10-20 # License: Trivial work, not eligible to copyright # ------------------------------------------------------------- {% from "map.jinja" import packages, packages_prefixes with context %} # ------------------------------------------------------------- # C/C++ # ------------------------------------------------------------- devserver_software_dev_c: pkg: - installed - pkgs: - {{ packages.boost }} - cmocka - {{ packages.librabbitmq }} # ------------------------------------------------------------- # Java # ------------------------------------------------------------- devserver_software_dev_java: pkg: - installed - pkgs: - openjdk8 - apache-ant - maven # ------------------------------------------------------------- # .Net languages # ------------------------------------------------------------- devserver_software_dev_dotnet: pkg: - installed - pkgs: - mono # ------------------------------------------------------------- # Node # ------------------------------------------------------------- devserver_software_dev_node: pkg: - installed - pkgs: - {{ packages.node }} - npm devserver_node_packages: npm.installed: - pkgs: - bower - browserify - gulp - grunt - jsonlint - react-tools - require: - pkg: devserver_software_dev_node # ------------------------------------------------------------- # PHP # ------------------------------------------------------------- devserver_software_dev_php: pkg: - installed - pkgs: - {{ packages.phpunit }} # ------------------------------------------------------------- # Python # ------------------------------------------------------------- devserver_software_dev_python: pkg: - installed - pkgs: + # Modern Python 3 packages + - {{ packages_prefixes.python3 }}beautifulsoup + + # Legacy packages - {{ packages_prefixes.python2 }}nltk - {{ packages_prefixes.python2 }}numpy - {{ packages_prefixes.python2 }}virtualenv # ------------------------------------------------------------- # Ruby # ------------------------------------------------------------- devserver_software_dev_ruby: pkg: - installed - pkgs: - {{ packages_prefixes.rubygem }}rubocop # ------------------------------------------------------------- # Rust # ------------------------------------------------------------- devserver_software_dev_rust: pkg: - installed - pkgs: - rust # ------------------------------------------------------------- # Shell # ------------------------------------------------------------- devserver_software_dev_shell: pkg: - installed - pkgs: - hs-ShellCheck # ------------------------------------------------------------- # TCL # ------------------------------------------------------------- devserver_software_dev_tcl: pkg: - installed - pkgs: - rlwrap - tcllib - tclsoap - {{ packages.tcltls }} - {{ packages.tdom }} # ------------------------------------------------------------- # Web development # ------------------------------------------------------------- devserver_software_dev_web: pkg: - installed - pkgs: - memcached - phantomjs # ------------------------------------------------------------- # Tools like code review utilities # # Arcanist is installed in the Phabricator states # ------------------------------------------------------------- devserver_software_dev_misctools: pkg: - installed - pkgs: - git-review