Download:
child 46:0f45e02848a1
parent 44:1c2db26fa4bd
45:d120981c4310
Anton Shestakov <av6@dwimlabs.net>, Sun, 19 Jun 2016 15:52:04 +0800
incoming: parse_project_url() function to extract domain, user and name, tests

2 файлов изменено, 34 вставок(+), 10 удалений(-) [+]
incoming.py file | annotate | diff | comparison | revisions
tests/test_incoming.py file | annotate | diff | comparison | revisions
--- a/incoming.py Sun Jun 19 14:41:11 2016 +0800
+++ b/incoming.py Sun Jun 19 15:52:04 2016 +0800
@@ -20,6 +20,21 @@
return datetime.strptime(value, '%Y-%m-%dT%H:%M:%S+00:00')
+def parse_project_url(url):
+ parsed = urlparse(url)
+ domain = parsed.hostname
+ if domain is None:
+ domain = 'self'
+ parts = [part for part in parsed.path.split('/') if part]
+ if len(parts) > 1:
+ user = parts[0]
+ name = '/'.join(parts[1:])
+ else:
+ user = None
+ name = parts[0]
+ return domain, user, name
+
+
def insert_check(lines):
text = ''.join(lines)
@@ -117,16 +132,7 @@
result.append((cls, line))
- parsed = urlparse(url)
- domain = parsed.hostname
- if domain is None:
- domain = 'self'
- parts = [part for part in parsed.path.split('/') if part]
- if len(parts) > 1:
- user, name = parts[-2:]
- else:
- user = None
- name = parts[0]
+ domain, user, name = parse_project_url(url)
with database.transaction():
project, created = Project.create_or_get(
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_incoming.py Sun Jun 19 15:52:04 2016 +0800
@@ -0,0 +1,18 @@
+from incoming import parse_project_url
+
+
+def test_parse_project_url():
+ result = parse_project_url('https://example.com/alice/hello-world')
+ assert result == ('example.com', 'alice', 'hello-world')
+
+ result = parse_project_url('~alice/hello-world')
+ assert result == ('self', '~alice', 'hello-world')
+
+ result = parse_project_url('https://code.example.com/hello-world')
+ assert result == ('code.example.com', None, 'hello-world')
+
+ result = parse_project_url('https://example.com/scm/projects/hello-world')
+ assert result == ('example.com', 'scm', 'projects/hello-world')
+
+ result = parse_project_url('https://example.com///hello-world//')
+ assert result == ('example.com', None, 'hello-world')