diff --git a/allianceauth/eveonline/evelinks/__init__.py b/allianceauth/eveonline/evelinks/__init__.py index cc9ee19b..2fb4f6b8 100644 --- a/allianceauth/eveonline/evelinks/__init__.py +++ b/allianceauth/eveonline/evelinks/__init__.py @@ -4,14 +4,14 @@ # 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" +_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" diff --git a/allianceauth/eveonline/evelinks/dotlan.py b/allianceauth/eveonline/evelinks/dotlan.py index a1482ef9..ebd0e7bd 100644 --- a/allianceauth/eveonline/evelinks/dotlan.py +++ b/allianceauth/eveonline/evelinks/dotlan.py @@ -2,24 +2,30 @@ from urllib.parse import urljoin, quote -from . import * +from . import ( + _ESI_CATEGORY_ALLIANCE, + _ESI_CATEGORY_CORPORATION, + _ESI_CATEGORY_REGION, + _ESI_CATEGORY_SOLARSYSTEM +) -BASE_URL = 'http://evemaps.dotlan.net' + +_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: + if category == _ESI_CATEGORY_ALLIANCE: partial = 'alliance' - elif category == ESI_CATEGORY_CORPORATION: + elif category == _ESI_CATEGORY_CORPORATION: partial = 'corp' - elif category == ESI_CATEGORY_REGION: + elif category == _ESI_CATEGORY_REGION: partial = 'map' - elif category == ESI_CATEGORY_SOLARSYSTEM: + elif category == _ESI_CATEGORY_SOLARSYSTEM: partial = 'system' else: @@ -28,7 +34,7 @@ def _build_url(category: str, name: str) -> str: ) url = urljoin( - BASE_URL, + _BASE_URL, '{}/{}'.format(partial, quote(str(name).replace(" ", "_"))) ) @@ -37,16 +43,19 @@ def _build_url(category: str, name: str) -> str: def alliance_url(name: str) -> str: """url for page about given alliance on dotlan""" - return _build_url(ESI_CATEGORY_ALLIANCE, name) + 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) + 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) + 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) \ No newline at end of file + return _build_url(_ESI_CATEGORY_SOLARSYSTEM, name) diff --git a/allianceauth/eveonline/evelinks/eveimageserver.py b/allianceauth/eveonline/evelinks/eveimageserver.py new file mode 100644 index 00000000..d3323446 --- /dev/null +++ b/allianceauth/eveonline/evelinks/eveimageserver.py @@ -0,0 +1,129 @@ +from . import ( + _ESI_CATEGORY_ALLIANCE, + _ESI_CATEGORY_CHARACTER, + _ESI_CATEGORY_CORPORATION, + _ESI_CATEGORY_INVENTORYTYPE +) + + +_EVE_IMAGE_SERVER_URL = 'https://images.evetech.net' +_DEFAULT_IMAGE_SIZE = 32 + + +def _eve_entity_image_url( + category: str, + entity_id: int, + size: int = 32, + variant: str = None, + tenant: str = None, +) -> str: + """returns image URL for an Eve Online ID. + Supported categories: alliance, corporation, character, inventory_type + + Arguments: + - category: category of the ID, see ESI category constants + - entity_id: Eve ID of the entity + - size: (optional) render size of the image.must be between 32 (default) and 1024 + - variant: (optional) image variant for category. currently not relevant. + - tenant: (optional) Eve Server, either `tranquility`(default) or `singularity` + + Returns: + - URL string for the requested image on the Eve image server + + Exceptions: + - Throws ValueError on invalid input + """ + + # input validations + categories = { + _ESI_CATEGORY_ALLIANCE: { + 'endpoint': 'alliances', + 'variants': ['logo'] + }, + _ESI_CATEGORY_CORPORATION: { + 'endpoint': 'corporations', + 'variants': ['logo'] + }, + _ESI_CATEGORY_CHARACTER: { + 'endpoint': 'characters', + 'variants': ['portrait'] + }, + _ESI_CATEGORY_INVENTORYTYPE: { + 'endpoint': 'types', + 'variants': ['icon', 'render'] + } + } + tenants = ['tranquility', 'singularity'] + + if not entity_id: + raise ValueError('Invalid entity_id: {}'.format(entity_id)) + else: + entity_id = int(entity_id) + + if not size or size < 32 or size > 1024 or (size & (size - 1) != 0): + raise ValueError('Invalid size: {}'.format(size)) + + if category not in categories: + raise ValueError('Invalid category {}'.format(category)) + else: + endpoint = categories[category]['endpoint'] + + if variant: + if variant not in categories[category]['variants']: + raise ValueError('Invalid variant {} for category {}'.format( + variant, + category + )) + else: + variant = categories[category]['variants'][0] + + if tenant and tenant not in tenants: + raise ValueError('Invalid tenant {}'.format(tenant)) + + # compose result URL + result = '{}/{}/{}/{}?size={}'.format( + _EVE_IMAGE_SERVER_URL, + endpoint, + entity_id, + variant, + size + ) + if tenant: + result += '&tenant={}'.format(tenant) + + return result + + +def alliance_logo_url(alliance_id: int, size: int = _DEFAULT_IMAGE_SIZE) -> str: + """image URL for the given alliance ID""" + return _eve_entity_image_url(_ESI_CATEGORY_ALLIANCE, alliance_id, size) + + +def corporation_logo_url( + corporation_id: int, size: int = _DEFAULT_IMAGE_SIZE +) -> str: + """image URL for the given corporation ID""" + return _eve_entity_image_url( + _ESI_CATEGORY_CORPORATION, corporation_id, size + ) + + +def character_portrait_url( + character_id: int, size: int = _DEFAULT_IMAGE_SIZE +) -> str: + """image URL for the given character ID""" + return _eve_entity_image_url(_ESI_CATEGORY_CHARACTER, character_id, size) + + +def type_icon_url(type_id: int, size: int = _DEFAULT_IMAGE_SIZE) -> str: + """icon image URL for the given type ID""" + return _eve_entity_image_url( + _ESI_CATEGORY_INVENTORYTYPE, type_id, size, variant='icon' + ) + + +def type_render_url(type_id: int, size: int = _DEFAULT_IMAGE_SIZE) -> str: + """render image URL for the given type ID""" + return _eve_entity_image_url( + _ESI_CATEGORY_INVENTORYTYPE, type_id, size, variant='render' + ) diff --git a/allianceauth/eveonline/evelinks/evewho.py b/allianceauth/eveonline/evelinks/evewho.py index 4f96fd4b..57d748ac 100644 --- a/allianceauth/eveonline/evelinks/evewho.py +++ b/allianceauth/eveonline/evelinks/evewho.py @@ -1,22 +1,27 @@ # this module generates profile URLs for evewho -from urllib.parse import urljoin, quote +from urllib.parse import urljoin -from . import * +from . import ( + _ESI_CATEGORY_ALLIANCE, + _ESI_CATEGORY_CORPORATION, + _ESI_CATEGORY_CHARACTER, +) -BASE_URL = 'https://evewho.com' + +_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: + if category == _ESI_CATEGORY_ALLIANCE: partial = 'alliance' - elif category == ESI_CATEGORY_CORPORATION: + elif category == _ESI_CATEGORY_CORPORATION: partial = 'corporation' - elif category == ESI_CATEGORY_CHARACTER: + elif category == _ESI_CATEGORY_CHARACTER: partial = 'character' else: @@ -25,7 +30,7 @@ def _build_url(category: str, eve_id: int) -> str: ) url = urljoin( - BASE_URL, + _BASE_URL, '{}/{}'.format(partial, int(eve_id)) ) return url @@ -33,12 +38,14 @@ def _build_url(category: str, eve_id: int) -> str: def alliance_url(eve_id: int) -> str: """url for page about given alliance on evewho""" - return _build_url(ESI_CATEGORY_ALLIANCE, eve_id) + 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) + 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) + return _build_url(_ESI_CATEGORY_CORPORATION, eve_id) diff --git a/allianceauth/eveonline/evelinks/tests/test_evelinks.py b/allianceauth/eveonline/evelinks/tests/test_evelinks.py index cd69f810..a9baeb93 100644 --- a/allianceauth/eveonline/evelinks/tests/test_evelinks.py +++ b/allianceauth/eveonline/evelinks/tests/test_evelinks.py @@ -1,7 +1,7 @@ from django.test import TestCase from ...models import EveCharacter, EveCorporationInfo, EveAllianceInfo -from .. import dotlan, zkillboard, evewho +from .. import dotlan, zkillboard, evewho, eveimageserver from ...templatetags import evelinks @@ -90,3 +90,115 @@ class TestZkillboard(TestCase): 'https://zkillboard.com/system/12345678/' ) + +class TestEveImageServer(TestCase): + """unit test for eveimageserver""" + + def test_sizes(self): + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42), + 'https://images.evetech.net/characters/42/portrait?size=32' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, size=32), + 'https://images.evetech.net/characters/42/portrait?size=32' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, size=64), + 'https://images.evetech.net/characters/42/portrait?size=64' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, size=128), + 'https://images.evetech.net/characters/42/portrait?size=128' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, size=256), + 'https://images.evetech.net/characters/42/portrait?size=256' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, size=512), + 'https://images.evetech.net/characters/42/portrait?size=512' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, size=1024), + 'https://images.evetech.net/characters/42/portrait?size=1024' + ) + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('corporation', 42, size=-5) + + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('corporation', 42, size=0) + + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('corporation', 42, size=31) + + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('corporation', 42, size=1025) + + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('corporation', 42, size=2048) + + + def test_variant(self): + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, variant='portrait'), + 'https://images.evetech.net/characters/42/portrait?size=32' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('alliance', 42, variant='logo'), + 'https://images.evetech.net/alliances/42/logo?size=32' + ) + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('character', 42, variant='logo') + + + def test_alliance(self): + self.assertEqual( + eveimageserver._eve_entity_image_url('alliance', 42), + 'https://images.evetech.net/alliances/42/logo?size=32' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('corporation', 42), + 'https://images.evetech.net/corporations/42/logo?size=32' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42), + 'https://images.evetech.net/characters/42/portrait?size=32' + ) + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('station', 42) + + + def test_tenants(self): + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, tenant='tranquility'), + 'https://images.evetech.net/characters/42/portrait?size=32&tenant=tranquility' + ) + self.assertEqual( + eveimageserver._eve_entity_image_url('character', 42, tenant='singularity'), + 'https://images.evetech.net/characters/42/portrait?size=32&tenant=singularity' + ) + with self.assertRaises(ValueError): + eveimageserver._eve_entity_image_url('character', 42, tenant='xxx') + + def test_alliance_logo_url(self): + expected = 'https://images.evetech.net/alliances/42/logo?size=128' + self.assertEqual(eveimageserver.alliance_logo_url(42, 128), expected) + + def test_corporation_logo_url(self): + expected = 'https://images.evetech.net/corporations/42/logo?size=128' + self.assertEqual(eveimageserver.corporation_logo_url(42, 128), expected) + + def test_character_portrait_url(self): + expected = 'https://images.evetech.net/characters/42/portrait?size=128' + self.assertEqual( + eveimageserver.character_portrait_url(42, 128), expected + ) + + def test_type_icon_url(self): + expected = 'https://images.evetech.net/types/42/icon?size=128' + self.assertEqual(eveimageserver.type_icon_url(42, 128), expected) + + def test_type_render_url(self): + expected = 'https://images.evetech.net/types/42/render?size=128' + self.assertEqual(eveimageserver.type_render_url(42, 128), expected) \ No newline at end of file diff --git a/allianceauth/eveonline/evelinks/tests/test_templatetags.py b/allianceauth/eveonline/evelinks/tests/test_templatetags.py index 80da287d..4fb8327a 100644 --- a/allianceauth/eveonline/evelinks/tests/test_templatetags.py +++ b/allianceauth/eveonline/evelinks/tests/test_templatetags.py @@ -1,7 +1,7 @@ from django.test import TestCase from ...models import EveCharacter, EveCorporationInfo, EveAllianceInfo -from .. import dotlan, zkillboard, evewho +from .. import eveimageserver, evewho, dotlan, zkillboard from ...templatetags import evelinks @@ -332,3 +332,28 @@ class TestTemplateTags(TestCase): '' ) + def test_type_icon_url(self): + expected = eveimageserver.type_icon_url(123) + self.assertEqual(evelinks.type_icon_url(123), expected) + + expected = eveimageserver.type_icon_url(123, 128) + self.assertEqual(evelinks.type_icon_url(123, 128), expected) + + expected = '' + self.assertEqual(evelinks.type_icon_url(123, 99), expected) + + expected = '' + self.assertEqual(evelinks.type_icon_url(None), expected) + + def test_type_render_url(self): + expected = eveimageserver.type_render_url(123) + self.assertEqual(evelinks.type_render_url(123), expected) + + expected = eveimageserver.type_render_url(123, 128) + self.assertEqual(evelinks.type_render_url(123, 128), expected) + + expected = '' + self.assertEqual(evelinks.type_render_url(123, 99), expected) + + expected = '' + self.assertEqual(evelinks.type_render_url(None), expected) \ No newline at end of file diff --git a/allianceauth/eveonline/evelinks/zkillboard.py b/allianceauth/eveonline/evelinks/zkillboard.py index 44187819..255964b0 100644 --- a/allianceauth/eveonline/evelinks/zkillboard.py +++ b/allianceauth/eveonline/evelinks/zkillboard.py @@ -1,28 +1,35 @@ # this module generates profile URLs for zKillboard -from urllib.parse import urljoin, quote +from urllib.parse import urljoin -from . import * +from . import ( + _ESI_CATEGORY_ALLIANCE, + _ESI_CATEGORY_CORPORATION, + _ESI_CATEGORY_CHARACTER, + _ESI_CATEGORY_REGION, + _ESI_CATEGORY_SOLARSYSTEM +) -BASE_URL = 'https://zkillboard.com' + +_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: + if category == _ESI_CATEGORY_ALLIANCE: partial = 'alliance' - elif category == ESI_CATEGORY_CORPORATION: + elif category == _ESI_CATEGORY_CORPORATION: partial = 'corporation' - elif category == ESI_CATEGORY_CHARACTER: + elif category == _ESI_CATEGORY_CHARACTER: partial = 'character' - elif category == ESI_CATEGORY_REGION: + elif category == _ESI_CATEGORY_REGION: partial = 'region' - elif category == ESI_CATEGORY_SOLARSYSTEM: + elif category == _ESI_CATEGORY_SOLARSYSTEM: partial = 'system' else: @@ -31,7 +38,7 @@ def _build_url(category: str, eve_id: int) -> str: ) url = urljoin( - BASE_URL, + _BASE_URL, '{}/{}/'.format(partial, int(eve_id)) ) return url @@ -39,19 +46,23 @@ def _build_url(category: str, eve_id: int) -> str: def alliance_url(eve_id: int) -> str: """url for page about given alliance on zKillboard""" - return _build_url(ESI_CATEGORY_ALLIANCE, eve_id) + 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) + 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) + 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) + return _build_url(_ESI_CATEGORY_REGION, eve_id) + def solar_system_url(eve_id: int) -> str: - return _build_url(ESI_CATEGORY_SOLARSYSTEM, eve_id) \ No newline at end of file + return _build_url(_ESI_CATEGORY_SOLARSYSTEM, eve_id) diff --git a/allianceauth/eveonline/managers.py b/allianceauth/eveonline/managers.py index 1276736c..ea574189 100644 --- a/allianceauth/eveonline/managers.py +++ b/allianceauth/eveonline/managers.py @@ -89,4 +89,6 @@ class EveCorporationManager(models.Manager): ) def update_corporation(self, corp_id): - return self.get(corporation_id=corp_id).update_corporation(self.provider.get_corporation(corp_id)) + return self\ + .get(corporation_id=corp_id)\ + .update_corporation(self.provider.get_corporation(corp_id)) diff --git a/allianceauth/eveonline/models.py b/allianceauth/eveonline/models.py index a2dc447e..88f32287 100644 --- a/allianceauth/eveonline/models.py +++ b/allianceauth/eveonline/models.py @@ -5,90 +5,9 @@ from .managers import EveCharacterManager, EveCharacterProviderManager from .managers import EveCorporationManager, EveCorporationProviderManager from .managers import EveAllianceManager, EveAllianceProviderManager from . import providers +from .evelinks import eveimageserver - -EVE_IMAGE_SERVER_URL = 'https://images.evetech.net' - - -def _eve_entity_image_url( - category: str, - id: int, - size: int = 32, - variant: str = None, - tenant: str = None, -) -> str: - """returns image URL for an Eve Online ID. - Supported categories: `alliance`, `corporation`, `character` - - Arguments: - - category: category of the ID - - id: Eve ID of the entity - - size: (optional) render size of the image.must be between 32 (default) and 1024 - - variant: (optional) image variant for category. currently not relevant. - - tentant: (optional) Eve Server, either `tranquility`(default) or `singularity` - - Returns: - - URL string for the requested image on the Eve image server - - Exceptions: - - Throws ValueError on invalid input - """ - - # input validations - categories = { - 'alliance': { - 'endpoint': 'alliances', - 'variants': [ - 'logo' - ] - }, - 'corporation': { - 'endpoint': 'corporations', - 'variants': [ - 'logo' - ] - }, - 'character': { - 'endpoint': 'characters', - 'variants': [ - 'portrait' - ] - } - } - tenants = ['tranquility', 'singularity'] - - if size < 32 or size > 1024 or (size & (size - 1) != 0): - raise ValueError('Invalid size: {}'.format(size)) - - if category not in categories: - raise ValueError('Invalid category {}'.format(category)) - else: - endpoint = categories[category]['endpoint'] - - if variant: - if variant not in categories[category]['variants']: - raise ValueError('Invalid variant {} for category {}'.format( - variant, - category - )) - else: - variant = categories[category]['variants'][0] - - if tenant and tenant not in tenants: - raise ValueError('Invalid tentant {}'.format(tenant)) - - # compose result URL - result = '{}/{}/{}/{}?size={}'.format( - EVE_IMAGE_SERVER_URL, - endpoint, - id, - variant, - size - ) - if tenant: - result += '&tenant={}'.format(tenant) - - return result +_DEFAULT_IMAGE_SIZE = 32 class EveAllianceInfo(models.Model): @@ -105,9 +24,13 @@ class EveAllianceInfo(models.Model): for corp_id in alliance.corp_ids: if not EveCorporationInfo.objects.filter(corporation_id=corp_id).exists(): EveCorporationInfo.objects.create_corporation(corp_id) - EveCorporationInfo.objects.filter(corporation_id__in=alliance.corp_ids).update(alliance=self) - EveCorporationInfo.objects.filter(alliance=self).exclude(corporation_id__in=alliance.corp_ids).update( - alliance=None) + EveCorporationInfo.objects.filter( + corporation_id__in=alliance.corp_ids).update(alliance=self + ) + EveCorporationInfo.objects\ + .filter(alliance=self)\ + .exclude(corporation_id__in=alliance.corp_ids)\ + .update(alliance=None) def update_alliance(self, alliance: providers.Alliance = None): if alliance is None: @@ -120,11 +43,13 @@ class EveAllianceInfo(models.Model): return self.alliance_name @staticmethod - def generic_logo_url(alliance_id: int, size: int = 32) -> str: + def generic_logo_url( + alliance_id: int, size: int = _DEFAULT_IMAGE_SIZE + ) -> str: """image URL for the given alliance ID""" - return _eve_entity_image_url('alliance', alliance_id, size) + return eveimageserver.alliance_logo_url(alliance_id, size) - def logo_url(self, size:int = 32) -> str: + def logo_url(self, size: int = _DEFAULT_IMAGE_SIZE) -> str: """image URL of this alliance""" return self.generic_logo_url(self.alliance_id, size) @@ -154,7 +79,9 @@ class EveCorporationInfo(models.Model): corporation_name = models.CharField(max_length=254, unique=True) corporation_ticker = models.CharField(max_length=254) member_count = models.IntegerField() - alliance = models.ForeignKey(EveAllianceInfo, blank=True, null=True, on_delete=models.SET_NULL) + alliance = models.ForeignKey( + EveAllianceInfo, blank=True, null=True, on_delete=models.SET_NULL + ) objects = EveCorporationManager() provider = EveCorporationProviderManager() @@ -174,11 +101,13 @@ class EveCorporationInfo(models.Model): return self.corporation_name @staticmethod - def generic_logo_url(corporation_id: int, size: int = 32) -> str: + def generic_logo_url( + corporation_id: int, size: int = _DEFAULT_IMAGE_SIZE + ) -> str: """image URL for the given corporation ID""" - return _eve_entity_image_url('corporation', corporation_id, size) + return eveimageserver.corporation_logo_url(corporation_id, size) - def logo_url(self, size:int = 32) -> str: + def logo_url(self, size: int = _DEFAULT_IMAGE_SIZE) -> str: """image URL for this corporation""" return self.generic_logo_url(self.corporation_id, size) @@ -253,11 +182,13 @@ class EveCharacter(models.Model): return self.character_name @staticmethod - def generic_portrait_url(character_id: int, size: int = 32) -> str: + def generic_portrait_url( + character_id: int, size: int = _DEFAULT_IMAGE_SIZE + ) -> str: """image URL for the given character ID""" - return _eve_entity_image_url('character', character_id, size) + return eveimageserver.character_portrait_url(character_id, size) - def portrait_url(self, size = 32) -> str: + def portrait_url(self, size=_DEFAULT_IMAGE_SIZE) -> str: """image URL for this character""" return self.generic_portrait_url(self.character_id, size) @@ -281,7 +212,7 @@ class EveCharacter(models.Model): """image URL for this character""" return self.portrait_url(256) - def corporation_logo_url(self, size = 32) -> str: + def corporation_logo_url(self, size=_DEFAULT_IMAGE_SIZE) -> str: """image URL for corporation of this character""" return EveCorporationInfo.generic_logo_url(self.corporation_id, size) @@ -305,7 +236,7 @@ class EveCharacter(models.Model): """image URL for corporation of this character""" return self.corporation_logo_url(256) - def alliance_logo_url(self, size = 32) -> str: + def alliance_logo_url(self, size=_DEFAULT_IMAGE_SIZE) -> str: """image URL for alliance of this character or empty string""" if self.alliance_id: return EveAllianceInfo.generic_logo_url(self.alliance_id, size) diff --git a/allianceauth/eveonline/templatetags/evelinks.py b/allianceauth/eveonline/templatetags/evelinks.py index f19aaddf..bf507965 100644 --- a/allianceauth/eveonline/templatetags/evelinks.py +++ b/allianceauth/eveonline/templatetags/evelinks.py @@ -15,7 +15,7 @@ from django import template from ..models import EveCharacter, EveCorporationInfo, EveAllianceInfo -from ..evelinks import evewho, dotlan, zkillboard +from ..evelinks import eveimageserver, evewho, dotlan, zkillboard register = template.Library() @@ -163,7 +163,7 @@ def dotlan_solar_system_url(eve_obj: object) -> str: return _generic_evelinks_url(dotlan, 'solar_system_url', eve_obj) -#zkillboard +# zkillboard @register.filter def zkillboard_character_url(eve_obj: EveCharacter) -> str: @@ -212,7 +212,6 @@ def zkillboard_solar_system_url(eve_obj: object) -> str: # image urls - @register.filter def character_portrait_url( eve_obj: object, @@ -284,3 +283,30 @@ def alliance_logo_url( except ValueError: return '' + +@register.filter +def type_icon_url( + type_id: int, + size: int = _DEFAULT_IMAGE_SIZE +) -> str: + """generates a icon image URL for the given type ID + Returns URL or empty string + """ + try: + return eveimageserver.type_icon_url(type_id, size) + except ValueError: + return '' + + +@register.filter +def type_render_url( + type_id: int, + size: int = _DEFAULT_IMAGE_SIZE +) -> str: + """generates a render image URL for the given type ID + Returns URL or empty string + """ + try: + return eveimageserver.type_render_url(type_id, size) + except ValueError: + return '' diff --git a/allianceauth/eveonline/tests/test_managers.py b/allianceauth/eveonline/tests/test_managers.py index b07a2cb7..719dcf1b 100644 --- a/allianceauth/eveonline/tests/test_managers.py +++ b/allianceauth/eveonline/tests/test_managers.py @@ -58,23 +58,19 @@ class EveCharacterManagerTestCase(TestCase): @mock.patch('allianceauth.eveonline.managers.providers.provider') def test_update_character(self, provider): # Also covers Model.update_character - existing = EveCharacter.objects.create( + EveCharacter.objects.create( character_id='1234', character_name='character.name', corporation_id='character.corp.id', corporation_name='character.corp.name', - corporation_ticker='character.corp.ticker', + corporation_ticker='abc', alliance_id='character.alliance.id', alliance_name='character.alliance.name', ) expected = self.TestCharacter( - id='1234', - name='Test Character', - corp_id='2345', - alliance_id='3456' + id='1234', name='Test Character', corp_id='2345', alliance_id='3456' ) - provider.get_character.return_value = expected result = EveCharacter.objects.update_character('1234') @@ -94,7 +90,7 @@ class EveCharacterManagerTestCase(TestCase): character_name='character.name', corporation_id='character.corp.id', corporation_name='character.corp.name', - corporation_ticker='character.corp.ticker', + corporation_ticker='abc', alliance_id='character.alliance.id', alliance_name='character.alliance.name', ) @@ -271,7 +267,7 @@ class EveCorporationManagerTestCase(TestCase): EveCorporationInfo.objects.create( corporation_id='2345', corporation_name='corp.name', - corporation_ticker='corp.ticker', + corporation_ticker='abc', member_count=10, alliance=None, ) diff --git a/allianceauth/eveonline/tests/test_models.py b/allianceauth/eveonline/tests/test_models.py index 3813fcab..ebd28b7b 100644 --- a/allianceauth/eveonline/tests/test_models.py +++ b/allianceauth/eveonline/tests/test_models.py @@ -2,103 +2,13 @@ from unittest.mock import Mock, patch from django.test import TestCase -from ..models import EveCharacter, EveCorporationInfo, \ - EveAllianceInfo, _eve_entity_image_url +from ..models import ( + EveCharacter, EveCorporationInfo, EveAllianceInfo +) from ..providers import Alliance, Corporation, Character +from ..evelinks import eveimageserver -class EveUniverseImageUrlTestCase(TestCase): - """unit test for _eve_entity_image_url()""" - - def test_sizes(self): - self.assertEqual( - _eve_entity_image_url('character', 42), - 'https://images.evetech.net/characters/42/portrait?size=32' - ) - self.assertEqual( - _eve_entity_image_url('character', 42, size=32), - 'https://images.evetech.net/characters/42/portrait?size=32' - ) - self.assertEqual( - _eve_entity_image_url('character', 42, size=64), - 'https://images.evetech.net/characters/42/portrait?size=64' - ) - self.assertEqual( - _eve_entity_image_url('character', 42, size=128), - 'https://images.evetech.net/characters/42/portrait?size=128' - ) - self.assertEqual( - _eve_entity_image_url('character', 42, size=256), - 'https://images.evetech.net/characters/42/portrait?size=256' - ) - self.assertEqual( - _eve_entity_image_url('character', 42, size=512), - 'https://images.evetech.net/characters/42/portrait?size=512' - ) - self.assertEqual( - _eve_entity_image_url('character', 42, size=1024), - 'https://images.evetech.net/characters/42/portrait?size=1024' - ) - with self.assertRaises(ValueError): - _eve_entity_image_url('corporation', 42, size=-5) - - with self.assertRaises(ValueError): - _eve_entity_image_url('corporation', 42, size=0) - - with self.assertRaises(ValueError): - _eve_entity_image_url('corporation', 42, size=31) - - with self.assertRaises(ValueError): - _eve_entity_image_url('corporation', 42, size=1025) - - with self.assertRaises(ValueError): - _eve_entity_image_url('corporation', 42, size=2048) - - - def test_variant(self): - self.assertEqual( - _eve_entity_image_url('character', 42, variant='portrait'), - 'https://images.evetech.net/characters/42/portrait?size=32' - ) - self.assertEqual( - _eve_entity_image_url('alliance', 42, variant='logo'), - 'https://images.evetech.net/alliances/42/logo?size=32' - ) - with self.assertRaises(ValueError): - _eve_entity_image_url('character', 42, variant='logo') - - - def test_alliance(self): - - self.assertEqual( - _eve_entity_image_url('alliance', 42), - 'https://images.evetech.net/alliances/42/logo?size=32' - ) - self.assertEqual( - _eve_entity_image_url('corporation', 42), - 'https://images.evetech.net/corporations/42/logo?size=32' - ) - self.assertEqual( - _eve_entity_image_url('character', 42), - 'https://images.evetech.net/characters/42/portrait?size=32' - ) - with self.assertRaises(ValueError): - _eve_entity_image_url('station', 42) - - - def test_tenants(self): - self.assertEqual( - _eve_entity_image_url('character', 42, tenant='tranquility'), - 'https://images.evetech.net/characters/42/portrait?size=32&tenant=tranquility' - ) - self.assertEqual( - _eve_entity_image_url('character', 42, tenant='singularity'), - 'https://images.evetech.net/characters/42/portrait?size=32&tenant=singularity' - ) - with self.assertRaises(ValueError): - _eve_entity_image_url('character', 42, tenant='xxx') - - class EveCharacterTestCase(TestCase): def test_corporation_prop(self): """ @@ -109,7 +19,7 @@ class EveCharacterTestCase(TestCase): character_name='character.name', corporation_id='2345', corporation_name='character.corp.name', - corporation_ticker='character.corp.ticker', + corporation_ticker='abc', alliance_id='character.alliance.id', alliance_name='character.alliance.name', ) @@ -117,7 +27,7 @@ class EveCharacterTestCase(TestCase): expected = EveCorporationInfo.objects.create( corporation_id='2345', corporation_name='corp.name', - corporation_ticker='corp.ticker', + corporation_ticker='abc', member_count=10, alliance=None, ) @@ -125,7 +35,7 @@ class EveCharacterTestCase(TestCase): incorrect = EveCorporationInfo.objects.create( corporation_id='9999', corporation_name='corp.name1', - corporation_ticker='corp.ticker1', + corporation_ticker='abc1', member_count=10, alliance=None, ) @@ -143,13 +53,13 @@ class EveCharacterTestCase(TestCase): character_name='character.name', corporation_id='2345', corporation_name='character.corp.name', - corporation_ticker='character.corp.ticker', + corporation_ticker='abc', alliance_id='character.alliance.id', alliance_name='character.alliance.name', ) with self.assertRaises(EveCorporationInfo.DoesNotExist): - result = character.corporation + character.corporation def test_alliance_prop(self): """ @@ -160,7 +70,7 @@ class EveCharacterTestCase(TestCase): character_name='character.name', corporation_id='2345', corporation_name='character.corp.name', - corporation_ticker='character.corp.ticker', + corporation_ticker='abc', alliance_id='3456', alliance_name='character.alliance.name', ) @@ -192,13 +102,13 @@ class EveCharacterTestCase(TestCase): character_name='character.name', corporation_id='2345', corporation_name='character.corp.name', - corporation_ticker='character.corp.ticker', + corporation_ticker='abc', alliance_id='3456', alliance_name='character.alliance.name', ) with self.assertRaises(EveAllianceInfo.DoesNotExist): - result = character.alliance + character.alliance def test_alliance_prop_none(self): """ @@ -209,7 +119,7 @@ class EveCharacterTestCase(TestCase): character_name='character.name', corporation_id='2345', corporation_name='character.corp.name', - corporation_ticker='character.corp.ticker', + corporation_ticker='abc', alliance_id=None, alliance_name=None, ) @@ -244,15 +154,14 @@ class EveCharacterTestCase(TestCase): # todo: add test cases not yet covered, e.g. with alliance - def test_image_url(self): self.assertEqual( EveCharacter.generic_portrait_url(42), - _eve_entity_image_url('character', 42) + eveimageserver._eve_entity_image_url('character', 42) ) self.assertEqual( EveCharacter.generic_portrait_url(42, 256), - _eve_entity_image_url('character', 42, 256) + eveimageserver._eve_entity_image_url('character', 42, 256) ) def test_portrait_urls(self): @@ -265,30 +174,29 @@ class EveCharacterTestCase(TestCase): ) self.assertEqual( x.portrait_url(), - _eve_entity_image_url('character', 42) + eveimageserver._eve_entity_image_url('character', 42) ) self.assertEqual( x.portrait_url(64), - _eve_entity_image_url('character', 42, size=64) + eveimageserver._eve_entity_image_url('character', 42, size=64) ) self.assertEqual( x.portrait_url_32, - _eve_entity_image_url('character', 42, size=32) + eveimageserver._eve_entity_image_url('character', 42, size=32) ) self.assertEqual( x.portrait_url_64, - _eve_entity_image_url('character', 42, size=64) + eveimageserver._eve_entity_image_url('character', 42, size=64) ) self.assertEqual( x.portrait_url_128, - _eve_entity_image_url('character', 42, size=128) + eveimageserver._eve_entity_image_url('character', 42, size=128) ) self.assertEqual( x.portrait_url_256, - _eve_entity_image_url('character', 42, size=256) + eveimageserver._eve_entity_image_url('character', 42, size=256) ) - def test_corporation_logo_urls(self): x = EveCharacter( character_id='42', @@ -299,30 +207,29 @@ class EveCharacterTestCase(TestCase): ) self.assertEqual( x.corporation_logo_url(), - _eve_entity_image_url('corporation', 123) + eveimageserver._eve_entity_image_url('corporation', 123) ) self.assertEqual( x.corporation_logo_url(256), - _eve_entity_image_url('corporation', 123, size=256) + eveimageserver._eve_entity_image_url('corporation', 123, size=256) ) self.assertEqual( x.corporation_logo_url_32, - _eve_entity_image_url('corporation', 123, size=32) + eveimageserver._eve_entity_image_url('corporation', 123, size=32) ) self.assertEqual( x.corporation_logo_url_64, - _eve_entity_image_url('corporation', 123, size=64) + eveimageserver._eve_entity_image_url('corporation', 123, size=64) ) self.assertEqual( x.corporation_logo_url_128, - _eve_entity_image_url('corporation', 123, size=128) + eveimageserver._eve_entity_image_url('corporation', 123, size=128) ) self.assertEqual( x.corporation_logo_url_256, - _eve_entity_image_url('corporation', 123, size=256) + eveimageserver._eve_entity_image_url('corporation', 123, size=256) ) - def test_alliance_logo_urls(self): x = EveCharacter( character_id='42', @@ -354,27 +261,27 @@ class EveCharacterTestCase(TestCase): x.alliance_id = 987 self.assertEqual( x.alliance_logo_url(), - _eve_entity_image_url('alliance', 987) + eveimageserver._eve_entity_image_url('alliance', 987) ) self.assertEqual( x.alliance_logo_url(128), - _eve_entity_image_url('alliance', 987, size=128) + eveimageserver._eve_entity_image_url('alliance', 987, size=128) ) self.assertEqual( x.alliance_logo_url_32, - _eve_entity_image_url('alliance', 987, size=32) + eveimageserver._eve_entity_image_url('alliance', 987, size=32) ) self.assertEqual( x.alliance_logo_url_64, - _eve_entity_image_url('alliance', 987, size=64) + eveimageserver._eve_entity_image_url('alliance', 987, size=64) ) self.assertEqual( x.alliance_logo_url_128, - _eve_entity_image_url('alliance', 987, size=128) + eveimageserver._eve_entity_image_url('alliance', 987, size=128) ) self.assertEqual( x.alliance_logo_url_256, - _eve_entity_image_url('alliance', 987, size=256) + eveimageserver._eve_entity_image_url('alliance', 987, size=256) ) @@ -456,7 +363,6 @@ class EveAllianceTestCase(TestCase): # potential bug # update_alliance() is only updateting executor_corp_id when object is given - def test_update_alliance_wo_object(self): mock_EveAllianceProviderManager = Mock() mock_EveAllianceProviderManager.get_alliance.return_value = \ @@ -475,11 +381,11 @@ class EveAllianceTestCase(TestCase): ) my_alliance.provider = mock_EveAllianceProviderManager my_alliance.save() - updated_alliance = Alliance( - name='Dummy Alliance 2', - corp_ids=[2004], - executor_corp_id=2004 - ) + Alliance( + name='Dummy Alliance 2', + corp_ids=[2004], + executor_corp_id=2004 + ) my_alliance.update_alliance() my_alliance.refresh_from_db() self.assertEqual(int(my_alliance.executor_corp_id), 2004) @@ -487,15 +393,14 @@ class EveAllianceTestCase(TestCase): # potential bug # update_alliance() is only updateting executor_corp_id nothing else ??? - def test_image_url(self): self.assertEqual( EveAllianceInfo.generic_logo_url(42), - _eve_entity_image_url('alliance', 42) + eveimageserver._eve_entity_image_url('alliance', 42) ) self.assertEqual( EveAllianceInfo.generic_logo_url(42, 256), - _eve_entity_image_url('alliance', 42, 256) + eveimageserver._eve_entity_image_url('alliance', 42, 256) ) def test_logo_url(self): @@ -563,9 +468,7 @@ class EveCorporationTestCase(TestCase): def test_update_corporation_no_object_w_alliance(self): mock_provider = Mock() - mock_provider.get_corporation.return_value = Corporation( - members=87 - ) + mock_provider.get_corporation.return_value = Corporation(members=87) self.my_corp.provider = mock_provider self.my_corp.update_corporation() @@ -585,15 +488,14 @@ class EveCorporationTestCase(TestCase): self.assertEqual(my_corp2.member_count, 8) self.assertIsNone(my_corp2.alliance) - def test_image_url(self): self.assertEqual( EveCorporationInfo.generic_logo_url(42), - _eve_entity_image_url('corporation', 42) + eveimageserver._eve_entity_image_url('corporation', 42) ) self.assertEqual( EveCorporationInfo.generic_logo_url(42, 256), - _eve_entity_image_url('corporation', 42, 256) + eveimageserver._eve_entity_image_url('corporation', 42, 256) ) def test_logo_url(self): @@ -621,4 +523,3 @@ class EveCorporationTestCase(TestCase): self.my_corp.logo_url_256, 'https://images.evetech.net/corporations/2001/logo?size=256' ) - diff --git a/allianceauth/eveonline/tests/test_providers.py b/allianceauth/eveonline/tests/test_providers.py index 2d09c628..fa09c36a 100644 --- a/allianceauth/eveonline/tests/test_providers.py +++ b/allianceauth/eveonline/tests/test_providers.py @@ -1,21 +1,28 @@ import os from unittest.mock import Mock, patch -from bravado.exception import HTTPNotFound, HTTPUnprocessableEntity +from bravado.exception import HTTPNotFound from jsonschema.exceptions import RefResolutionError from django.test import TestCase from . import set_logger -from ..models import EveCharacter, EveCorporationInfo, EveAllianceInfo -from ..providers import ObjectNotFound, Entity, Character, Corporation, \ - Alliance, ItemType, EveProvider, EveSwaggerProvider +from ..providers import ( + ObjectNotFound, + Entity, + Character, + Corporation, + Alliance, + ItemType, + EveProvider, + EveSwaggerProvider +) MODULE_PATH = 'allianceauth.eveonline.providers' SWAGGER_OLD_SPEC_PATH = os.path.join(os.path.dirname( - os.path.abspath(__file__)), 'swagger_old.json' - ) + os.path.abspath(__file__)), 'swagger_old.json' +) set_logger(MODULE_PATH, __file__) @@ -51,7 +58,6 @@ class TestEntity(TestCase): x = Entity() self.assertEqual(repr(x), '') - def test_bool(self): x = Entity(1001) self.assertTrue(bool(x)) @@ -99,7 +105,6 @@ class TestCorporation(TestCase): # should fetch alliance once only self.assertEqual(mock_provider_get_alliance.call_count, 1) - @patch(MODULE_PATH + '.EveSwaggerProvider.get_alliance') def test_alliance_not_defined(self, mock_provider_get_alliance): mock_provider_get_alliance.return_value = None @@ -110,7 +115,6 @@ class TestCorporation(TestCase): Entity(None, None) ) - @patch(MODULE_PATH + '.EveSwaggerProvider.get_character') def test_ceo(self, mock_provider_get_character): my_ceo = Character( @@ -200,7 +204,6 @@ class TestAlliance(TestCase): # should be called once by used corp only self.assertEqual(mock_provider_get_corp.call_count, 2) - @patch(MODULE_PATH + '.EveSwaggerProvider.get_corp') def test_corps(self, mock_provider_get_corp): mock_provider_get_corp.side_effect = TestAlliance._get_corp @@ -253,7 +256,6 @@ class TestCharacter(TestCase): # should call the provider one time only self.assertEqual(mock_provider_get_corp.call_count, 1) - @patch(MODULE_PATH + '.EveSwaggerProvider.get_alliance') @patch(MODULE_PATH + '.EveSwaggerProvider.get_corp') @@ -283,7 +285,6 @@ class TestCharacter(TestCase): self.assertEqual(mock_provider_get_corp.call_count, 1) self.assertEqual(mock_provider_get_alliance.call_count, 1) - def test_alliance_has_none(self): self.my_character.alliance_id = None self.assertEqual(self.my_character.alliance, Entity(None, None)) @@ -343,7 +344,6 @@ class TestEveSwaggerProvider(TestCase): else: raise HTTPNotFound(Mock()) - @staticmethod def esi_get_alliances_alliance_id_corporations(alliance_id): alliances = { @@ -357,7 +357,6 @@ class TestEveSwaggerProvider(TestCase): else: raise HTTPNotFound(Mock()) - @staticmethod def esi_get_corporations_corporation_id(corporation_id): corporations = { @@ -382,7 +381,6 @@ class TestEveSwaggerProvider(TestCase): else: raise HTTPNotFound(Mock()) - @staticmethod def esi_get_characters_character_id(character_id): characters = { @@ -403,7 +401,6 @@ class TestEveSwaggerProvider(TestCase): else: raise HTTPNotFound(Mock()) - @staticmethod def esi_post_characters_affiliation(characters): character_data = { @@ -428,7 +425,6 @@ class TestEveSwaggerProvider(TestCase): else: raise TypeError() - @staticmethod def esi_get_universe_types_type_id(type_id): types = { @@ -446,13 +442,11 @@ class TestEveSwaggerProvider(TestCase): else: raise HTTPNotFound(Mock()) - @patch(MODULE_PATH + '.esi_client_factory') def test_str(self, mock_esi_client_factory): my_provider = EveSwaggerProvider() self.assertEqual(str(my_provider), 'esi') - @patch(MODULE_PATH + '.esi_client_factory') def test_get_alliance(self, mock_esi_client_factory): mock_esi_client_factory.return_value\ @@ -481,7 +475,6 @@ class TestEveSwaggerProvider(TestCase): with self.assertRaises(ObjectNotFound): my_provider.get_alliance(3999) - @patch(MODULE_PATH + '.esi_client_factory') def test_get_corp(self, mock_esi_client_factory): mock_esi_client_factory.return_value\ @@ -508,7 +501,6 @@ class TestEveSwaggerProvider(TestCase): with self.assertRaises(ObjectNotFound): my_provider.get_corp(2999) - @patch(MODULE_PATH + '.esi_client_factory') def test_get_character(self, mock_esi_client_factory): mock_esi_client_factory.return_value\ @@ -536,7 +528,6 @@ class TestEveSwaggerProvider(TestCase): with self.assertRaises(ObjectNotFound): my_provider.get_character(1999) - @patch(MODULE_PATH + '.esi_client_factory') def test_get_itemtype(self, mock_esi_client_factory): mock_esi_client_factory.return_value\ @@ -601,5 +592,3 @@ class TestEveSwaggerProvider(TestCase): self.assertTrue(mock_esi_client_factory.called) self.assertIsNotNone(my_provider._client) self.assertEqual(my_client, 'my_client') - - diff --git a/allianceauth/eveonline/tests/test_tasks.py b/allianceauth/eveonline/tests/test_tasks.py index 161acaeb..2bf18202 100644 --- a/allianceauth/eveonline/tests/test_tasks.py +++ b/allianceauth/eveonline/tests/test_tasks.py @@ -1,10 +1,14 @@ -from unittest.mock import patch, Mock +from unittest.mock import patch from django.test import TestCase from ..models import EveCharacter, EveCorporationInfo, EveAllianceInfo -from ..tasks import update_alliance, update_corp, update_character, \ +from ..tasks import ( + update_alliance, + update_corp, + update_character, run_model_update +) class TestTasks(TestCase): @@ -13,42 +17,33 @@ class TestTasks(TestCase): def test_update_corp(self, mock_EveCorporationInfo): update_corp(42) self.assertEqual( - mock_EveCorporationInfo.objects.update_corporation.call_count, - 1 + mock_EveCorporationInfo.objects.update_corporation.call_count, 1 ) self.assertEqual( - mock_EveCorporationInfo.objects.update_corporation.call_args[0][0], - 42 + mock_EveCorporationInfo.objects.update_corporation.call_args[0][0], 42 ) - - + @patch('allianceauth.eveonline.tasks.EveAllianceInfo') def test_update_alliance(self, mock_EveAllianceInfo): update_alliance(42) self.assertEqual( - mock_EveAllianceInfo.objects.update_alliance.call_args[0][0], - 42 + mock_EveAllianceInfo.objects.update_alliance.call_args[0][0], 42 ) self.assertEqual( - mock_EveAllianceInfo.objects\ - .update_alliance.return_value.populate_alliance.call_count, - 1 + mock_EveAllianceInfo.objects + .update_alliance.return_value.populate_alliance.call_count, 1 ) - @patch('allianceauth.eveonline.tasks.EveCharacter') def test_update_character(self, mock_EveCharacter): update_character(42) self.assertEqual( - mock_EveCharacter.objects.update_character.call_count, - 1 + mock_EveCharacter.objects.update_character.call_count, 1 ) self.assertEqual( - mock_EveCharacter.objects.update_character.call_args[0][0], - 42 + mock_EveCharacter.objects.update_character.call_args[0][0], 42 ) - @patch('allianceauth.eveonline.tasks.update_character') @patch('allianceauth.eveonline.tasks.update_alliance') @patch('allianceauth.eveonline.tasks.update_corp') @@ -89,22 +84,15 @@ class TestTasks(TestCase): self.assertEqual(mock_update_corp.apply_async.call_count, 1) self.assertEqual( - int(mock_update_corp.apply_async.call_args[1]['args'][0]), - 2345 + int(mock_update_corp.apply_async.call_args[1]['args'][0]), 2345 ) self.assertEqual(mock_update_alliance.apply_async.call_count, 1) self.assertEqual( - int(mock_update_alliance.apply_async.call_args[1]['args'][0]), - 3456 + int(mock_update_alliance.apply_async.call_args[1]['args'][0]), 3456 ) self.assertEqual(mock_update_character.apply_async.call_count, 1) self.assertEqual( - int(mock_update_character.apply_async.call_args[1]['args'][0]), - 1234 + int(mock_update_character.apply_async.call_args[1]['args'][0]), 1234 ) - - - - diff --git a/docs/development/tech_docu/api/evelinks.rst b/docs/development/tech_docu/api/evelinks.rst index a8a76779..ff393aab 100644 --- a/docs/development/tech_docu/api/evelinks.rst +++ b/docs/development/tech_docu/api/evelinks.rst @@ -6,6 +6,13 @@ This package generates profile URLs for eve entities on 3rd party websites like Location: ``allianceauth.eveonline.evelinks`` +eveimageserver +=============== + +.. automodule:: allianceauth.eveonline.evelinks.eveimageserver + :members: + :undoc-members: + dotlan ===============