Skip to content

Commit c9c6796

Browse files
authored
Merge pull request #38 from dcastrowa/addNewProperties
Add new properties
2 parents 375e1ef + c3d6460 commit c9c6796

4 files changed

Lines changed: 216 additions & 13 deletions

File tree

maproulette/models/challenge.py

Lines changed: 184 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,24 @@ def default_priority(self):
116116
def default_priority(self, value):
117117
self._default_priority = value
118118

119+
@property
120+
def high_priority_rule(self):
121+
"""The high priority for this challenge"""
122+
return self._high_priority_rule
123+
124+
@high_priority_rule.setter
125+
def high_priority_rule(self, value):
126+
self._high_priority_rule = value
127+
128+
@property
129+
def low_priority_rule(self):
130+
"""The low priority of this challenge"""
131+
return self._low_priority_rule
132+
133+
@low_priority_rule.setter
134+
def low_priority_rule(self, value):
135+
self._low_priority_rule = value
136+
119137
@property
120138
def default_zoom(self):
121139
"""The default zoom level for this challenge"""
@@ -143,9 +161,139 @@ def max_zoom(self):
143161
def max_zoom(self, value):
144162
self._max_zoom = value
145163

164+
@property
165+
def osm_id_property(self):
166+
"""The id property of an osm feature"""
167+
return self._osm_id_property
168+
169+
@osm_id_property.setter
170+
def osm_id_property(self, value):
171+
self._osm_id_property = value
172+
173+
@property
174+
def cooperative_type(self):
175+
""""""
176+
return self._cooperative_type
177+
178+
@cooperative_type.setter
179+
def cooperative_type(self, value):
180+
self._cooperative_type = value
181+
182+
@property
183+
def popularity(self):
184+
"""The popularity of a challenge"""
185+
return self._popularity
186+
187+
@popularity.setter
188+
def popularity(self, value):
189+
self._popularity = value
190+
191+
@property
192+
def check_in_comment(self):
193+
"""Comment to be associated with changes made by users"""
194+
return self._check_in_comment
195+
196+
@check_in_comment.setter
197+
def check_in_comment(self, value):
198+
self._check_in_comment = value
199+
200+
@property
201+
def check_in_source(self):
202+
"""Hashtag appended to changeset comments"""
203+
return self._check_in_source
204+
205+
@check_in_source.setter
206+
def check_in_source(self, value):
207+
self._check_in_source = value
208+
209+
@property
210+
def requires_local(self):
211+
"""Whether or not tasks require local knowledge to complete"""
212+
return self._requires_local
213+
214+
@requires_local.setter
215+
def requires_local(self, value):
216+
self._requires_local = value
217+
218+
@property
219+
def default_basemap(self):
220+
"""The default basemap to use for this challenge"""
221+
return self._default_basemap
222+
223+
@default_basemap.setter
224+
def default_basemap(self, value):
225+
self._default_basemap = value
226+
227+
@property
228+
def default_basemap_id(self):
229+
"""The id of the default basemap"""
230+
return self._default_basemap_id
231+
232+
@default_basemap_id.setter
233+
def default_basemap_id(self, value):
234+
self._default_basemap_id = value
235+
236+
@property
237+
def custom_basemap(self):
238+
"""The custom basemap of this challenge"""
239+
return self._custom_basemap
240+
241+
@custom_basemap.setter
242+
def custom_basemap(self, value):
243+
self._custom_basemap = value
244+
245+
@property
246+
def update_tasks(self):
247+
"""Whether or not to periodically delete old tasks"""
248+
return self._update_tasks
249+
250+
@update_tasks.setter
251+
def update_tasks(self, value):
252+
self._update_tasks = value
253+
254+
@property
255+
def exportable_properties(self):
256+
"""Comma separated list of properties to be exportable"""
257+
return self._exportable_properties
258+
259+
@exportable_properties.setter
260+
def exportable_properties(self, value):
261+
self._exportable_properties = value
262+
263+
@property
264+
def preferred_tags(self):
265+
"""List of preferred tags the user can use when completing tasks"""
266+
return self._preferred_tags
267+
268+
@preferred_tags.setter
269+
def preferred_tags(self, value):
270+
self._preferred_tags = value
271+
272+
@property
273+
def task_styles(self):
274+
"""Custom task styling based on specific task feature properties"""
275+
return self._task_styles
276+
277+
@task_styles.setter
278+
def task_styles(self, value):
279+
self._task_styles = value
280+
281+
@property
282+
def remote_geojson(self):
283+
"""Create a challenge from a GeoJSON URL"""
284+
return self._remote_geojson
285+
286+
@remote_geojson.setter
287+
def remote_geojson(self, value):
288+
self._remote_geojson = value
289+
146290
def __init__(self, name, id=None, description=None, parent=None, instruction=None, difficulty=None, blurb=None,
147-
enabled=None, challenge_type=None, featured=None, overpassQL=None, default_priority=None, default_zoom=None,
148-
min_zoom=None, max_zoom=None):
291+
enabled=None, challenge_type=None, featured=None, overpassQL=None, default_priority=None,
292+
high_priority_rule=None, low_priority_rule=None, default_zoom=None, min_zoom=None, max_zoom=None,
293+
osm_id_property=None, cooperative_type=None, popularity=None, check_in_comment=None,
294+
check_in_source=None, requires_local=None, default_basemap=None, default_basemap_id=None,
295+
custom_basemap=None, update_tasks=None, exportable_properties=None, preferred_tags=None,
296+
task_styles=None, remote_geojson=None):
149297
self._id = id
150298
self._name = name
151299
self._description = description
@@ -158,16 +306,33 @@ def __init__(self, name, id=None, description=None, parent=None, instruction=Non
158306
self._featured = featured
159307
self._overpassQL = overpassQL
160308
self._default_priority = default_priority
309+
self._high_priority_rule = high_priority_rule
310+
self._low_priority_rule = low_priority_rule
161311
self._default_zoom = default_zoom
162312
self._min_zoom = min_zoom
163313
self._max_zoom = max_zoom
314+
self._osm_id_property = osm_id_property
315+
self._cooperative_type = cooperative_type
316+
self._popularity = popularity
317+
self._check_in_comment = check_in_comment
318+
self._check_in_source = check_in_source
319+
self._requires_local = requires_local
320+
self._default_basemap = default_basemap
321+
self._default_basemap_id = default_basemap_id
322+
self._custom_basemap = custom_basemap
323+
self._update_tasks = update_tasks
324+
self._exportable_properties = exportable_properties
325+
self._preferred_tags = preferred_tags
326+
self._task_styles = task_styles
327+
self._remote_geojson = remote_geojson
164328

165329
def to_dict(self):
166330
"""Converts all non-null properties of a challenge object into a dictionary"""
167331
properties = {
168332
"id": self._id,
169333
"name": self._name,
170334
"description": self._description,
335+
"deleted": self.description,
171336
"parent": self._parent,
172337
"instruction": self._instruction,
173338
"difficulty": self._difficulty,
@@ -177,9 +342,25 @@ def to_dict(self):
177342
"featured": self._featured,
178343
"overpassQL": self._overpassQL,
179344
"defaultPriority": self._default_priority,
345+
"highPriorityRule": self._high_priority_rule,
346+
"lowPriorityRule": self._low_priority_rule,
180347
"defaultZoom": self._default_zoom,
181348
"minZoom": self._min_zoom,
182-
"maxZoom": self._max_zoom
349+
"maxZoom": self._max_zoom,
350+
"osmIdProperty": self._osm_id_property,
351+
"cooperativeType": self._cooperative_type,
352+
"popularity": self._popularity,
353+
"checkInComment": self._check_in_comment,
354+
"checkInSource": self._check_in_source,
355+
"requiresLocal": self._requires_local,
356+
"defaultBasemap": self._default_basemap,
357+
"defautlBasemapId": self._default_basemap_id,
358+
"customBasemap": self._custom_basemap,
359+
"updateTasks": self._update_tasks,
360+
"exportableProperties": self._exportable_properties,
361+
"preferredTags": self._preferred_tags,
362+
"taskStyles": self._task_styles,
363+
"remoteGeoJson": self.remote_geojson
183364
}
184365
return {k: v for (k, v) in properties.items() if v is not None}
185366

maproulette/models/project.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,31 @@ def display_name(self, value):
6666

6767
@property
6868
def is_virtual(self):
69-
"""Whether or not this project is virtual"""
69+
"""Whether or not a project is virtual"""
7070
return self._is_virtual
7171

7272
@is_virtual.setter
7373
def is_virtual(self, value):
7474
self._is_virtual = value
7575

76-
def __init__(self, name, id=None, description=None, groups=None, enabled=None, display_name=None, is_virtual=None):
76+
@property
77+
def featured(self):
78+
"""Whether or not the project is featured"""
79+
return self._featured
80+
81+
@featured.setter
82+
def featured(self, value):
83+
self._featured = value
84+
85+
def __init__(self, name, id=None, description=None, groups=None, enabled=None,
86+
is_virtual=None, display_name=None, featured=None):
7787
self._id = id
7888
self._name = name
7989
self._description = description
8090
self._groups = groups
8191
self._enabled = enabled
8292
self._display_name = display_name
93+
self._featured = featured
8394
self._is_virtual = is_virtual
8495

8596
def to_dict(self):
@@ -91,7 +102,8 @@ def to_dict(self):
91102
"groups": self._groups,
92103
"enabled": self._enabled,
93104
"display_name": self._display_name,
94-
"is_virtual": self._is_virtual
105+
"featured": self._featured,
106+
"isVirtual": self._is_virtual
95107
}
96108
return {k: v for (k, v) in properties.items() if v is not None}
97109

maproulette/models/task.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,19 @@ def mapillary_images(self):
153153
def mapillary_images(self, value):
154154
self._mapillary_images = value
155155

156+
@property
157+
def cooperative_work(self):
158+
"""A tag that is or will be used for a new type of task resolution"""
159+
return self._cooperative_work
160+
161+
@cooperative_work.setter
162+
def cooperative_work(self, value):
163+
self._cooperative_work = value
164+
156165
def __init__(self, name, parent, geometries, id=None, instruction=None, location=None, suggested_fix=None,
157-
status=None, mapped_on=None, review=None, priority=None, changeset_id=None, completion_responses=None,
158-
bundle_id=None, is_bundle_primary=None, mapillary_images=None):
166+
status=None, mapped_on=None, review=None, priority=None, changeset_id=None,
167+
completion_responses=None, bundle_id=None, is_bundle_primary=None, mapillary_images=None,
168+
cooperative_work=None):
159169
self._id = id
160170
self._name = name
161171
self._parent = parent
@@ -172,6 +182,7 @@ def __init__(self, name, parent, geometries, id=None, instruction=None, location
172182
self._bundle_id = bundle_id
173183
self._is_bundle_primary = is_bundle_primary
174184
self._mapillary_images = mapillary_images
185+
self._cooperative_work = cooperative_work
175186

176187
def to_dict(self):
177188
"""Converts all non-null properties of a task object into a dictionary"""
@@ -190,7 +201,8 @@ def to_dict(self):
190201
"completionResponses": self._completion_responses,
191202
"bundleId": self._bundle_id,
192203
"isBundlePrimary": self._is_bundle_primary,
193-
"mapillaryImages": self._mapillary_images
204+
"mapillaryImages": self._mapillary_images,
205+
"cooperativeWork": self._cooperative_work
194206
}
195207
return {k: v for (k, v) in properties.items() if v is not None}
196208

tests/test_project_api.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ def test_create_project(self, mock_request, api_instance=api):
4848
@patch('maproulette.api.maproulette_server.requests.Session.post')
4949
def test_add_challenge_to_project(self, mock_request, api_instance=api):
5050
test_virtual_project_model = maproulette.ProjectModel(name='Test Virtual Project Name',
51-
id=1234,
52-
is_virtual=True)
51+
id=1234)
5352
test_challenge_model = maproulette.ChallengeModel(name='Test Challenge Name',
5453
id=246)
5554
test_virtual_project_id = test_virtual_project_model.id
@@ -61,8 +60,7 @@ def test_add_challenge_to_project(self, mock_request, api_instance=api):
6160
@patch('maproulette.api.maproulette_server.requests.Session.post')
6261
def test_remove_challenge_from_project(self, mock_request, api_instance=api):
6362
test_virtual_project_model = maproulette.ProjectModel(name='Test Virtual Project Name',
64-
id=1234,
65-
is_virtual=True)
63+
id=1234)
6664
test_challenge_model = maproulette.ChallengeModel(name='Test Challenge Name', id=246)
6765
test_virtual_project_id = test_virtual_project_model.id
6866
test_challenge_id = test_challenge_model.id

0 commit comments

Comments
 (0)