mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-11 09:36:24 +01:00
Improve image tags to also work with eveonline objects, use new tags in group managenet, optimer, timerboard
This commit is contained in:
17
allianceauth/eveonline/evelinks/__init__.py
Normal file
17
allianceauth/eveonline/evelinks/__init__.py
Normal file
@@ -0,0 +1,17 @@
|
||||
# this package generates profile URL for eve entities
|
||||
# on 3rd party websites like evewho and zKillboard
|
||||
#
|
||||
# It contains of modules for views and templatetags for templates
|
||||
|
||||
# list of all eve entity categories as defined in ESI
|
||||
ESI_CATEGORY_AGENT = "agent"
|
||||
ESI_CATEGORY_ALLIANCE = "alliance"
|
||||
ESI_CATEGORY_CHARACTER = "character"
|
||||
ESI_CATEGORY_CONSTELLATION = "constellation"
|
||||
ESI_CATEGORY_CORPORATION = "corporation"
|
||||
ESI_CATEGORY_FACTION = "faction"
|
||||
ESI_CATEGORY_INVENTORYTYPE = "inventory_type"
|
||||
ESI_CATEGORY_REGION = "region"
|
||||
ESI_CATEGORY_SOLARSYSTEM = "solar_system"
|
||||
ESI_CATEGORY_STATION = "station"
|
||||
ESI_CATEGORY_WORMHOLE = "wormhole"
|
||||
52
allianceauth/eveonline/evelinks/dotlan.py
Normal file
52
allianceauth/eveonline/evelinks/dotlan.py
Normal file
@@ -0,0 +1,52 @@
|
||||
# this module generates profile URLs for dotlan
|
||||
|
||||
from urllib.parse import urljoin, quote
|
||||
|
||||
from . import *
|
||||
|
||||
BASE_URL = 'http://evemaps.dotlan.net'
|
||||
|
||||
|
||||
def _build_url(category: str, name: str) -> str:
|
||||
"""return url to profile page for an eve entity"""
|
||||
|
||||
if category == ESI_CATEGORY_ALLIANCE:
|
||||
partial = 'alliance'
|
||||
|
||||
elif category == ESI_CATEGORY_CORPORATION:
|
||||
partial = 'corp'
|
||||
|
||||
elif category == ESI_CATEGORY_REGION:
|
||||
partial = 'map'
|
||||
|
||||
elif category == ESI_CATEGORY_SOLARSYSTEM:
|
||||
partial = 'system'
|
||||
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
"Not implemented yet for category:" + category
|
||||
)
|
||||
|
||||
url = urljoin(
|
||||
BASE_URL,
|
||||
'{}/{}'.format(partial, quote(str(name).replace(" ", "_")))
|
||||
|
||||
)
|
||||
return url
|
||||
|
||||
|
||||
def alliance_url(name: str) -> str:
|
||||
"""url for page about given alliance on dotlan"""
|
||||
return _build_url(ESI_CATEGORY_ALLIANCE, name)
|
||||
|
||||
def corporation_url(name: str) -> str:
|
||||
"""url for page about given corporation on dotlan"""
|
||||
return _build_url(ESI_CATEGORY_CORPORATION, name)
|
||||
|
||||
def region_url(name: str) -> str:
|
||||
"""url for page about given region on dotlan"""
|
||||
return _build_url(ESI_CATEGORY_REGION, name)
|
||||
|
||||
def solar_system_url(name: str) -> str:
|
||||
"""url for page about given solar system on dotlan"""
|
||||
return _build_url(ESI_CATEGORY_SOLARSYSTEM, name)
|
||||
44
allianceauth/eveonline/evelinks/evewho.py
Normal file
44
allianceauth/eveonline/evelinks/evewho.py
Normal file
@@ -0,0 +1,44 @@
|
||||
# this module generates profile URLs for evewho
|
||||
|
||||
from urllib.parse import urljoin, quote
|
||||
|
||||
from . import *
|
||||
|
||||
BASE_URL = 'https://evewho.com'
|
||||
|
||||
|
||||
def _build_url(category: str, eve_id: int) -> str:
|
||||
"""return url to profile page for an eve entity"""
|
||||
|
||||
if category == ESI_CATEGORY_ALLIANCE:
|
||||
partial = 'alliance'
|
||||
|
||||
elif category == ESI_CATEGORY_CORPORATION:
|
||||
partial = 'corporation'
|
||||
|
||||
elif category == ESI_CATEGORY_CHARACTER:
|
||||
partial = 'character'
|
||||
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
"Not implemented yet for category:" + category
|
||||
)
|
||||
|
||||
url = urljoin(
|
||||
BASE_URL,
|
||||
'{}/{}'.format(partial, int(eve_id))
|
||||
)
|
||||
return url
|
||||
|
||||
|
||||
def alliance_url(eve_id: int) -> str:
|
||||
"""url for page about given alliance on evewho"""
|
||||
return _build_url(ESI_CATEGORY_ALLIANCE, eve_id)
|
||||
|
||||
def character_url(eve_id: int) -> str:
|
||||
"""url for page about given character on evewho"""
|
||||
return _build_url(ESI_CATEGORY_CHARACTER, eve_id)
|
||||
|
||||
def corporation_url(eve_id: int) -> str:
|
||||
"""url for page about given corporation on evewho"""
|
||||
return _build_url(ESI_CATEGORY_CORPORATION, eve_id)
|
||||
0
allianceauth/eveonline/evelinks/tests/__init__.py
Normal file
0
allianceauth/eveonline/evelinks/tests/__init__.py
Normal file
92
allianceauth/eveonline/evelinks/tests/test_evelinks.py
Normal file
92
allianceauth/eveonline/evelinks/tests/test_evelinks.py
Normal file
@@ -0,0 +1,92 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from ...models import EveCharacter, EveCorporationInfo, EveAllianceInfo
|
||||
from .. import dotlan, zkillboard, evewho
|
||||
from ...templatetags import evelinks
|
||||
|
||||
|
||||
class TestEveWho(TestCase):
|
||||
|
||||
def test_alliance_url(self):
|
||||
self.assertEqual(
|
||||
evewho.alliance_url(12345678),
|
||||
'https://evewho.com/alliance/12345678'
|
||||
)
|
||||
|
||||
def test_corporation_url(self):
|
||||
self.assertEqual(
|
||||
evewho.corporation_url(12345678),
|
||||
'https://evewho.com/corporation/12345678'
|
||||
)
|
||||
|
||||
def test_character_url(self):
|
||||
self.assertEqual(
|
||||
evewho.character_url(12345678),
|
||||
'https://evewho.com/character/12345678'
|
||||
)
|
||||
|
||||
|
||||
class TestDotlan(TestCase):
|
||||
|
||||
def test_alliance_url(self):
|
||||
self.assertEqual(
|
||||
dotlan.alliance_url('Wayne Enterprices'),
|
||||
'http://evemaps.dotlan.net/alliance/Wayne_Enterprices'
|
||||
)
|
||||
|
||||
def test_corporation_url(self):
|
||||
self.assertEqual(
|
||||
dotlan.corporation_url('Wayne Technology'),
|
||||
'http://evemaps.dotlan.net/corp/Wayne_Technology'
|
||||
)
|
||||
self.assertEqual(
|
||||
dotlan.corporation_url('Crédit Agricole'),
|
||||
'http://evemaps.dotlan.net/corp/Cr%C3%A9dit_Agricole'
|
||||
)
|
||||
|
||||
def test_region_url(self):
|
||||
self.assertEqual(
|
||||
dotlan.region_url('Black Rise'),
|
||||
'http://evemaps.dotlan.net/map/Black_Rise'
|
||||
)
|
||||
|
||||
def test_solar_system_url(self):
|
||||
self.assertEqual(
|
||||
dotlan.solar_system_url('Jita'),
|
||||
'http://evemaps.dotlan.net/system/Jita'
|
||||
)
|
||||
|
||||
|
||||
class TestZkillboard(TestCase):
|
||||
|
||||
def test_alliance_url(self):
|
||||
self.assertEqual(
|
||||
zkillboard.alliance_url(12345678),
|
||||
'https://zkillboard.com/alliance/12345678/'
|
||||
)
|
||||
|
||||
def test_corporation_url(self):
|
||||
self.assertEqual(
|
||||
zkillboard.corporation_url(12345678),
|
||||
'https://zkillboard.com/corporation/12345678/'
|
||||
)
|
||||
|
||||
def test_character_url(self):
|
||||
self.assertEqual(
|
||||
zkillboard.character_url(12345678),
|
||||
'https://zkillboard.com/character/12345678/'
|
||||
)
|
||||
|
||||
|
||||
def test_region_url(self):
|
||||
self.assertEqual(
|
||||
zkillboard.region_url(12345678),
|
||||
'https://zkillboard.com/region/12345678/'
|
||||
)
|
||||
|
||||
def test_solar_system_url(self):
|
||||
self.assertEqual(
|
||||
zkillboard.solar_system_url(12345678),
|
||||
'https://zkillboard.com/system/12345678/'
|
||||
)
|
||||
|
||||
334
allianceauth/eveonline/evelinks/tests/test_templatetags.py
Normal file
334
allianceauth/eveonline/evelinks/tests/test_templatetags.py
Normal file
@@ -0,0 +1,334 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from ...models import EveCharacter, EveCorporationInfo, EveAllianceInfo
|
||||
from .. import dotlan, zkillboard, evewho
|
||||
from ...templatetags import evelinks
|
||||
|
||||
|
||||
class TestTemplateTags(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.my_character = EveCharacter.objects.create(
|
||||
character_id=1001,
|
||||
character_name='Bruce Wayne',
|
||||
corporation_id=2001,
|
||||
corporation_name='Dummy Corporation 1',
|
||||
corporation_ticker='DC1',
|
||||
alliance_id=3001,
|
||||
alliance_name='Dummy Alliance 1',
|
||||
alliance_ticker='DA1',
|
||||
)
|
||||
self.my_character_2 = EveCharacter.objects.create(
|
||||
character_id=1002,
|
||||
character_name='Peter Parker',
|
||||
corporation_id=2002,
|
||||
corporation_name='Dummy Corporation 2',
|
||||
corporation_ticker='DC2',
|
||||
)
|
||||
self.my_alliance = EveAllianceInfo.objects.create(
|
||||
alliance_id=3001,
|
||||
alliance_name='Dummy Alliance 1',
|
||||
alliance_ticker='DA1',
|
||||
executor_corp_id=2001
|
||||
)
|
||||
self.my_corporation = EveCorporationInfo(
|
||||
corporation_id=2001,
|
||||
corporation_name='Dummy Corporation 1',
|
||||
corporation_ticker='DC1',
|
||||
member_count=42,
|
||||
alliance=self.my_alliance
|
||||
)
|
||||
|
||||
self.my_region_id = 8001
|
||||
self.my_region_name = 'Southpark'
|
||||
|
||||
self.my_solar_system_id = 9001
|
||||
self.my_solar_system_name = 'Gotham'
|
||||
|
||||
|
||||
def test_evewho_character_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.evewho_character_url(self.my_character),
|
||||
evewho.character_url(self.my_character.character_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_character_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_character_url(self.my_character.character_id),
|
||||
evewho.character_url(self.my_character.character_id),
|
||||
)
|
||||
|
||||
|
||||
def test_evewho_corporation_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.evewho_corporation_url(self.my_character),
|
||||
evewho.corporation_url(self.my_character.corporation_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_corporation_url(self.my_corporation),
|
||||
evewho.corporation_url(self.my_corporation.corporation_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_corporation_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_corporation_url(self.my_character.corporation_id),
|
||||
evewho.corporation_url(self.my_character.corporation_id),
|
||||
)
|
||||
|
||||
|
||||
def test_evewho_alliance_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.evewho_alliance_url(self.my_character),
|
||||
evewho.alliance_url(self.my_character.alliance_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_alliance_url(self.my_character_2),
|
||||
'',
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_alliance_url(self.my_alliance),
|
||||
evewho.alliance_url(self.my_alliance.alliance_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_alliance_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.evewho_alliance_url(self.my_character.alliance_id),
|
||||
evewho.alliance_url(self.my_character.alliance_id),
|
||||
)
|
||||
|
||||
|
||||
# dotlan
|
||||
|
||||
def test_dotlan_corporation_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_corporation_url(self.my_character),
|
||||
dotlan.corporation_url(self.my_character.corporation_name),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_corporation_url(self.my_corporation),
|
||||
dotlan.corporation_url(self.my_corporation.corporation_name),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_corporation_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_corporation_url(self.my_character.corporation_name),
|
||||
dotlan.corporation_url(self.my_character.corporation_name),
|
||||
)
|
||||
|
||||
|
||||
def test_dotlan_alliance_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_alliance_url(self.my_character),
|
||||
dotlan.alliance_url(self.my_character.alliance_name),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_alliance_url(self.my_character_2),
|
||||
'',
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_alliance_url(self.my_alliance),
|
||||
dotlan.alliance_url(self.my_alliance.alliance_name),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_alliance_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_alliance_url(self.my_character.alliance_name),
|
||||
dotlan.alliance_url(self.my_character.alliance_name),
|
||||
)
|
||||
|
||||
def test_dotlan_region_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_region_url(self.my_region_name),
|
||||
dotlan.region_url(self.my_region_name),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_region_url(None),
|
||||
''
|
||||
)
|
||||
|
||||
def test_dotlan_solar_system_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_solar_system_url(self.my_solar_system_name),
|
||||
dotlan.solar_system_url(self.my_solar_system_name),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.dotlan_solar_system_url(None),
|
||||
''
|
||||
)
|
||||
|
||||
|
||||
# zkillboard
|
||||
|
||||
def test_zkillboard_character_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_character_url(self.my_character),
|
||||
zkillboard.character_url(self.my_character.character_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_character_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_character_url(self.my_character.character_id),
|
||||
zkillboard.character_url(self.my_character.character_id),
|
||||
)
|
||||
|
||||
|
||||
def test_zkillboard_corporation_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_corporation_url(self.my_character),
|
||||
zkillboard.corporation_url(self.my_character.corporation_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_corporation_url(self.my_corporation),
|
||||
zkillboard.corporation_url(self.my_corporation.corporation_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_corporation_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_corporation_url(self.my_character.corporation_id),
|
||||
zkillboard.corporation_url(self.my_character.corporation_id),
|
||||
)
|
||||
|
||||
|
||||
def test_zkillboard_alliance_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_alliance_url(self.my_character),
|
||||
zkillboard.alliance_url(self.my_character.alliance_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_alliance_url(self.my_character_2),
|
||||
'',
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_alliance_url(self.my_alliance),
|
||||
zkillboard.alliance_url(self.my_alliance.alliance_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_alliance_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_alliance_url(self.my_character.alliance_id),
|
||||
zkillboard.alliance_url(self.my_character.alliance_id),
|
||||
)
|
||||
|
||||
|
||||
def test_zkillboard_region_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_region_url(self.my_region_id),
|
||||
zkillboard.region_url(self.my_region_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_region_url(None),
|
||||
''
|
||||
)
|
||||
|
||||
|
||||
def test_zkillboard_solar_system_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_solar_system_url(self.my_solar_system_id),
|
||||
zkillboard.solar_system_url(self.my_solar_system_id),
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.zkillboard_solar_system_url(None),
|
||||
''
|
||||
)
|
||||
|
||||
|
||||
# image URLs
|
||||
|
||||
def test_character_portrait_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.character_portrait_url(123),
|
||||
EveCharacter.generic_portrait_url(123)
|
||||
|
||||
),
|
||||
self.assertEqual(
|
||||
evelinks.character_portrait_url(123, 128),
|
||||
EveCharacter.generic_portrait_url(123, 128)
|
||||
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.character_portrait_url(123, 99),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.character_portrait_url(self.my_character),
|
||||
self.my_character.portrait_url()
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.character_portrait_url(None),
|
||||
''
|
||||
)
|
||||
|
||||
|
||||
def test_corporation_logo_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.corporation_logo_url(123),
|
||||
EveCorporationInfo.generic_logo_url(123)
|
||||
),
|
||||
self.assertEqual(
|
||||
evelinks.corporation_logo_url(123, 128),
|
||||
EveCorporationInfo.generic_logo_url(123, 128)
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.corporation_logo_url(123, 99),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.corporation_logo_url(self.my_corporation),
|
||||
self.my_corporation.logo_url()
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.corporation_logo_url(self.my_character),
|
||||
self.my_character.corporation_logo_url()
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.corporation_logo_url(None),
|
||||
''
|
||||
)
|
||||
|
||||
|
||||
def test_alliance_logo_url(self):
|
||||
self.assertEqual(
|
||||
evelinks.alliance_logo_url(123),
|
||||
EveAllianceInfo.generic_logo_url(123)
|
||||
),
|
||||
self.assertEqual(
|
||||
evelinks.alliance_logo_url(123, 128),
|
||||
EveAllianceInfo.generic_logo_url(123, 128)
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.alliance_logo_url(123, 99),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.alliance_logo_url(self.my_alliance),
|
||||
self.my_alliance.logo_url()
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.alliance_logo_url(self.my_character),
|
||||
self.my_character.alliance_logo_url()
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.alliance_logo_url(None),
|
||||
''
|
||||
)
|
||||
self.assertEqual(
|
||||
evelinks.alliance_logo_url(self.my_character_2),
|
||||
''
|
||||
)
|
||||
|
||||
57
allianceauth/eveonline/evelinks/zkillboard.py
Normal file
57
allianceauth/eveonline/evelinks/zkillboard.py
Normal file
@@ -0,0 +1,57 @@
|
||||
# this module generates profile URLs for zKillboard
|
||||
|
||||
from urllib.parse import urljoin, quote
|
||||
|
||||
from . import *
|
||||
|
||||
BASE_URL = 'https://zkillboard.com'
|
||||
|
||||
|
||||
def _build_url(category: str, eve_id: int) -> str:
|
||||
"""return url to profile page for an eve entity"""
|
||||
|
||||
if category == ESI_CATEGORY_ALLIANCE:
|
||||
partial = 'alliance'
|
||||
|
||||
elif category == ESI_CATEGORY_CORPORATION:
|
||||
partial = 'corporation'
|
||||
|
||||
elif category == ESI_CATEGORY_CHARACTER:
|
||||
partial = 'character'
|
||||
|
||||
elif category == ESI_CATEGORY_REGION:
|
||||
partial = 'region'
|
||||
|
||||
elif category == ESI_CATEGORY_SOLARSYSTEM:
|
||||
partial = 'system'
|
||||
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
"Not implemented yet for category:" + category
|
||||
)
|
||||
|
||||
url = urljoin(
|
||||
BASE_URL,
|
||||
'{}/{}/'.format(partial, int(eve_id))
|
||||
)
|
||||
return url
|
||||
|
||||
|
||||
def alliance_url(eve_id: int) -> str:
|
||||
"""url for page about given alliance on zKillboard"""
|
||||
return _build_url(ESI_CATEGORY_ALLIANCE, eve_id)
|
||||
|
||||
def character_url(eve_id: int) -> str:
|
||||
"""url for page about given character on zKillboard"""
|
||||
return _build_url(ESI_CATEGORY_CHARACTER, eve_id)
|
||||
|
||||
def corporation_url(eve_id: int) -> str:
|
||||
"""url for page about given corporation on zKillboard"""
|
||||
return _build_url(ESI_CATEGORY_CORPORATION, eve_id)
|
||||
|
||||
def region_url(eve_id: int) -> str:
|
||||
"""url for page about given region on zKillboard"""
|
||||
return _build_url(ESI_CATEGORY_REGION, eve_id)
|
||||
|
||||
def solar_system_url(eve_id: int) -> str:
|
||||
return _build_url(ESI_CATEGORY_SOLARSYSTEM, eve_id)
|
||||
0
allianceauth/eveonline/templatetags/__init__.py
Normal file
0
allianceauth/eveonline/templatetags/__init__.py
Normal file
286
allianceauth/eveonline/templatetags/evelinks.py
Normal file
286
allianceauth/eveonline/templatetags/evelinks.py
Normal file
@@ -0,0 +1,286 @@
|
||||
# This module defines template tags for evelinks URLs and eve image URLs
|
||||
#
|
||||
# Many tags will work both with their respective eveonline object
|
||||
# and their respective eve entity ID
|
||||
#
|
||||
# Example:
|
||||
# character URL on evewho: {{ my_character|evewho_character_url}}
|
||||
# character URL on evewho: {{ 1456384556|evewho_character_url}}
|
||||
#
|
||||
# For more examples see examples.html
|
||||
#
|
||||
# To add templatetags for additional providers just add the respective
|
||||
# template functions and let them call the generic functions
|
||||
|
||||
from django import template
|
||||
|
||||
from ..models import EveCharacter, EveCorporationInfo, EveAllianceInfo
|
||||
from ..evelinks import evewho, dotlan, zkillboard
|
||||
|
||||
register = template.Library()
|
||||
|
||||
_DEFAULT_IMAGE_SIZE = 32
|
||||
|
||||
|
||||
# generic functions
|
||||
|
||||
def _generic_character_url(
|
||||
provider: object,
|
||||
obj_prop: str,
|
||||
eve_obj: EveCharacter
|
||||
) -> str:
|
||||
"""returns character URL for given provider and object"""
|
||||
my_func = getattr(provider, 'character_url')
|
||||
if isinstance(eve_obj, EveCharacter):
|
||||
return my_func(getattr(eve_obj, obj_prop))
|
||||
|
||||
elif eve_obj is None:
|
||||
return ''
|
||||
|
||||
else:
|
||||
return my_func(eve_obj)
|
||||
|
||||
|
||||
def _generic_corporation_url(
|
||||
provider: object,
|
||||
obj_prop: str,
|
||||
eve_obj: object
|
||||
) -> str:
|
||||
"""returns corporation URL for given provider and object"""
|
||||
my_func = getattr(provider, 'corporation_url')
|
||||
if isinstance(eve_obj, (EveCharacter, EveCorporationInfo)):
|
||||
return my_func(getattr(eve_obj, obj_prop))
|
||||
|
||||
elif eve_obj is None:
|
||||
return ''
|
||||
|
||||
else:
|
||||
return my_func(eve_obj)
|
||||
|
||||
|
||||
def _generic_alliance_url(
|
||||
provider: object,
|
||||
obj_prop: str,
|
||||
eve_obj: object
|
||||
) -> str:
|
||||
"""returns alliance URL for given provider and object"""
|
||||
my_func = getattr(provider, 'alliance_url')
|
||||
|
||||
if isinstance(eve_obj, EveCharacter):
|
||||
if eve_obj.alliance_id:
|
||||
return my_func(getattr(eve_obj, obj_prop))
|
||||
else:
|
||||
return ''
|
||||
|
||||
elif isinstance(eve_obj, EveAllianceInfo):
|
||||
return my_func(getattr(eve_obj, obj_prop))
|
||||
|
||||
elif eve_obj is None:
|
||||
return ''
|
||||
|
||||
else:
|
||||
return my_func(eve_obj)
|
||||
|
||||
|
||||
def _generic_evelinks_url(
|
||||
provider: object,
|
||||
provider_func: str,
|
||||
eve_obj: object
|
||||
) -> str:
|
||||
"""returns evelinks URL for given provider, function and object"""
|
||||
my_func = getattr(provider, provider_func)
|
||||
if eve_obj is None:
|
||||
return ''
|
||||
|
||||
else:
|
||||
return my_func(eve_obj)
|
||||
|
||||
|
||||
# evewho
|
||||
|
||||
@register.filter
|
||||
def evewho_character_url(eve_obj: EveCharacter) -> str:
|
||||
"""generates an evewho URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_character_url(evewho, 'character_id', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def evewho_corporation_url(eve_obj: object) -> str:
|
||||
"""generates an evewho URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_corporation_url(evewho, 'corporation_id', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def evewho_alliance_url(eve_obj: object) -> str:
|
||||
"""generates an evewho URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_alliance_url(evewho, 'alliance_id', eve_obj)
|
||||
|
||||
|
||||
# dotlan
|
||||
|
||||
@register.filter
|
||||
def dotlan_corporation_url(eve_obj: object) -> str:
|
||||
"""generates a dotlan URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity names
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_corporation_url(dotlan, 'corporation_name', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def dotlan_alliance_url(eve_obj: object) -> str:
|
||||
"""generates a dotlan URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity names
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_alliance_url(dotlan, 'alliance_name', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def dotlan_region_url(eve_obj: object) -> str:
|
||||
"""generates a dotlan URL for the given object
|
||||
Works with eve entity names
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_evelinks_url(dotlan, 'region_url', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def dotlan_solar_system_url(eve_obj: object) -> str:
|
||||
"""generates a dotlan URL for the given object
|
||||
Works with eve entity names
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_evelinks_url(dotlan, 'solar_system_url', eve_obj)
|
||||
|
||||
|
||||
#zkillboard
|
||||
|
||||
@register.filter
|
||||
def zkillboard_character_url(eve_obj: EveCharacter) -> str:
|
||||
"""generates a zkillboard URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_character_url(zkillboard, 'character_id', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def zkillboard_corporation_url(eve_obj: object) -> str:
|
||||
"""generates a zkillboard URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_corporation_url(zkillboard, 'corporation_id', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def zkillboard_alliance_url(eve_obj: object) -> str:
|
||||
"""generates a zkillboard URL for the given object
|
||||
Works with allianceauth.eveonline objects and eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_alliance_url(zkillboard, 'alliance_id', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def zkillboard_region_url(eve_obj: object) -> str:
|
||||
"""generates a zkillboard URL for the given object
|
||||
Works with eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_evelinks_url(zkillboard, 'region_url', eve_obj)
|
||||
|
||||
|
||||
@register.filter
|
||||
def zkillboard_solar_system_url(eve_obj: object) -> str:
|
||||
"""generates zkillboard URL for the given object
|
||||
Works with eve entity IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
return _generic_evelinks_url(zkillboard, 'solar_system_url', eve_obj)
|
||||
|
||||
|
||||
# image urls
|
||||
|
||||
|
||||
@register.filter
|
||||
def character_portrait_url(
|
||||
eve_obj: object,
|
||||
size: int = _DEFAULT_IMAGE_SIZE
|
||||
) -> str:
|
||||
"""generates an image URL for the given object
|
||||
Works with EveCharacter objects or character IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
if isinstance(eve_obj, EveCharacter):
|
||||
return eve_obj.portrait_url(size)
|
||||
|
||||
elif eve_obj is None:
|
||||
return ''
|
||||
|
||||
else:
|
||||
try:
|
||||
return EveCharacter.generic_portrait_url(eve_obj, size)
|
||||
except ValueError:
|
||||
return ''
|
||||
|
||||
|
||||
@register.filter
|
||||
def corporation_logo_url(
|
||||
eve_obj: object,
|
||||
size: int = _DEFAULT_IMAGE_SIZE
|
||||
) -> str:
|
||||
"""generates image URL for the given object
|
||||
Works with EveCharacter, EveCorporationInfo objects or corporation IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
if isinstance(eve_obj, EveCorporationInfo):
|
||||
return eve_obj.logo_url(size)
|
||||
|
||||
elif isinstance(eve_obj, EveCharacter):
|
||||
return eve_obj.corporation_logo_url(size)
|
||||
|
||||
elif eve_obj is None:
|
||||
return ''
|
||||
|
||||
else:
|
||||
try:
|
||||
return EveCorporationInfo.generic_logo_url(eve_obj, size)
|
||||
except ValueError:
|
||||
return ''
|
||||
|
||||
|
||||
@register.filter
|
||||
def alliance_logo_url(
|
||||
eve_obj: object,
|
||||
size: int = _DEFAULT_IMAGE_SIZE
|
||||
) -> str:
|
||||
"""generates image URL for the given object
|
||||
Works with EveCharacter, EveAllianceInfo objects or alliance IDs
|
||||
Returns URL or empty string
|
||||
"""
|
||||
if isinstance(eve_obj, EveAllianceInfo):
|
||||
return eve_obj.logo_url(size)
|
||||
|
||||
elif isinstance(eve_obj, EveCharacter):
|
||||
return eve_obj.alliance_logo_url(size)
|
||||
|
||||
elif eve_obj is None:
|
||||
return ''
|
||||
|
||||
else:
|
||||
try:
|
||||
return EveAllianceInfo.generic_logo_url(eve_obj, size)
|
||||
except ValueError:
|
||||
return ''
|
||||
|
||||
84
allianceauth/eveonline/templatetags/examples.html
Normal file
84
allianceauth/eveonline/templatetags/examples.html
Normal file
@@ -0,0 +1,84 @@
|
||||
<!-- This is an example template for the evelinks template tags
|
||||
|
||||
Needs to be called with a context containing three objects:
|
||||
|
||||
- EveCharacter: my_character
|
||||
- EveCorporationInfo: my_corporation
|
||||
- EveAllianceInfo: my_alliance
|
||||
|
||||
-->
|
||||
|
||||
{% extends 'allianceauth/base.html' %}
|
||||
{% load evelinks %}
|
||||
|
||||
{% block page_title %}Evelinks examples{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header text-center">Evelinks templatetags examples</h1>
|
||||
<div class="col-lg-12 container">
|
||||
|
||||
<h2>profile URLs</h2>
|
||||
|
||||
<div class="rows">
|
||||
|
||||
<div class="col-md-4">
|
||||
<h3>evewho</h3>
|
||||
<p><a href="{{ my_character|evewho_character_url}}">character from character object</a></p>
|
||||
<p><a href="{{ my_corporation|evewho_corporation_url}}">corporation form corporation object</a></p>
|
||||
<p><a href="{{ my_character|evewho_corporation_url}}">corporation from charachter object</a></p>
|
||||
<p><a href="{{ my_alliance|evewho_alliance_url}}">alliance from alliance object</a></p>
|
||||
<p><a href="{{ my_character|evewho_alliance_url}}">alliance from character object</a></p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<h3>dotlan</h3>
|
||||
<p><a href="{{ my_character|dotlan_corporation_url}}">corporation form character object</a></p>
|
||||
<p><a href="{{ my_corporation|dotlan_corporation_url}}">corporation form corporation object</a></p>
|
||||
<p><a href="{{ my_character|dotlan_alliance_url}}">alliance from character object</a></p>
|
||||
<p><a href="{{ my_alliance|dotlan_alliance_url}}">alliance from alliance object</a></p>
|
||||
<p><a href="{{ 'Black Rise'|dotlan_region_url}}">region from name string</a></p>
|
||||
<p><a href="{{ 'Tama'|dotlan_solar_system_url}}">solar system from name string</a></p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<h3>zkillboard</h3>
|
||||
<p><a href="{{ my_character|zkillboard_character_url}}">character from character object</a></p>
|
||||
<p><a href="{{ my_character|zkillboard_corporation_url}}">corporation from character object</a></p>
|
||||
<p><a href="{{ my_corporation|zkillboard_corporation_url}}">corporation form corporation object</a></p>
|
||||
<p><a href="{{ my_character|zkillboard_alliance_url}}">alliance from character object</a></p>
|
||||
<p><a href="{{ my_alliance|zkillboard_alliance_url}}">alliance from alliance object</a></p>
|
||||
<p><a href="{{ 10000069|zkillboard_region_url}}">region from ID</a></p>
|
||||
<p><a href="{{ 30002813|zkillboard_solar_system_url}}">solar sytem from ID</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>image URLs</h2>
|
||||
|
||||
<div class="rows">
|
||||
|
||||
<div class="col-md-4">
|
||||
<p>character from ID: <img src="{{ my_character.character_id|character_portrait_url:128}}"></p>
|
||||
<p>character from character object: <img src="{{ my_character|character_portrait_url:128}}"></p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<p>corporation from ID: <img src="{{ my_character.corporation_id|corporation_logo_url:128}}"></p>
|
||||
<p>corporation from character object: <img src="{{ my_character|corporation_logo_url:128}}"></p>
|
||||
<p>corporation from corporation object: <img src="{{ my_corporation|corporation_logo_url:128}}"></p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<p>alliance from ID: <img src="{{ my_character.alliance_id|alliance_logo_url:128}}"></p>
|
||||
<p>alliance from character object: <img src="{{ my_character|alliance_logo_url:128}}"></p>
|
||||
<p>alliance from alliance object: <img src="{{ my_alliance|alliance_logo_url:128}}"></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user