#!/usr/bin/python3
from utils import *
from download_page import download
# portable code to get filename
import os
platform = os.path.basename(__file__)
if platform.endswith(".py"):
platform = platform[:(-3)]
def extract_from_url (url, verbosity):
# split into domain and path
index = url.find("/", url.find("//")+2)
domain = url[:index]
path = url[index:]
# get owner/organization name
index = path.find("/",1)
if index < 0:
# we could just return None here, as this means no project
org = path[1:]
else:
org = path[1:index]
if org == "":
return None
# get project name
index2 = path.find("/",index+1)
if index2 < 0:
project = path[index+1:]
else:
project = path[index+1:index2]
if project == "":
return None
# get page category
index3 = path.find("/",index2+1)
if index3 < 0:
category = path[index2+1:]
else:
category = path[index2+1:index3]
# return feed based on category
urlbase = domain + "/" + org + "/" + project + "/"
if category == "":
# note, this is an alternate link to /org/project/commits/default-branch.atom
return urlbase + "commits.atom"
elif category == "releases":
return urlbase + "releases.atom"
elif category == "tags":
return urlbase + "tags.atom"
elif category == "tree":
# get current branch
index4 = path.find("/",index3+1)
if index4 < 0:
branch = path[index3+1:]
else:
branch = path[index3+1:index4]
if branch != "":
# return commit feed for that branch
return urlbase + "commits/" + branch + ".atom"
def extract_from_page (page, verbosity):
result = search (page, '', reverse=True)
if not result is None:
# strip '" rel="alternate" title="Recent Commits to :" '
index = result.find('"')
result = result[:index]
if not result == "":
return result
def extract (url, page=None, network=False, verbosity=3, args={}):
feed = extract_from_url (url, verbosity)
if not feed is None:
return feed
else:
notify ("Unable to get feed from URL alone", verbosity, platform)
if network == True:
page = download (platform, url, args, verbosity)
feed = extract_from_page (page, verbosity)
if not feed is None:
return feed