-
Notifications
You must be signed in to change notification settings - Fork 2k
/
delete.py
151 lines (105 loc) · 4.07 KB
/
delete.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
from pylons.i18n import _
import ckan.logic as logic
import ckan.plugins as plugins
def package_delete(context, data_dict):
model = context['model']
user = context['user']
id = data_dict['id']
entity = model.Package.get(id)
if entity is None:
raise logic.NotFound
logic.check_access('package_delete',context, data_dict)
rev = model.repo.new_revision()
rev.author = user
rev.message = _(u'REST API: Delete Package: %s') % entity.name
for item in plugins.PluginImplementations(plugins.IPackageController):
item.delete(entity)
entity.delete()
model.repo.commit()
def package_relationship_delete(context, data_dict):
model = context['model']
user = context['user']
id = data_dict['subject']
id2 = data_dict['object']
rel = data_dict['type']
pkg1 = model.Package.get(id)
pkg2 = model.Package.get(id2)
if not pkg1:
raise logic.NotFound('Subject package %r was not found.' % id)
if not pkg2:
return logic.NotFound('Object package %r was not found.' % id2)
existing_rels = pkg1.get_relationships_with(pkg2, rel)
if not existing_rels:
raise logic.NotFound
relationship = existing_rels[0]
revisioned_details = 'Package Relationship: %s %s %s' % (id, rel, id2)
context['relationship'] = relationship
logic.check_access('package_relationship_delete', context, data_dict)
rev = model.repo.new_revision()
rev.author = user
rev.message = _(u'REST API: Delete %s') % revisioned_details
relationship.delete()
model.repo.commit()
def group_delete(context, data_dict):
model = context['model']
user = context['user']
id = data_dict['id']
group = model.Group.get(id)
context['group'] = group
if group is None:
raise logic.NotFound('Group was not found.')
revisioned_details = 'Group: %s' % group.name
logic.check_access('group_delete', context, data_dict)
rev = model.repo.new_revision()
rev.author = user
rev.message = _(u'REST API: Delete %s') % revisioned_details
group.delete()
for item in plugins.PluginImplementations(plugins.IGroupController):
item.delete(group)
model.repo.commit()
def task_status_delete(context, data_dict):
model = context['model']
user = context['user']
id = data_dict['id']
model.Session.remove()
model.Session()._context = context
entity = model.TaskStatus.get(id)
if entity is None:
raise logic.NotFound
logic.check_access('task_status_delete', context, data_dict)
entity.delete()
model.Session.commit()
def vocabulary_delete(context, data_dict):
model = context['model']
vocab_id = data_dict.get('id')
if not vocab_id:
raise logic.ValidationError({'id': _('id not in data')})
vocab_obj = model.vocabulary.Vocabulary.get(vocab_id)
if vocab_obj is None:
raise logic.NotFound(_('Could not find vocabulary "%s"') % vocab_id)
logic.check_access('vocabulary_delete', context, data_dict)
vocab_obj.delete()
model.repo.commit()
def tag_delete(context, data_dict):
model = context['model']
if not data_dict.has_key('id') or not data_dict['id']:
raise logic.ValidationError({'id': _('id not in data')})
tag_id_or_name = data_dict['id']
vocab_id_or_name = data_dict.get('vocabulary_id')
tag_obj = model.tag.Tag.get(tag_id_or_name, vocab_id_or_name)
if tag_obj is None:
raise logic.NotFound(_('Could not find tag "%s"') % tag_id_or_name)
logic.check_access('tag_delete', context, data_dict)
tag_obj.delete()
model.repo.commit()
def package_relationship_delete_rest(context, data_dict):
# rename keys
key_map = {'id': 'subject',
'id2': 'object',
'rel': 'type'}
# We want 'destructive', so that the value of the subject,
# object and rel in the URI overwrite any values for these
# in params. This is because you are not allowed to change
# these values.
data_dict = logic.action.rename_keys(data_dict, key_map, destructive=True)
package_relationship_delete(context, data_dict)