ebird-api-data 0.3.0__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/PKG-INFO +1 -1
  2. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/pyproject.toml +2 -2
  3. ebird_api_data-0.3.2/src/ebird/api/data/__init__.py +1 -0
  4. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/admin.py +13 -1
  5. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/loaders.py +8 -9
  6. ebird_api_data-0.3.0/src/ebird/api/data/__init__.py +0 -1
  7. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/.gitignore +0 -0
  8. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/LICENSE +0 -0
  9. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/README.md +0 -0
  10. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/apps.py +0 -0
  11. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/fields.py +0 -0
  12. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/locale/en/LC_MESSAGES/django.mo +0 -0
  13. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/locale/en/LC_MESSAGES/django.po +0 -0
  14. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/management/__init__.py +0 -0
  15. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/management/commands/__init__.py +0 -0
  16. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/management/commands/add_checklists.py +0 -0
  17. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/migrations/0001_initial.py +0 -0
  18. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/migrations/__init__.py +0 -0
  19. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/__init__.py +0 -0
  20. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/checklist.py +0 -0
  21. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/country.py +0 -0
  22. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/county.py +0 -0
  23. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/filter.py +0 -0
  24. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/location.py +0 -0
  25. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/observation.py +0 -0
  26. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/observer.py +0 -0
  27. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/species.py +0 -0
  28. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/models/state.py +0 -0
  29. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/templates/admin/data/species/change_list_object_tools.html +0 -0
  30. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/templates/admin/data/species/fetch_species.html +0 -0
  31. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/templates/data/widgets/translation_field.html +0 -0
  32. {ebird_api_data-0.3.0 → ebird_api_data-0.3.2}/src/ebird/api/data/widgets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ebird-api-data
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: eBird API Data is a reusable Django app for loading data from eBird into a database.
5
5
  Author-email: Stuart MacKay <smackay@flagstonesoftware.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ebird-api-data"
3
- version = "0.3.0"
3
+ version = "0.3.2"
4
4
  description = "eBird API Data is a reusable Django app for loading data from eBird into a database."
5
5
  keywords = ["checklists", "observations", "species", "Django", "eBird", "models"]
6
6
  license = "MIT"
@@ -65,7 +65,7 @@ dev-dependencies = [
65
65
  ]
66
66
 
67
67
  [tool.bumpversion]
68
- current_version = "0.3.0"
68
+ current_version = "0.3.2"
69
69
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
70
70
  serialize = ["{major}.{minor}.{patch}"]
71
71
  ignore_missing_version = false
@@ -0,0 +1 @@
1
+ __version__ = "0.3.2"
@@ -13,7 +13,7 @@ from django.views import generic
13
13
  from . import models
14
14
  from .fields import TranslationCharField, TranslationTextField
15
15
  from .loaders import APILoader
16
- from .models import Observation, Species
16
+ from .models import Observation, Species, Checklist
17
17
 
18
18
 
19
19
  class ObservationInline(admin.TabularInline):
@@ -44,6 +44,17 @@ class ObservationInline(admin.TabularInline):
44
44
  .order_by("species__taxon_order")
45
45
  )
46
46
 
47
+ class ProtocolListFilter(admin.SimpleListFilter):
48
+ title = _("protocol")
49
+ parameter_name = "protocol_code"
50
+
51
+ def lookups(self, request, model_admin):
52
+ return Checklist.Protocol.choices
53
+
54
+ def queryset(self, request, queryset):
55
+ if value := self.value():
56
+ return queryset.filter(protocol_code=value)
57
+
47
58
 
48
59
  @admin.register(models.Checklist)
49
60
  class ChecklistAdmin(admin.ModelAdmin):
@@ -55,6 +66,7 @@ class ChecklistAdmin(admin.ModelAdmin):
55
66
  "location",
56
67
  "observer",
57
68
  )
69
+ list_filter = [ProtocolListFilter]
58
70
  ordering = ("-started",)
59
71
  search_fields = ("identifier", "location__name", "observer__name")
60
72
  autocomplete_fields = ("location", "observer")
@@ -8,6 +8,7 @@ import string
8
8
  import time
9
9
 
10
10
  from decimal import Decimal
11
+ from functools import cache
11
12
  from typing import List, Optional
12
13
  from urllib.error import HTTPError, URLError
13
14
 
@@ -224,8 +225,8 @@ class APILoader:
224
225
  values["family_code"] = data.get("familyCode", "")
225
226
  values["common_name"][language] = data["comName"]
226
227
  values["scientific_name"] = data["sciName"]
227
- values["family_common_name"][language] = data["familyComName"]
228
- values["family_scientific_name"] = data["familySciName"]
228
+ values["family_common_name"][language] = data.get("familyComName", "")
229
+ values["family_scientific_name"] = data.get("familySciName", "")
229
230
  values["data"]["api"][locale] = data
230
231
 
231
232
  values["common_name"] = json.dumps(values["common_name"])
@@ -389,13 +390,10 @@ class APILoader:
389
390
  if duration := data.get("durationHrs"):
390
391
  values["duration"] = int(duration * 60.0)
391
392
 
392
- if data["protocolId"] == Checklist.Protocol.TRAVELLING.value:
393
- # The distance travelled might not be reported.
394
- if "effortDistanceKm" in data:
395
- dist: str = data["effortDistanceKm"]
396
- values["distance"] = round(Decimal(dist), 3)
397
- elif data["protocolId"] == Checklist.Protocol.AREA.value:
398
- area: str = data["effortAreaHa"]
393
+ if dist := data.get("effortDistanceKm"):
394
+ values["distance"] = round(Decimal(dist), 3)
395
+
396
+ if area := data.get("effortAreaHa"):
399
397
  values["area"] = round(Decimal(area), 3)
400
398
 
401
399
  if data["protocolId"] not in Checklist.Protocol.values:
@@ -411,6 +409,7 @@ class APILoader:
411
409
 
412
410
  return checklist
413
411
 
412
+ @cache
414
413
  def fetch_subregions(self, region: str) -> List[str]:
415
414
  region_types: list = ["subnational1", "subnational2", None]
416
415
  levels: int = len(region.split("-", 2))
@@ -1 +0,0 @@
1
- __version__ = "0.3.0"
File without changes
File without changes