diff --git a/allianceauth/authentication/migrations/0017_remove_fleetup_permission.py b/allianceauth/authentication/migrations/0017_remove_fleetup_permission.py new file mode 100644 index 00000000..819eac7f --- /dev/null +++ b/allianceauth/authentication/migrations/0017_remove_fleetup_permission.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +def remove_permission(apps, schema_editor): + User = apps.get_model('auth', 'User') + ContentType = apps.get_model('contenttypes', 'ContentType') + Permission = apps.get_model('auth', 'Permission') + ct = ContentType.objects.get_for_model(User) + Permission.objects.filter(codename="view_fleetup", content_type=ct, name="view_fleetup").delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('authentication', '0016_ownershiprecord'), + ] + + operations = [ + migrations.RunPython(remove_permission, migrations.RunPython.noop) + ] diff --git a/allianceauth/fleetup/__init__.py b/allianceauth/fleetup/__init__.py deleted file mode 100755 index dfdc4e77..00000000 --- a/allianceauth/fleetup/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'allianceauth.fleetup.apps.FleetupConfig' diff --git a/allianceauth/fleetup/apps.py b/allianceauth/fleetup/apps.py deleted file mode 100644 index 98def790..00000000 --- a/allianceauth/fleetup/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class FleetupConfig(AppConfig): - name = 'allianceauth.fleetup' - label = 'fleetup' diff --git a/allianceauth/fleetup/auth_hooks.py b/allianceauth/fleetup/auth_hooks.py deleted file mode 100644 index 68da2c2a..00000000 --- a/allianceauth/fleetup/auth_hooks.py +++ /dev/null @@ -1,27 +0,0 @@ -from allianceauth.services.hooks import MenuItemHook, UrlHook - -from allianceauth import hooks -from . import urls - - -class FleetUpMenu(MenuItemHook): - def __init__(self): - MenuItemHook.__init__(self, 'Fleet-Up', - 'fa fa-arrow-up fa-fw', - 'fleetup:view', - navactive=['fleetup:']) - - def render(self, request): - if request.user.has_perm('auth.view_fleetup'): - return MenuItemHook.render(self, request) - return '' - - -@hooks.register('menu_item_hook') -def register_menu(): - return FleetUpMenu() - - -@hooks.register('url_hook') -def register_url(): - return UrlHook(urls, 'fleetup', r'^fleetup/') diff --git a/allianceauth/fleetup/managers.py b/allianceauth/fleetup/managers.py deleted file mode 100644 index ca84d196..00000000 --- a/allianceauth/fleetup/managers.py +++ /dev/null @@ -1,189 +0,0 @@ -from django.conf import settings -from django.core.cache import cache -from django.utils import timezone -from datetime import datetime - -import logging -import requests -import hashlib - -logger = logging.getLogger(__name__) - - -class FleetUpManager: - APP_KEY = settings.FLEETUP_APP_KEY - USER_ID = settings.FLEETUP_USER_ID - API_ID = settings.FLEETUP_API_ID - GROUP_ID = settings.FLEETUP_GROUP_ID - BASE_URL = "http://api.fleet-up.com/Api.svc/{}/{}/{}".format(APP_KEY, USER_ID, API_ID) - - TZ = timezone.utc - - def __init__(self): - pass - - @classmethod - def _request_cache_key(cls, url): - h = hashlib.sha1() - h.update(url.encode('utf-8')) - return 'FLEETUP_ENDPOINT_' + h.hexdigest() - - @classmethod - def _cache_until_seconds(cls, cache_until_json): - # Format comes in like "/Date(1493896236163)/" - try: - epoch_ms = int(cache_until_json[6:-2]) - cache_delta = datetime.fromtimestamp(epoch_ms/1000) - datetime.now() - cache_delta_seconds = cache_delta.total_seconds() - if cache_delta_seconds < 0: - return 0 - elif cache_delta_seconds > 3600: - return 3600 - else: - return cache_delta_seconds - except TypeError: - logger.debug("Couldn't convert CachedUntil time, defaulting to 600 seconds") - return 600 - - @classmethod - def get_endpoint(cls, url): - try: - cache_key = cls._request_cache_key(url) - cached = cache.get(cache_key) - if cached: - return cached - - r = requests.get(url) - r.raise_for_status() - - json = r.json() - - if json['Success']: - cache.set(cache_key, json, cls._cache_until_seconds(json['CachedUntilUTC'])) - return json - except requests.exceptions.ConnectionError: - logger.warning("Can't connect to Fleet-Up API, is it offline?!") - except requests.HTTPError: - logger.exception("Error accessing Fleetup API") - return None - - @classmethod - def get_fleetup_members(cls): - url = "{}/GroupCharacters/{}".format(cls.BASE_URL, cls.GROUP_ID) - try: - fmembers = cls.get_endpoint(url) - if not fmembers: - return None - return {row["UserId"]: {"user_id": row["UserId"], - "char_name": row["EveCharName"], - "char_id": row["EveCharId"], - "corporation": row["Corporation"]} for row in fmembers["Data"]} - except (ValueError, UnicodeDecodeError, TypeError): - logger.debug("No fleetup members retrieved.") - return {} - - @classmethod - def get_fleetup_operations(cls): - url = "{}/Operations/{}".format(cls.BASE_URL, cls.GROUP_ID) - foperations = cls.get_endpoint(url) - if foperations is None: - return None - return {row["StartString"]: {"subject": row["Subject"], - "start": timezone.make_aware( - datetime.strptime(row["StartString"], "%Y-%m-%d %H:%M:%S"), cls.TZ), - "end": timezone.make_aware( - datetime.strptime(row["EndString"], "%Y-%m-%d %H:%M:%S"), cls.TZ), - "operation_id": row["OperationId"], - "location": row["Location"], - "location_info": row["LocationInfo"], - "details": row["Details"], - "url": row["Url"], - "doctrine": row["Doctrines"], - "organizer": row["Organizer"]} for row in foperations["Data"]} - - @classmethod - def get_fleetup_timers(cls): - url = "{}/Timers/{}".format(cls.BASE_URL, cls.GROUP_ID) - ftimers = cls.get_endpoint(url) - if not ftimers: - return None - return {row["ExpiresString"]: {"solarsystem": row["SolarSystem"], - "planet": row["Planet"], - "moon": row["Moon"], - "owner": row["Owner"], - "type": row["Type"], - "timer_type": row["TimerType"], - "expires": timezone.make_aware( - datetime.strptime(row["ExpiresString"], "%Y-%m-%d %H:%M:%S"), cls.TZ), - "notes": row["Notes"]} for row in ftimers["Data"]} - - @classmethod - def get_fleetup_doctrines(cls): - url = "{}/Doctrines/{}".format(cls.BASE_URL, cls.GROUP_ID) - fdoctrines = cls.get_endpoint(url) - if not fdoctrines: - return None - return {"fleetup_doctrines": fdoctrines["Data"]} - - @classmethod - def get_fleetup_doctrine(cls, doctrinenumber): - url = "{}/DoctrineFittings/{}".format(cls.BASE_URL, doctrinenumber) - fdoctrine = cls.get_endpoint(url) - if not fdoctrine: - return None - return {"fitting_doctrine": fdoctrine} - - @classmethod - def get_fleetup_fittings(cls): - url = "{}/Fittings/{}".format(cls.BASE_URL, cls.GROUP_ID) - ffittings = cls.get_endpoint(url) - if not ffittings: - return None - return {row["FittingId"]: {"fitting_id": row["FittingId"], - "name": row["Name"], - "icon_id": row["EveTypeId"], - "hull": row["HullType"], - "shiptype": row["ShipType"], - "estimated": row["EstPrice"], - "faction": row["Faction"], - "categories": row["Categories"], - "last_update": - timezone.make_aware( - datetime.strptime(row["LastUpdatedString"], "%Y-%m-%d %H:%M:%S"), cls.TZ)} - for row in ffittings["Data"]} - - @classmethod - def get_fleetup_fitting(cls, fittingnumber): - url = "{}/Fitting/{}".format(cls.BASE_URL, fittingnumber) - try: - ffitting = cls.get_endpoint(url) - if not ffitting: - return None - return {"fitting_data": ffitting["Data"]} - except KeyError: - logger.warning("Failed to retrieve fleetup fitting number %s" % fittingnumber) - return {"fitting_data": {}} - - @classmethod - def get_fleetup_doctrineid(cls, fittingnumber): - url = "{}/Fitting/{}".format(cls.BASE_URL, fittingnumber) - try: - fdoctrineid = cls.get_endpoint(url) - if not fdoctrineid: - return None - return fdoctrineid['Data']['Doctrines'][0]['DoctrineId'] - except (KeyError, IndexError): - logger.debug("Fleetup fitting number %s not in a doctrine." % fittingnumber) - return {} - - @classmethod - def get_fleetup_fitting_eft(cls, fittingnumber): - url = "{}/Fitting/{}/eft".format(cls.BASE_URL, fittingnumber) - try: - ffittingeft = cls.get_endpoint(url) - if not ffittingeft: - return None - return {"fitting_eft": ffittingeft["Data"]["FittingData"]} - except KeyError: - logger.warning("Fleetup fitting eft not found for fitting number %s" % fittingnumber) - return {"fitting_eft": {}} diff --git a/allianceauth/fleetup/templates/fleetup/characters.html b/allianceauth/fleetup/templates/fleetup/characters.html deleted file mode 100644 index 275965ff..00000000 --- a/allianceauth/fleetup/templates/fleetup/characters.html +++ /dev/null @@ -1,48 +0,0 @@ -{% extends "allianceauth/base.html" %} -{% load bootstrap %} -{% load staticfiles %} -{% load i18n %} - -{% block page_title %}Characters - FleetUp{% endblock page_title %} - -{% block content %} -
-{% if perms.auth.corp_stats %} - {% include "fleetup/menu.html" %} -
-
-

{% trans "Characters registered on Fleet-Up.com" %}

-
-
-
-
- - - - - - - - {% for char_name, user_id in member_list %} - - - - - - {% endfor %} -
{% trans "Character" %}{% trans "Corporation" %}Fleet-Up(id)
- - -

{{ user_id.char_name }}

-
-

{{ user_id.corporation }}

-
-

{{ user_id.user_id }}

-
-
-
-
-
-{% endif %} -
-{% endblock content %} diff --git a/allianceauth/fleetup/templates/fleetup/doctrine.html b/allianceauth/fleetup/templates/fleetup/doctrine.html deleted file mode 100644 index 3564356f..00000000 --- a/allianceauth/fleetup/templates/fleetup/doctrine.html +++ /dev/null @@ -1,67 +0,0 @@ -{% extends "allianceauth/base.html" %} -{% load bootstrap %} -{% load staticfiles %} -{% load i18n %} - -{% block page_title %}Doctrine - FleetUp{% endblock page_title %} - -{% block content %} -
- {% include "fleetup/menu.html" %} -
- {% for a, j in doctrine.items %} - {% regroup j.Data|dictsort:"Role" by Role as role_list %} - - {% for Role in role_list %} - -
-
-

{{ Role.grouper }}

-
-
- - - - - - - - - - - {% for item in Role.list %} - - - - - - - - - - {% endfor %} -
{% trans "Name" %}{% trans "Role" %}{% trans "Hull type" %}{% trans "Ship type" %}{% trans "Estimated ISK" %}{% trans "Categories" %}
- - - {{ item.Name }} - - {{ item.Role }} - - {{ item.HullType }} - - {{ item.ShipType }} - - {% load humanize %}{{ item.EstPrice|intword }} - - {% for categories in item.Categories %} - {{ categories }}, - {% endfor %} -
-
-
- {% endfor %} -
- {% endfor %} -
- -{% endblock content %} diff --git a/allianceauth/fleetup/templates/fleetup/doctrinesview.html b/allianceauth/fleetup/templates/fleetup/doctrinesview.html deleted file mode 100644 index c0e47329..00000000 --- a/allianceauth/fleetup/templates/fleetup/doctrinesview.html +++ /dev/null @@ -1,62 +0,0 @@ -{% extends "allianceauth/base.html" %} -{% load bootstrap %} -{% load staticfiles %} -{% load i18n %} - -{% block page_title %}Doctrines - FleetUp{% endblock page_title %} - -{% block content %} -
- {% include "fleetup/menu.html" %} -
- {% if doctrines_list %} - {% for a, j in doctrines_list.items %} - {% regroup j|dictsort:"FolderName" by FolderName as folder_list %} - {% for FolderName in folder_list %} -
-
-
-

{{ FolderName.grouper }}

-
-
- - - - - - - - - {% for item in FolderName.list %} - - - - - - - - {% endfor %} -
{% trans "Name" %}{% trans "Doctrine" %}{% trans "Last updated" %}
- - - {{ item.Name }} - - {{ item.FolderName }} - - {{ item.LastUpdatedString }} -
-
-
-
- {% endfor %} -
- {% endfor %} - - {% else %} -

{% trans "There seems to be no Doctrines in here at the moment!" %}

- {% endif %} -
- - -{% endblock content %} diff --git a/allianceauth/fleetup/templates/fleetup/fitting.html b/allianceauth/fleetup/templates/fleetup/fitting.html deleted file mode 100644 index eff680af..00000000 --- a/allianceauth/fleetup/templates/fleetup/fitting.html +++ /dev/null @@ -1,131 +0,0 @@ -{% extends "allianceauth/base.html" %} -{% load bootstrap %} -{% load staticfiles %} -{% load i18n %} - -{% block page_title %}{% trans "Doctrine - FleetUp" %}{% endblock page_title %} - -{% block content %} -
- {% include "fleetup/menu.html" %} -
-
-
- {% for x, y in fitting_data.items %} -
-
-

{% trans "This fit is part of a doctrine" %}

-
-
- {% for doctrin in y.Doctrines %} -
-

{{ doctrin.Name }}

-
-

{% trans "Role in doctrine:" %} {{ doctrin.Role }}

-
-
-

{% trans "Priority:" %}

-
-
-
-
- {{ doctrin.Priority }}/5 -
-
-
- -
- {% endfor %} -
-
-
-
-

{% trans "Fit categories" %}

-
-
- {% for category in y.Categories %} - {{ category }} - {% endfor %} -
-
- {% endfor %} -
-
-

{% trans "All fits in this Doctrine" %}

-
-
-
- {% for arbit, orbit in doctrines_list.items %} - - {% for fitting in orbit.Data %} - - -

{{ fitting.Name }}

-

{{ fitting.Role }} - {{ fitting.ShipType }}

-
- {% endfor %} - {% endfor %} -
-
-
-
-
-
-
- {% for a, j in fitting_data.items %} -

{{ j.Name }}

-
-
-
- -
-
-

{% trans "Hull:" %} {{ j.HullType }}

-

{% trans "Ship:" %} {{ j.ShipType }}

- {% load humanize %} -

{% trans "Estimated price:" %} {{ j.EstPrice|intword }} ISK

-
- {% regroup j.FittingData by Slot as fitting_list %} - - - - - - {% for Slot in fitting_list %} - - - - {% for item in Slot.list %} - - - - - {% endfor %} - {% endfor %} -
{{ Slot.grouper }}
{{ item.Quantity }}x {{ item.TypeName }}
-
- {% endfor %} -
-
- -
-
-
-

{% trans "EFT/Export" %}

-
-
- {% for data in fitting_eft.items %} - {% autoescape off %} - - {% endautoescape %} - {% endfor %} -
-
-
-
-
-
- -{% endblock content %} diff --git a/allianceauth/fleetup/templates/fleetup/fittingsview.html b/allianceauth/fleetup/templates/fleetup/fittingsview.html deleted file mode 100644 index 265ae3e2..00000000 --- a/allianceauth/fleetup/templates/fleetup/fittingsview.html +++ /dev/null @@ -1,55 +0,0 @@ -{% extends "allianceauth/base.html" %} -{% load bootstrap %} -{% load staticfiles %} -{% load i18n %} - -{% block page_title %}Fittings - FleetUp{% endblock page_title %} - -{% block content %} -
-{% include "fleetup/menu.html" %} -
- {% if fitting_list %} - - - - - - - - - - {% for id, fittings in fitting_list %} - - - - - - - - - - - {% endfor %} -
{% trans "Name" %}{% trans "Hull" %}{% trans "Ship type" %}{% trans "Estimated ISK" %}{% trans "Categories" %}
- - - {{ fittings.name }} - - {{ fittings.hull }} - - {{ fittings.shiptype }} - - {% load humanize %}{{ fittings.estimated|intword }} - - {% for categories in fittings.categories %} - {{ categories }}, - {% endfor %} -
- {% else %} -

{% trans "There seems to be no Fittings in here at the moment!" %}

- {% endif %} -
-
- -{% endblock content %} diff --git a/allianceauth/fleetup/templates/fleetup/index.html b/allianceauth/fleetup/templates/fleetup/index.html deleted file mode 100644 index d4bd8333..00000000 --- a/allianceauth/fleetup/templates/fleetup/index.html +++ /dev/null @@ -1,254 +0,0 @@ -{% extends "allianceauth/base.html" %} -{% load bootstrap %} -{% load staticfiles %} -{% load i18n %} - -{% block page_title %}FleetUp{% endblock page_title %} - -{% block content %} -
-{% include "fleetup/menu.html" %} -
- - -
-
-
- {% if operations_list %} - {% for subject, start in operations_list %} -
-
-

{{ start.subject }}

-
-
- - - - - - - - - - - - - - - -
{% trans "Start" %}{% trans "End" %}
{{ start.start|date:"l d M H:i" }} {% trans "Eve Time" %}{{ start.end|date:"l d M H:i" }} {% trans "Eve Time" %}
-  Local time
-
-
- {{ start.details|linebreaks }} - - - - - - - - - - - - - - -
{% trans "Location" %}{% trans "Doctrine" %}{% trans "Organizer" %}{% trans "URL" %}
- {{ start.location }} - {{ start.location_info }} Dotlan - - {% if start.doctrine %} - {% for doctrine in start.doctrine %} - - {{ doctrine.Name }} - - {% endfor %} - - {% else %} - {% trans "TBA" %} - {% endif %} - - {{ start.organizer }} - - {% ifequal start.url "" %} -
{% trans "No link" %}
- {% else %} - {% trans "External link" %} - {% endifequal %} -
-
-
- {% endfor %} - {% else %} -

{% trans "There seems to be no Operations in the near future." %}

- {% endif %} -
-
-
-
-

{% trans "Current Eve Time:" %}

-
-
-
-
-
- {% if timers_list %} -
-
-

{% trans "Timers" %}

-
-
- - {% for notes, type in timers_list %} - - - - - {% endfor %} -
- {{ type.solarsystem }} - - {{ type.expires|date:"l d M H:i" }} -
-
-
- {% endif %} -
-
-
-
- {% if timers_list %} -
-
-

{% trans "Timers" %}

-
-
-
- - - - - - - - - - {% for notes, type in timers_list %} - - - - - - - - - {% endfor %} -
{% trans "Type" %}{% trans "Structure" %}{% trans "Location" %}{% trans "Expires(EVE-time)" %}{% trans "Owner" %}{% trans "Note" %}
- {% ifequal type.type "Final" %} - - {{ type.type }}{% else %}{{ type.type }}{% endifequal %} - - {{ type.timer_type }} - - {{ type.solarsystem }} - Planet:{{ type.planet }} Moon:{{ type.moon }} - - {{ type.expires|date:"l d M H:i" }} - - {{ type.owner }} - - {{ type.notes }} -
-
-
-
- {% else %} -

{% trans "There seems to be no Timers in the near future." %}

- {% endif %} -
-
-
- -
-
-{% include 'bundles/moment-js.html' with locale=True %} - - - -{% endblock content %} diff --git a/allianceauth/fleetup/templates/fleetup/menu.html b/allianceauth/fleetup/templates/fleetup/menu.html deleted file mode 100644 index d769a218..00000000 --- a/allianceauth/fleetup/templates/fleetup/menu.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} -{% load navactive %} - - diff --git a/allianceauth/fleetup/tests/__init__.py b/allianceauth/fleetup/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/allianceauth/fleetup/tests/test_manager.py b/allianceauth/fleetup/tests/test_manager.py deleted file mode 100644 index faf21ed9..00000000 --- a/allianceauth/fleetup/tests/test_manager.py +++ /dev/null @@ -1,503 +0,0 @@ -from unittest import mock - -import requests_mock -import json -import datetime - -from django.test import TestCase -from django.utils.timezone import make_aware, utc - -from allianceauth.fleetup.managers import FleetUpManager - - -class FleetupManagerTestCase(TestCase): - def setUp(self): - pass - - def test__request_cache_key(self): - - cache_key = FleetUpManager._request_cache_key('testurl') - - self.assertEqual('FLEETUP_ENDPOINT_a39562b6ef5b858220be13d2adb61d3f10cf8d61', - cache_key) - - @mock.patch('allianceauth.fleetup.managers.cache') - @requests_mock.Mocker() - def test_get_endpoint(self, cache, m): - url = "http://example.com/test/endpoint/" - json_data = {'data': "123456", 'CachedUntilUTC': '/Date(1493896236163)/', 'Success': True} - m.register_uri('GET', url, - text=json.dumps(json_data)) - - cache.get.return_value = None # No cached value - - # Act - result = FleetUpManager.get_endpoint(url) - - # Assert - self.assertTrue(cache.get.called) - self.assertTrue(cache.set.called) - args, kwargs = cache.set.call_args - self.assertDictEqual(json_data, args[1]) - - self.assertDictEqual(json_data, result) - - @mock.patch('allianceauth.fleetup.managers.cache') - @requests_mock.Mocker() - def test_get_endpoint_error(self, cache, m): - url = "http://example.com/test/endpoint/" - json_data = {'data': [], 'Success': False} - m.register_uri('GET', url, - text=json.dumps(json_data), - status_code=400) - - cache.get.return_value = None # No cached value - - # Act - result = FleetUpManager.get_endpoint(url) - - # Assert - self.assertTrue(cache.get.called) - self.assertFalse(cache.set.called) - self.assertIsNone(result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_members(self, get_endpoint): - - get_endpoint.return_value = {"Data": [ - { - 'UserId': 1234, - 'EveCharName': 'test_name', - 'EveCharId': 5678, - 'Corporation': 'test_corporation', - } - ]} - - # Act - result = FleetUpManager.get_fleetup_members() - - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], - FleetUpManager.BASE_URL + '/GroupCharacters/' + - FleetUpManager.GROUP_ID) - expected_result = { - 1234: { - 'user_id': 1234, - 'char_name': 'test_name', - 'char_id': 5678, - 'corporation': 'test_corporation', - } - } - self.assertDictEqual(expected_result, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_members() - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': []} - - # Act - result = FleetUpManager.get_fleetup_members() - - # Assert - self.assertDictEqual({}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_operations(self, get_endpoint): - - get_endpoint.return_value = {"Data": [ - { - 'Subject': 'test_operation', - 'StartString': '2017-05-06 11:11:11', - 'EndString': '2017-05-06 12:12:12', - 'OperationId': 1234, - 'Location': 'Jita', - 'LocationInfo': '4-4', - 'Details': 'This is a test operation', - 'Url': 'http://example.com/1234', - 'Doctrines': 'Foxcats', - 'Organizer': 'Example FC' - } - ]} - - # Act - result = FleetUpManager.get_fleetup_operations() - self.maxDiff = None - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], - FleetUpManager.BASE_URL + '/Operations/' + - FleetUpManager.GROUP_ID) - expected_result = { - '2017-05-06 11:11:11': { - 'subject': 'test_operation', - 'start': make_aware(datetime.datetime(2017, 5, 6, 11, 11, 11), utc), - 'end': make_aware(datetime.datetime(2017, 5, 6, 12, 12, 12), utc), - 'operation_id': 1234, - 'location': 'Jita', - 'location_info': '4-4', - 'details': 'This is a test operation', - 'url': 'http://example.com/1234', - 'doctrine': 'Foxcats', - 'organizer': 'Example FC' - } - } - self.assertDictEqual(expected_result, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_operations() - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': []} - - # Act - result = FleetUpManager.get_fleetup_operations() - - # Assert - self.assertDictEqual({}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_timers(self, get_endpoint): - - get_endpoint.return_value = {"Data": [ - { - 'ExpiresString': '2017-05-06 11:11:11', - 'SolarSystem': 'Jita', - 'Planet': '4', - 'Moon': '4', - 'Owner': 'Caldari Navy', - 'Type': 'Caldari Station', - 'TimerType': 'Armor', - 'Notes': 'Burn Jita?' - } - ]} - - # Act - result = FleetUpManager.get_fleetup_timers() - - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], - FleetUpManager.BASE_URL + '/Timers/' + - FleetUpManager.GROUP_ID) - expected_result = { - '2017-05-06 11:11:11': { - 'expires': make_aware(datetime.datetime(2017, 5, 6, 11, 11, 11), utc), - 'solarsystem': 'Jita', - 'planet': '4', - 'moon': '4', - 'owner': 'Caldari Navy', - 'type': 'Caldari Station', - 'timer_type': 'Armor', - 'notes': 'Burn Jita?' - } - } - self.assertDictEqual(expected_result, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_timers() - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': []} - - # Act - result = FleetUpManager.get_fleetup_timers() - - # Assert - self.assertDictEqual({}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_doctrines(self, get_endpoint): - - get_endpoint.return_value = {"Data": [ - { - 'TestData': True - } - ]} - - # Act - result = FleetUpManager.get_fleetup_doctrines() - - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], - FleetUpManager.BASE_URL + '/Doctrines/' + - FleetUpManager.GROUP_ID) - expected_result = { - 'fleetup_doctrines': [{ - 'TestData': True - }] - } - self.assertDictEqual(expected_result, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_doctrines() - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': []} - - # Act - result = FleetUpManager.get_fleetup_doctrines() - - # Assert - self.assertDictEqual({"fleetup_doctrines": []}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_doctrine(self, get_endpoint): - - get_endpoint.return_value = {"Data": [ - { - 'TestData': True - } - ]} - - # Act - result = FleetUpManager.get_fleetup_doctrine(1234) - - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], - FleetUpManager.BASE_URL + '/DoctrineFittings/1234') - expected_result = { - 'fitting_doctrine': {'Data': [{ - 'TestData': True - }]} - } - self.assertDictEqual(expected_result, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_doctrine(1234) - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': []} - - # Act - result = FleetUpManager.get_fleetup_doctrine(1234) - - # Assert - self.assertDictEqual({"fitting_doctrine": {'Data': []}}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_fittings(self, get_endpoint): - - get_endpoint.return_value = {"Data": [ - { - 'FittingId': 1234, - 'Name': 'Foxcat', - 'EveTypeId': 17726, - 'HullType': 'Battleship', - 'ShipType': 'Apocalypse Navy Issue', - 'EstPrice': 500000000, - 'Faction': 'Amarr', - 'Categories': ["Armor", "Laser"], - 'LastUpdatedString': '2017-05-06 11:11:11', - } - ]} - - # Act - result = FleetUpManager.get_fleetup_fittings() - - # Asset - self.assertTrue(get_endpoint.called) - expected_result = { - 1234: { - 'fitting_id': 1234, - 'name': 'Foxcat', - 'icon_id': 17726, - 'hull': 'Battleship', - 'shiptype': 'Apocalypse Navy Issue', - 'estimated': 500000000, - 'faction': 'Amarr', - 'categories': ["Armor", "Laser"], - 'last_update': make_aware(datetime.datetime(2017, 5, 6, 11, 11, 11), utc) - } - } - self.assertDictEqual(expected_result, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_fittings() - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': []} - - # Act - result = FleetUpManager.get_fleetup_fittings() - - # Assert - self.assertDictEqual({}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_fitting(self, get_endpoint): - - get_endpoint.return_value = {"Data": - { - 'FittingData': [{}] - } - } - - # Act - result = FleetUpManager.get_fleetup_fitting(1234) - - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], FleetUpManager.BASE_URL + '/Fitting/1234') - expected_result = { - 'fitting_data': { - 'FittingData': [{}] - } - } - self.assertDictEqual(expected_result, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_fitting(1234) - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': {}} - - # Act - result = FleetUpManager.get_fleetup_fitting(1234) - - # Assert - self.assertDictEqual({"fitting_data": {}}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_doctrineid(self, get_endpoint): - - get_endpoint.return_value = { - "Data": { - 'Doctrines': [{'DoctrineId': 4567}] - } - } - - # Act - result = FleetUpManager.get_fleetup_doctrineid(1234) - - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], FleetUpManager.BASE_URL + '/Fitting/1234') - - self.assertEqual(4567, result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_doctrineid(1234) - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': {}} - - # Act - result = FleetUpManager.get_fleetup_doctrineid(1234) - - # Assert - self.assertDictEqual({}, result) - - @mock.patch('allianceauth.fleetup.managers.FleetUpManager.get_endpoint') - def test_get_fleetup_fitting_eft(self, get_endpoint): - - get_endpoint.return_value = { - "Data": { - 'FittingData': '[Apocalypse Navy Issue, Foxcat]' - } - } - - # Act - result = FleetUpManager.get_fleetup_fitting_eft(1234) - - # Asset - self.assertTrue(get_endpoint.called) - args, kwargs = get_endpoint.call_args - self.assertEqual(args[0], FleetUpManager.BASE_URL + '/Fitting/1234/eft') - - self.assertDictEqual({"fitting_eft": '[Apocalypse Navy Issue, Foxcat]'}, - result) - - # Test None response - # Arrange - get_endpoint.return_value = None - - # Act - result = FleetUpManager.get_fleetup_fitting_eft(1234) - - # Assert - self.assertIsNone(result) - - # Test Empty response - # Arrange - get_endpoint.return_value = {'Data': {}} - - # Act - result = FleetUpManager.get_fleetup_fitting_eft(1234) - - # Assert - self.assertDictEqual({"fitting_eft": {}}, result) diff --git a/allianceauth/fleetup/urls.py b/allianceauth/fleetup/urls.py deleted file mode 100644 index 1e2b06df..00000000 --- a/allianceauth/fleetup/urls.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.conf.urls import url - -from . import views - -app_name = 'fleetup' - -urlpatterns = [ - url(r'^$', views.fleetup_view, name='view'), - url(r'^fittings/$', views.fleetup_fittings, name='fittings'), - url(r'^fittings/(?P[0-9]+)/$', views.fleetup_fitting, name='fitting'), - url(r'^doctrines/$', views.fleetup_doctrines, name='doctrines'), - url(r'^characters/$', views.fleetup_characters, name='characters'), - url(r'^doctrines/(?P[0-9]+)/$', views.fleetup_doctrine, name='doctrine'), -] diff --git a/allianceauth/fleetup/views.py b/allianceauth/fleetup/views.py deleted file mode 100644 index 893bc7a1..00000000 --- a/allianceauth/fleetup/views.py +++ /dev/null @@ -1,112 +0,0 @@ -import datetime -import logging - -from django.contrib import messages -from django.contrib.auth.decorators import login_required -from django.contrib.auth.decorators import permission_required -from django.shortcuts import render -from django.template.defaulttags import register -from django.utils.translation import ugettext_lazy as _ - -from .managers import FleetUpManager - -logger = logging.getLogger(__name__) - - -@register.filter -def get_item(dictionary, key): - return dictionary.get(key) - - -@login_required -@permission_required('auth.view_fleetup') -def fleetup_view(request): - logger.debug("fleetup_view called by user %s" % request.user) - - operations_list = FleetUpManager.get_fleetup_operations() - if operations_list is None: - messages.add_message(request, messages.ERROR, _("Failed to get operations list, contact your administrator")) - operations_list = {} - timers_list = FleetUpManager.get_fleetup_timers() - if timers_list is None: - messages.add_message(request, messages.ERROR, _("Failed to get timers list, contact your administrator")) - timers_list = {} - now = datetime.datetime.now().strftime('%H:%M:%S') - - context = {"timers_list": sorted(timers_list.items()), - "operations_list": sorted(operations_list.items()), - "now": now} - - return render(request, 'fleetup/index.html', context=context) - - -@login_required -@permission_required('auth.human_resources') -@permission_required('auth.view_fleetup') -def fleetup_characters(request): - logger.debug("fleetup_characters called by user %s" % request.user) - - member_list = FleetUpManager.get_fleetup_members() - if member_list is None: - messages.add_message(request, messages.ERROR, _("Failed to get member list, contact your administrator")) - member_list = {} - - context = {"member_list": sorted(member_list.items())} - - return render(request, 'fleetup/characters.html', context=context) - - -@login_required -@permission_required('auth.view_fleetup') -def fleetup_fittings(request): - logger.debug("fleetup_fittings called by user %s" % request.user) - fitting_list = FleetUpManager.get_fleetup_fittings() - - if fitting_list is None: - messages.add_message(request, messages.ERROR, _("Failed to get fitting list, contact your administrator")) - fitting_list = {} - - context = {"fitting_list": sorted(fitting_list.items())} - return render(request, 'fleetup/fittingsview.html', context=context) - - -@login_required -@permission_required('auth.view_fleetup') -def fleetup_fitting(request, fittingnumber): - logger.debug("fleetup_fitting called by user %s" % request.user) - fitting_eft = FleetUpManager.get_fleetup_fitting_eft(fittingnumber) - fitting_data = FleetUpManager.get_fleetup_fitting(fittingnumber) - doctrinenumber = FleetUpManager.get_fleetup_doctrineid(fittingnumber) - doctrines_list = FleetUpManager.get_fleetup_doctrine(doctrinenumber) - - if fitting_eft is None or fitting_data is None or doctrinenumber is None: - messages.add_message(request, messages.ERROR, _("There was an error getting some of the data for this fitting. " - "Contact your administrator")) - - context = {"fitting_eft": fitting_eft, - "fitting_data": fitting_data, - "doctrines_list": doctrines_list} - return render(request, 'fleetup/fitting.html', context=context) - - -@login_required -@permission_required('auth.view_fleetup') -def fleetup_doctrines(request): - logger.debug("fleetup_doctrines called by user %s" % request.user) - doctrines_list = FleetUpManager.get_fleetup_doctrines() - if doctrines_list is None: - messages.add_message(request, messages.ERROR, _("Failed to get doctrines list, contact your administrator")) - - context = {"doctrines_list": doctrines_list} - return render(request, 'fleetup/doctrinesview.html', context=context) - - -@login_required -@permission_required('auth.view_fleetup') -def fleetup_doctrine(request, doctrinenumber): - logger.debug("fleetup_doctrine called by user %s" % request.user) - doctrine = FleetUpManager.get_fleetup_doctrine(doctrinenumber) - if doctrine is None: - messages.add_message(request, messages.ERROR, _("Failed to get doctine, contact your administrator")) - context = {"doctrine": doctrine} - return render(request, 'fleetup/doctrine.html', context=context) diff --git a/docs/features/fleetup.md b/docs/features/fleetup.md deleted file mode 100644 index a846fb0b..00000000 --- a/docs/features/fleetup.md +++ /dev/null @@ -1,18 +0,0 @@ -# Fleetup - -## Installation - -Add `'allianceauth.fleetup',` to your auth project's `INSTALLED_APPS` list. - -Additional settings are required. Append the following settings to the end of your auth project's settings file and fill them out. - - FLEETUP_APP_KEY = '' # The app key from http://fleet-up.com/Api/MyApps - FLEETUP_USER_ID = '' # The user id from http://fleet-up.com/Api/MyKeys - FLEETUP_API_ID = '' # The API id from http://fleet-up.com/Api/MyKeys - FLEETUP_GROUP_ID = '' # The id of the group you want to pull data from, see http://fleet-up.com/Api/Endpoints#groups_mygroupmemberships - -Once filled out restart Gunicorn and Celery. - -## Permissions - -The Fleetup module is only visible to users with the `auth | user | view_fleeup` permission. diff --git a/tests/settings.py b/tests/settings.py index b0304290..2eb84521 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -24,7 +24,6 @@ INSTALLED_APPS += [ 'allianceauth.optimer', 'allianceauth.corputils', 'allianceauth.fleetactivitytracking', - 'allianceauth.fleetup', 'allianceauth.permissions_tool', 'allianceauth.services.modules.mumble', 'allianceauth.services.modules.discord', @@ -174,19 +173,6 @@ SEAT_XTOKEN = 'tokentokentoken' ###################################### SMF_URL = '' -###################################### -# Fleet-Up Configuration -###################################### -# FLEETUP_APP_KEY - The app key from http://fleet-up.com/Api/MyApps -# FLEETUP_USER_ID - The user id from http://fleet-up.com/Api/MyKeys -# FLEETUP_API_ID - The API id from http://fleet-up.com/Api/MyKeys -# FLEETUP_GROUP_ID - The id of the group you want to pull data from, see http://fleet-up.com/Api/Endpoints#groups_mygroupmemberships -###################################### -FLEETUP_APP_KEY = '' -FLEETUP_USER_ID = '' -FLEETUP_API_ID = '' -FLEETUP_GROUP_ID = '' - PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.MD5PasswordHasher', ]