Skip to content
This repository was archived by the owner on Aug 4, 2018. It is now read-only.

Commit

Permalink
Merge pull request #16 from hel-repo/dev
Browse files Browse the repository at this point in the history
Hel 3.0.3
  • Loading branch information
Fingercomp authored Nov 17, 2016
2 parents 1842160 + b92b088 commit 131f8f2
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 142 deletions.
7 changes: 7 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
3.0.3
-----
- Added dependency remove code.
- Refactored the code of package update route a bit.
- Removed compatibility code.
- Removed an ACE granting all permissions to ``~allperms``.

3.0.2
-----
- Added the PATCH request method to the list of allowed HTTP methods.
Expand Down
1 change: 0 additions & 1 deletion hel/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ def __acl__(cls):
return [
(Allow, '~admins', ALL_PERMISSIONS,),
(Allow, '~system', ALL_PERMISSIONS,),
(Allow, '~allperms', ALL_PERMISSIONS,),
(Allow, Everyone, 'pkg_view',),
(Allow, Everyone, 'pkgs_view',),
(Allow, Authenticated, 'pkg_create',), # TODO: Activated only
Expand Down
14 changes: 14 additions & 0 deletions hel/tests/test_func.py
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,20 @@ def test_upd_pkg_ver_v_deps_type_bad(self):
}, headers=self.auth_headers, status=400)
self.assertEqual(Messages.wrong_dep_type, res.json['message'])

def test_upd_pkg_ver_v_deps_none(self):
self.test_app.patch_json('/packages/package-2', {
'versions': {
'1.0.1': {
'depends': {
'dpackage-4': None
}
}
}
}, headers=self.auth_headers, status=204)
res = self.test_app.get('/packages/package-2', status=200)
self.assertNotIn('dpackage-4',
res.json['data']['versions']['1.0.1']['depends'])

def test_upd_pkg_ver_none(self):
self.test_app.patch_json('/packages/package-2', {
'versions': {
Expand Down
2 changes: 1 addition & 1 deletion hel/utils/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json


VERSION = '3.0.2'
VERSION = '3.0.3'


def parse_search_phrase(s):
Expand Down
2 changes: 1 addition & 1 deletion hel/utils/authentication.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def effective_principals(self, request):
principals += ['activated']
elif (hasattr(request, 'no_permission_check') and
request.no_permission_check):
principals += ['~allperms']
principals += ['~system']
return principals

def remember(self, request, nickname):
Expand Down
259 changes: 120 additions & 139 deletions hel/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
HTTPInternalServerError
)
from pyramid.request import Request
from pyramid.response import Response
from pyramid.security import forget, remember
from pyramid.view import view_config
import semantic_version as semver
Expand Down Expand Up @@ -80,7 +79,7 @@ def auth(request):
except:
raise HTTPBadRequest(detail=Messages.bad_request)
if 'action' not in params:
message = Messages.bad_request
raise HTTPBadRequest(detail=Messages.bad_request)
elif request.logged_in:
if params['action'] == 'log-out':
nickname = request.authenticated_userid
Expand Down Expand Up @@ -209,155 +208,142 @@ def update_package(context, request):
if k not in query:
query[k] = {}
query[k][num] = None
else:
check(
ver, dict,
Messages.type_mismatch % ('version_info', 'dict',))
if num not in old['versions']:
if ('depends' not in ver or
'files' not in ver or
'changes' not in ver):
continue
check(ver, dict,
Messages.type_mismatch % ('version_info', 'dict',))
if num not in old['versions']:
if ('depends' not in ver or 'files' not in ver or
'changes' not in ver):
raise HTTPBadRequest(detail=Messages.partial_ver)
else:
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
if 'files' not in query[k][num]:
query[k][num]['files'] = {}
if 'depends' not in query[k][num]:
query[k][num]['depends'] = {}
if 'changes' not in query[k][num]:
query[k][num]['changes'] = ""
if 'files' in ver:
check(ver['files'], dict,
Messages.type_mismatch % ('files', 'dict',))
for unchecked_url, file_info in ver['files'].items():
url = parse_url(unchecked_url)
if file_info is None:
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
if 'files' not in query[k][num]:
query[k][num]['files'] = {}
query[k][num]['files'][url] = None
continue
check(file_info, dict,
Messages.type_mismatch % ('file_info', 'dict',))
if ((num not in old['versions'] or
url not in old['versions'][num]['files']) and
('dir' not in file_info or
'name' not in file_info)):
raise HTTPBadRequest(detail=Messages.partial_ver)
else:
if ('dir' in file_info and
check(file_info['dir'], str,
Messages.type_mismatch % (
'file_dir', 'str',)) or
'name' in file_info and
check(file_info['name'], str,
Messages.type_mismatch % (
'file_name', 'str',))):
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
if 'files' not in query[k][num]:
query[k][num]['files'] = {}
if url not in query[k][num]['files']:
(query[k][num]['files']
[url]) = {}
if 'dir' in file_info:
(query[k][num]['files']
[url]['dir']) = file_info['dir']
if 'name' in file_info:
(query[k][num]['files']
[url]['name']) = file_info['name']

if 'depends' in ver:
check(ver['depends'], dict,
Messages.type_mismatch % ('depends', 'dict',))
for dep_name, dep_info in ver['depends'].items():
if dep_info is None:
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
if 'depends' not in query[k][num]:
query[k][num]['depends'] = {}
if 'changes' not in query[k][num]:
query[k][num]['changes'] = ""
if 'files' in ver:
check(
ver['files'], dict,
Messages.type_mismatch % ('files', 'dict',))
for unchecked_url, file_info in ver['files'].items():
url = parse_url(unchecked_url)
if file_info is None:
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
if 'files' not in query[k][num]:
query[k][num]['files'] = {}
query[k][num]['files'][url] = None
else:
check(
file_info, dict,
Messages.type_mismatch % (
'file_info', 'dict',))
if ((num not in old['versions'] or
url not in old['versions'][num]
['files']) and
('dir' not in file_info or
'name' not in file_info)):
raise HTTPBadRequest(
detail=Messages.partial_ver
)
if ('dir' in file_info and
check(
file_info['dir'], str,
Messages.type_mismatch % (
'file_dir', 'str',)) or
'name' in file_info and
check(
file_info['name'], str,
Messages.type_mismatch % (
'file_name', 'str',))):
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
if 'files' not in query[k][num]:
query[k][num]['files'] = {}
if url not in query[k][num]['files']:
(query[k][num]['files']
[url]) = {}
if 'dir' in file_info:
(query[k][num]['files']
[url]['dir']) = file_info['dir']
if 'name' in file_info:
(query[k][num]['files']
[url]['name']) = file_info['name']

if 'depends' in ver:
check(
ver['depends'], dict,
Messages.type_mismatch % ('depends', 'dict',))
for dep_name, dep_info in ver['depends'].items():
check(
dep_info, dict,
Messages.type_mismatch % (
'dep_info', 'dict',))
if dep_info:
if ((num not in old['versions'] or
dep_name not in old['versions'][num]
['depends']) and
('version' not in dep_info or
'type' not in dep_info)):
raise HTTPBadRequest(
detail=Messages.partial_ver
)
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
if ('version' in dep_info or
'type' in dep_info):
if 'version' in dep_info:
check(
dep_info['version'], str,
Messages.type_mismatch % (
'dep_version', 'str',))
try:
semver.Spec(dep_info['version'])
except ValueError as e:
raise HTTPBadRequest(detail=str(e))
if 'type' in dep_info:
check(
dep_info['type'], str,
Messages.type_mismatch % (
'dep_type', 'str',))
if dep_info['type'] not in [
'recommended',
'optional',
'required'
]:
raise HTTPBadRequest(
detail=Messages.wrong_dep_type
)
if 'depends' not in query[k][num]:
query[k][num]['depends'] = {}
if (dep_name not in
query[k][num]['depends']):
(query[k][num]['depends']
[dep_name]) = {}
if 'version' in dep_info:
(query[k][num]['depends']
[dep_name]['version']) = (
dep_info['version'])
if 'type' in dep_info:
(query[k][num]['depends']
[dep_name]['type']) = dep_info['type']
if 'changes' in ver:
check(ver['changes'], str,
Messages.type_mismatch % ('changes', 'str',))
query[k][num]['depends'][dep_name] = None
continue
check(dep_info, dict,
Messages.type_mismatch % ('dep_info', 'dict',))
if ((num not in old['versions'] or
dep_name not in old['versions'][num]
['depends']) and
('version' not in dep_info or
'type' not in dep_info)):
raise HTTPBadRequest(detail=Messages.partial_ver)
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
query[k][num]['changes'] = ver['changes']
if ('version' in dep_info or
'type' in dep_info):
if 'version' in dep_info:
check(
dep_info['version'], str,
Messages.type_mismatch % (
'dep_version', 'str',))
try:
semver.Spec(dep_info['version'])
except ValueError as e:
raise HTTPBadRequest(detail=str(e))
if 'type' in dep_info:
check(dep_info['type'], str,
Messages.type_mismatch % (
'dep_type', 'str',))
if dep_info['type'] not in ['recommended',
'optional',
'required']:
raise HTTPBadRequest(
detail=Messages.wrong_dep_type
)
if 'depends' not in query[k][num]:
query[k][num]['depends'] = {}
if dep_name not in query[k][num]['depends']:
query[k][num]['depends'][dep_name] = {}
if 'version' in dep_info:
(query[k][num]['depends']
[dep_name]['version']) = (
dep_info['version'])
if 'type' in dep_info:
(query[k][num]['depends']
[dep_name]['type']) = dep_info['type']
if 'changes' in ver:
check(ver['changes'], str,
Messages.type_mismatch % ('changes', 'str',))
if k not in query:
query[k] = {}
if num not in query[k]:
query[k][num] = {}
query[k][num]['changes'] = ver['changes']
elif k == 'screenshots':
check(v, dict, Messages.type_mismatch % (k, 'dict',))
for unchecked_url, desc in v.items():
url = parse_url(unchecked_url)
if (desc is None or
type(check(
desc, str,
Messages.type_mismatch % (
'screenshot_desc', 'str',))) == str):
if (desc is None or type(check(desc, str,
Messages.type_mismatch % (
'screenshot_desc', 'str',)
)) == str):
if k not in query:
query[k] = {}
query[k][url] = desc
Expand Down Expand Up @@ -403,11 +389,6 @@ def get_package(context, request):
'stats.views': 1
}
})
context.update({
'$unset': {
'stats.downloads': ""
}
})
del r['_id']
raise HTTPOk(
body=replace_chars_in_keys(r, Constants.key_replace_char, '.'))
Expand Down

0 comments on commit 131f8f2

Please sign in to comment.