# packages

pkgId: 67ff18a8724f4736ccd3b50446888db786b3e3a3e36544dfbe4f65a1678a388b
name: python-aa-buybackprogram
arch: src
version: 2.2.0
epoch: 0
release: 1
summary: Buyback program plugin app for Alliance Auth.
url: https://gitlab.com/paulipa/allianceauth-buyback-program
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-buybackprogram-2.2.0-1.src.rpm
checksum_type: sha256
description:
  An Alliance Auth app for creating buyback programs and to allow users calculate prices for buyback contracts. Designed to be very transparent for the user and fast to use for the managers.

  [![pipeline](https://gitlab.com/paulipa/allianceauth-buyback-program/badges/master/pipeline.svg)](https://gitlab.com/paulipa/allianceauth-buyback-program/-/commits/master)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![chat](https://img.shields.io/discord/790364535294132234)](https://discord.gg/zmh52wnfvM)



  - [Images](#images)
  - [Features](#features)
  - [Installation](#installation)
  - [Program Settings](#program-settings)
  - [Change Log](CHANGELOG.md)



  ![buyback_programs](/uploads/5ed1638501915e936d2e8177f4580da1/buyback_programs.png)
  ![item_details](/uploads/d124c70b15b36490c79b907fa25f768d/item_details.png)
  ![calculator](/uploads/47726510c6d6effa0e856e5ad5ca1688/calculator.png)
  ![program_statics](/uploads/e370ec69a3d050ecff4c4e7a19ec8849/program_statics.png)



  - Multiple programs with their own settings
  - Multiple owners
  - Supports corporation and character owners
  - Flexible program settings:
    - Allow all items
    - Allow only specific items
    - Custom location names
    - Global program tax
    - Item specified tax
    - Hauling fuel cost
    - Dynamic low price density tax
    - NPC price for NPC buy orders
  - Best price variant for ore:
    - Supports raw, compressed, refined and any combination of the 3.
    - Will calculate price by the best available pricing method
  - Allow / disallow unpacked items
  - Restrict program to:
    - States
    - Groups
    - Open for everyone
  - Personal buyback static tracking for:
    - Outstanding contracts
    - Finished contracts
  - Program tracking for owners:
    - Outstanding contracts
    - Total bought value
  - Contract abuse checker and notifications
    - Check if items do not match the calculated contract
    - Check if price does not match the calculated contract
    - Check if contract is made at wrong location
    - Check if contract is made incorrectly to corporation or character
    - Check extra characters in contract title
    - Check if contract contains donations
    - Check for scam contracts mimicing buyback contracts
  - Contract tracking history
  - Supports base price sources from:
    - [Fuzzwork API](https://market.fuzzwork.co.uk/api/)
    - [Janice API](https://janice.e-351.com/api/rest/docs/index.html)
    - Use buy, sell or split price as source
    - Use 5% top average or instant prices for source
  - Supports discord notifications
    - Notifications for accepted contracts
    - Notifications for new contracts
    - For [aa-discordbot](https://github.com/pvyParts/allianceauth-discordbot)
    - For [discordproxy](https://gitlab.com/ErikKalkoken/discordproxy)





  1. Buyback program is a plugin for Alliance Auth. If you don't have Alliance Auth running already, please install it first before proceeding. (see the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/auth/allianceauth/) for details)
  1. Buyback program needs the app [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse) to function. Please make sure it is installed, before before continuing.



  1. Activate your venv ```source /home/allianceserver/venv/auth/bin/activate```
  1. Install the plugin ```pip install aa-buybackprogram```
  1. Add ```'buybackprogram',``` into your settings/local.py installed apps section
  1. Run migrations ```python manage.py migrate```
  1. Collect static files ```python manage.py collectstatic```
  1. Reload supervisor



  Update the Eve Online API app used for authentication in your AA installation to include the following scopes:

  - `esi-contracts.read_character_contracts.v1`
  - `esi-contracts.read_corporation_contracts.v1`
  - `esi-universe.read_structures.v1`



  Buybackprogram requires a lot of data to function as it is designed to allow your clients to sell you any items that exists in EVE. For this reason pre-loading all the date will take a while. Data pre-loading is used to decrease the amount of API calls made to type and price fetches.



  To load type data run the command ```python manage.py buybackprogram_load_data```. This will start the preload of all `EveType`, `SolarSystem`, `EveMarketGroup` and `EveTypeMaterial` objects.

  You can follow the progress of the load from your auth dashboard. This task can spike up easily over 100.000 tasks at a time so it is very normal that the queue grows very large while running this task.

  > :warning: You will need to wait for the type data to load up before you can start to use the plugin. Trying to adjust program settings while the required data has not been yet loaded may result in failure of adjusting the settings.



  After you have preloaded the type data you can preload price data into the database. Price data preloading is not mandatory but will speed up the first buyback calculations.

  > :information_source: If price information is not found for items when the prices are calculated the first time the prices for that item will be fetched during the calculation process. This will increase the calculation time for the contract.

  To preload price data run ```python manage.py buybackprogram_load_prices```



  Buyback program requires a few periodic tasks to operate and update its data.

  Buybackprogram is designed to use locally stored prices to speed up the price calculations. It is important that you have the price update task in your periodic tasks so that your prices will update.

  By adding the following lines in your `local.py` setting file the program will update the stored item prices at midnight. This same task is also responsible for maintenance tasks such as removing unlinked tracking objects. It will also check for any new contracts and update the statistics page with them every 30 minutes:

  ```python

  CELERYBEAT_SCHEDULE['buybackprogram_update_all_prices'] = {
      'task': 'buybackprogram.tasks.update_all_prices',
      'schedule': crontab(minute=0, hour='0'),
  }


  CELERYBEAT_SCHEDULE['buybackprogram_update_all_contracts'] = {
      'task': 'buybackprogram.tasks.update_all_contracts',
      'schedule': crontab(minute='*/30'),
  }


  CELERYBEAT_SCHEDULE['buybackprogram_update_program_performance'] = {
      'task': 'buybackprogram.tasks.update_program_performance',
      'schedule': crontab(minute=0, hour='0'),
  }
  ```



  You may change the following settings by adding the lines in your `local.py` setting files

  Name | Description | Default | Options
  -- | -- | -- | --
  BUYBACKPROGRAM_TRACKING_PREFILL | This is the prefill tag you will have on the tracking description for your contracts | aa-bbp. | Free text input
  BUYBACKPROGRAM_PRICE_SOURCE_ID | Station ID for fetching base prices. Supports IDs listed on [Fuzzwork API](https://market.fuzzwork.co.uk/api/). Does not work with Janice API!| 60003760 | See ID list
  BUYBACKPROGRAM_PRICE_SOURCE_NAME | Display name of your price source. Has no effect on the actual price fetch which uses the ID. | Jita | Free text input
  BUYBACKPROGRAM_PRICE_AGE_WARNING_LIMIT | Limit in hours when an item price is considered as outdated | 48
  BUYBACKPROGRAM_PRICE_METHOD | By default Fuzzwork API will be used for pricing, if this is set to "Janice" then the Janice API will be used. | Fuzzwork | `Fuzzwork`, `Janice`
  BUYBACKPROGRAM_PRICE_INSTANT_PRICES | On default we use top 5% average prices. Set to `true` to change to instant prices | False | `False`, `True`
  BUYBACKPROGRAM_PRICE_JANICE_API_KEY | The API key to access Janice API. | `null` | `G9KwKq3465588VPd6747t95Zh94q3W2E`
  BUYBACKPROGRAM_UNUSED_TRACKING_PURGE_LIMIT | Time limit to remove unlinked tracking objects from the database. Set to 0 to never purge any tracking objects. | 48 | Any number in hours
  BUYBACKPROGRAM_TRACK_PREFILL_CONTRACTS | Determines if we will track and store contracts that starts with the prefill phrase but do not have any actual tracking hits in database | True | `True`, `False`

  Note: If you change your price source for an old install you need to wait for the price update task to run or manually run it to update your current database prices.

  Note: Using Janice API, Jita 4-4 prices will be used with the top 5% average price of the 5 day median price for buy and sell orders. No other price sources can be used with Janice



  Overview of all permissions in this program. Note that all permissions are in the "general" section.

  Name | Purpose | Example Target Audience
  -- | -- | --
  basic_access | Can access this app and see own statics. Can use buyback programs that are allowed by the buyback restriction rules. | Member State
  manage_programs | Can create new locations and buyback programs and manage their own buyback programs. Can see own buyback programs statics. | Buyback managers
  see_leaderboard | Can see the leaderboard stats for the programs that are visible for the user | Member State
  see_performance | Can see the performance stats for the programs that are visible to the user | Member / Managers
  see_all_statics | Can see all statistics in all buyback programs | Leadership



  After you have preloaded all the needed data you can start to setup programs.

  Each user with `manage_programs` permission is able to setup their own buyback programs.



  Each buyback program is operated by a manager. To add a new manager click on the `setup manager` button.



  Each buyback program operates at a location that is constructed of `SolarSystem` and a `Custom name` and an optional `Structure ID`. To add a new location click on the `add location` button on the buyback page.



  Find a solar system by typing in the solar system box. Then determine a name for the structure. Most often you want to use the actual in-game name of the structure so that people are able to identify the location.

  The solar system name will indicate your sellers where the program contract structure is located. The name will describe the structure name in where the contracts should be created and most often should be identical to the actual structure name in-game.



  Structure ID is optional and will enable contract location tracking in the program statistics page. If a program location has been given a structure ID the statistics page will display a warning if the user has made the actual contract from some other structure than the one that was determined in the buyback program.

  The easiest way to find the actual structure id is to link the structure name into any chat box and post the structure name into the chat. This can be done in any channel or the structure name can be also copied from any MOTDs.

  After you have posted the structure name in the chat right click it and press copy. You can now paste the structure into notepad or any other text editor and your output should look like this:

  ```plain
  [17:37:54] Ikarus Cesaille > <url=showinfo:35826//1037962518481>Oisio - LinkNet Central Station</url> `
  ```

  The unique structure ID for your structure is then `1037962518481`. Adding the ID to the location ID field will check if the contract creation location matches this ID.



  Once you have created a location and added at least one manager you can setup the actual program. Click on the `create program` button to create a new program.



  Each program can be customized based on your needs. When setting up select the settings you wish to use.



  A display name for your program



  This is the character or the characters corporation which will be used as the assign to target for buyback contracts at this location. To add more owners use the `add manager` button. You can only see your own characters.



  If you wish that the contracts are assigned to the owners corporation instead of the character tick this box.



  The location where contracts should be created at. Only these locations are accepted



  Expiration time the contracts should bet set to.



  You can select what price type is used as the base price for your calculations. You can select from either buy, sell or split prices.



  This is a general tax which is applied on all items in this program. If you wish to not allow all items in this program you can leave this to 0.

  General tax is applied on all items sold via the buyback. You can add additional taxes on individual items or ban them from being accepted to the program once you have created the program.



  You can add a fuel cost expense that is applied on each item sold via this program based on the volume of the item.

  > :information_source: This setting is aimed more to null sec buyback programs to make it easier to calculate your taxes and display your members the expenses you have when selling.



  You can use a price density modifier which will add a additional tax on items with low price per volume ratio such as T1 ships.

  > :information_source: This setting is aimer more at high sec buyback programs.



  Using this setting will calculate all items that can be compressed (mainly ore and ice) based on the compressed variant volume and use this volume instead of the raw volume to calculate the hauling and price dencity costs. This setting is mainly aimed at null sec where you might get raw ore sold to you but want to compress it before shipping as raw ore volume is very high and will cause high hauling costs.



  This is the lowest isk/m^3 ratio for items that are accepted to the program without the price density tax. Finding your own limits depends on your logistical department.

  For example: Tritanium is 500 ISK/m³ @ 5 ISK per unit price. PLEX is 14,5Trillion ISK/m³ @2.9M per unit price.



  This is the tax which will be applied to items with a price density below the price density threshold

  > :warning: You should avoid using both the hauling fuel cost and the price density modifier at the same time as their function is fairly similar.



  If you wish to allow any types of items to be sold via this program keep this box ticker.

  You can determine individual increased taxes or ban items from being accepted to this program after creating the program.

  If you do not want to accept all items you can set this box to False. By doing this you will need to set up a tax for each item you wish to accept into the program individually.



  Ore type items such as asteroid, moon goo and ice have additional pricing methods you can use. You can use a mix of any of the three pricing models.

  > :information_source: When using more than one pricing model the best price will be used as the buy value.



  If you wish to calculate ore buyback value based on the mineral values tick this box.



  If you want to use compressed value as a pricing method tick this box.



  If you want to use raw ore value as a pricing method you can tick this box. Note that some ores such as Kernite and Moon Goo do not represent the real mineral value of the ores.

  You can also individually ban raw ore types from the program. If you have an other option than the raw ore value selected the price will be calculated based on the other pricing models.



  Most often you want to buy only items that are packed. This will ensure that people do not sell items such as broken ammo crystals for you.



  The refining rate is used in combination with the use refined value option.



  If you cant to use NPC buy order prices for blue loot (Sleeper loot) instead of Jita prices check this box. NPC price for these items will always be used even when Jita price would be higher.



  If you cant to use NPC buy order prices for red loot (Triglavian loot) instead of Jita prices check this box. NPC price for these items will always be used even when Jita price would be higher.



  You can restrict the visibility of the buyback programs to groups and states with the restriction options.

  If no options are selected the program will be visible for everyone with the `basic_access` role.

  > :no_entry: Do not mix group and state restrictions as this may lead into logic error. If you need to mix then create a separate programs for them.



  If you want to receive messages over discord for every new contract you can tick this box.

  > :information_source: Requires the [aa-discordbot plugin](https://github.com/pvyParts/allianceauth-discordbot) or [discordproxy app](https://gitlab.com/ErikKalkoken/discordproxy) to work



  This option will determine if a list of all contract items is added into the discord message description field. If you are accepting all items the list may become very long. If set to false will show a link to the tracking page instead.



  You can send notifications about new contracts directly into the discord channel which is linked to AUTH,

  > :information_source: Requires the [aa-discordbot plugin](https://github.com/pvyParts/allianceauth-discordbot) or [discordproxy app](https://gitlab.com/ErikKalkoken/discordproxy) to work



  You can modify individual item settings or allow items for a program that has set `allow all items = False` via the `special taxes` menu for each program.

  Set a item specific tax for each item. The tax wil be applied on top of the default tax for the program. You can also disallow an item from being accepted in the contract completely.

  > :information_source: The item specific tax can also be a negative value allowing you to decrease taxes on certain items.

  To adjust individual item taxes inside a program click on the `Special taxes` button next to your program.

  You can either add items one by one with the `add item` button or add all items that belongs to a market group and every sub-child market group of that group with `add market group`

  You can edit an item on the taxation table simply by adding it again. To delete the item press the delete button next to it or to delete all items in the program click on the delete all items button.



  When you add an market group each item inside that market group, the child of the market group and the child of the child group will be added to the item taxes (3 steps down)

  The easiest way to check which items are under which market group is to open the market window in-game or third party programs such as [https://evemarketer.com/](https://evemarketer.com/)

  Example:

  Market group `Minerals` is the bottom market group that includes the standard minerals. Adding this market group to the taxation will add 8 items to the taxes (Tritanium, Pyerite etc.)

  Market group `Standard ores` is a parent category and there are no direct items under this category. However this category has child categories such as Veldspar, Jaspet, Scordite which each includes multiple variations of the ores. Adding the `Standard ores` category will add each ore type to the special tax section.



  Name | Includes | Items
  -- | --
  Standard Ores | Normal ores from belts and anomalies | Veldspar, Hedbergite, Compressed Arkonor ...
  Moon Ores | Ores from moon mining | Cobaltite, Loparite, Pollucite
  Ice Ores | Ores from ice mining | Blue Ice, Dark Glitter, Compressed Blue Ice ....
  Minerals | Contains materials for refining Standard Ore | Tritanium, Pyerite ....
  Salvage Materials | Salvage from loot | Armor Plates, Trigger Unit, Ancient Radar Decorrelator ...


pkgId: 2f3b86fab3713cebe6632d43d310c62b7fa6850fd91f3c1e1c0455a59c551122
name: python-aa-charlink
arch: src
version: 1.7.0
epoch: 0
release: 1
summary: Character Linker for Alliance Auth
url: https://github.com/Maestro-Zacht/aa-charlink
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-charlink-1.7.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/aa-charlink)](https://pypi.org/project/aa-charlink/)

  ![EvE Partner](https://raw.githubusercontent.com/Maestro-Zacht/aa-charlink/503fac8d44c7c40ea8489da6519f94219446d1e5/docs/images/eve_partner.jpg)

  A simple app for AllianceAuth that allows users to link each character to all the AllianceAuth apps with only 1 login action.





  1. Select which app you want to link your character to
     ![Charlink Homepage](https://raw.githubusercontent.com/Maestro-Zacht/aa-charlink/e5dd9519cd3772b19505f4ca4b02771774d2a695/docs/images/charlink_homepage.png)
  2. Login on CPP site
  3. Character linked to the selected apps
     ![Success](https://raw.githubusercontent.com/Maestro-Zacht/aa-charlink/e5dd9519cd3772b19505f4ca4b02771774d2a695/docs/images/charlink_success.png)



  Users with the appropriate permission (see [permissions](#permissions)) can audit the linked characters of the users of their corporation, alliance or auth state. A link will appear on top of the main page of the app and will redirect to a page with a table of all the linked characters of the users of the selected corporation.

  A user can be audited by clicking on the link on the `Main Character` column.

  App Audit: Users can now audit character based on the apps they have access to. Select the app you want to audit from the dropdown menu in the audit page.
  Admin App status: users with `is_superuser` can now see the list of imported apps and the ones with issues with the import.



  1. Install the app with

     ```shell
     pip install aa-charlink
     ```

  2. Add `'charlink',` to your `INSTALLED_APPS` in `local.py`
  3. Run migrations and collectstatic

     ```shell
     python manage.py migrate
     python manage.py collectstatic
     ```



  I've opened an [issue](https://github.com/Maestro-Zacht/aa-charlink/issues/1) to track the apps that have a default integration in CharLink and the WIPs. If you want another app to be supported, please comment on the issue, reach me on the [AllianceAuth discord server](https://discord.gg/fjnHAmk) or ask the developer of the app to implement an [integration via hook](#hook-integration).



  From version 1.1.0, CharLink supports hook integration. If you want to integrate your app with CharLink, you need to register a hook in the `auth_hooks.py` file:

  ```python
  @hooks.register('charlink')
  def register_charlink_hook():
     return 'testauth.testapp.charlink_hook'
  ```

  The hook has to return a string with the import path of the module containing the app integration. The module must contain a variable called `app_import` which is an instance of `charlink.app_imports.utils.AppImport`. You can find the documentation of the class in the [`utils.py`](./charlink/app_imports/utils.py) and some examples in the [imports folder](./charlink/imports).



  | Name                   | Description                                                                         | Default |
  | ---------------------- | ----------------------------------------------------------------------------------- | ------- |
  | `CHARLINK_IGNORE_APPS` | List of apps to ignore. Use the name of the app as it is called in `INSTALLED_APPS` | `[]`    |



  | Name                     | Description                                                |
  | ------------------------ | ---------------------------------------------------------- |
  | `charlink.view_corp`     | Can view linked character of members of their corporation. |
  | `charlink.view_alliance` | Can view linked character of members of their alliance.    |
  | `charlink.view_state`    | Can view linked character of members of their auth state.  |



  If you want to setup a template override to link the "Add character" button to the login page of this package, set the `a` element to:

  ```html
  <a href="{% url 'charlink:index' %}" class="btn btn-primary flex-fill m-1" title="{% translate 'Add Character' %}">
        <span class="d-md-inline m-2">{% translate 'Add Character' %}</span>
  </a>

  ```



  - For AFAT is not possible to check if the added character has a token which is still valid, it only checks if the character has ever added a token with the required scopes.


pkgId: 9c3eb14db603566fd5160f69faafbc29b3e789f3a23639e36a0fa572f149e876
name: python-aa-contacts
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: Contacts tool for AllianceAuth
url: https://github.com/Maestro-Zacht/aa-contacts
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-contacts-0.6.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/aa-contacts)](https://pypi.org/project/aa-contacts/)

  ![EvE Partner](https://raw.githubusercontent.com/Maestro-Zacht/aa-contacts/c55d148e8b017642b691ea2badf6f11cdb5ab3db/docs/images/eve_partner.jpg)

  This is a plugin for [AllianceAuth](https://gitlab.com/allianceauth/allianceauth) that lets alliances and corporations track and manage their contacts (i.e. standings).





  Users with the right [permission](#permissions) can add an alliance or corporation just by clicking on the + button in the index page.



  The index page shows all the alliances and corporations that have been added and are available for that user, that means every alliance or corporation in which the user has a character. Superusers can see all the alliances and corporations.

  In every alliance or corporation view, the user can see the contacts and their standings. If it has the right [permissions](#permissions), the user can see and edit notes or trigger a manual update of the contacts.



  If the [Secure Groups](https://github.com/Solar-Helix-Independent-Transport/allianceauth-secure-groups) plugin is installed, a new smart filter will appear in the admin panel of AA Contacts. It allows to filter users by the standings a corporation or alliance has set for them or their alliance/corporation.

  Note: when multiple corporations/alliances are set, the logic applies an OR condition, i.e. it is sufficient that at least 1 corp/alliance meets the requirement for the filter to pass. If you want to apply an AND condition, you need to create one filter per condition and put them together in the smart group.



  - **comparison**: comparison operator to use
  - **standings**: the standing to compare against
  - **check type**:
    - at least one character: if at least one character passes the filter, the user passes the filter
    - all characters: all characters have to pass the filter for the user to pass the filter
    - no character: opposite of all characters
  - **only main**: consider only the main character
  - **corporations** and **alliances**: groups that have set the standings



  1. Install the package. If you have a traditional installation, run the following command in your terminal:

      ```bash
      pip install aa-contacts
      ```

      If you have a Docker installation instead, add  to your `requirements.txt` file:

      ```pip
      aa-contacts==x.y.z
      ```

      with the desired version and rebuild the Docker stack.

  2. Add `'aa_contacts',` to your `INSTALLED_APPS` in `local.py`.

  3. Run migrations and collectstatic:

      ```bash
      python manage.py migrate
      python manage.py collectstatic
      ```

      or, if you are on docker:

      ```bash
      auth migrate
      auth collectstatic
      ```

  4. Add the update task at the end of the `local.py`:

      ```python
      
      CELERYBEAT_SCHEDULE['aa_contacts_update_all_contacts'] = {
          'task': 'aa_contacts.tasks.update_all_contacts',
          'schedule': crontab(minute='24'),
      }
      ```

  5. Restart Supervisor if you are on a traditional install or the docker stack if you are on docker.



  | Permission                    | Description                                                                                                           |
  | ----------------------------- | --------------------------------------------------------------------------------------------------------------------- |
  | `manage_alliance_contacts`    | Can add tokens for the alliance and trigger manual updates                                                            |
  | `manage_corporation_contacts` | Can add tokens for the corporation and trigger manual updates                                                         |
  | `view_alliance_notes`         | Can view contact notes for alliance contacts. If combined with `manage_alliance_contacts`, can also edit notes.       |
  | `view_corporation_notes`      | Can view contact notes for corporation contacts. If combined with `manage_corporation_contacts`, can also edit notes. |


pkgId: 68cec77259985be95a2464bf5f9c16146e3e9998c77786ff2ed68156c40d8fe1
name: python-aa-corpstats-two
arch: src
version: 1.1.7
epoch: 0
release: 1
summary: Alliance Auth Plugin
url: https://github.com/pvyParts/allianceauth-corpstats-two
rpm_license: GNU General Public License v3 (GPLv3)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-corpstats-two-1.1.7-1.src.rpm
checksum_type: sha256
description:
  corpstats view_corp_corpstats | None | Can view corp stats of their corporation.
  corpstats view_alliance_corpstats | None | Can view corp stats of members of their alliance.
  corpstats view_state_corpstats | None | Can view corp stats of members of their auth state.
  corpstats view_all_corpstats | None | Can view all corp stats.
  corpstats add_corpstat | Can create model | Can add new corpstats using an SSO token.
  corpstats change_corpstat |Can edit model | None.
  corpstats remove_corpstat | Can delete model | None.

  Is very well documented [here](https://allianceauth.readthedocs.io/en/latest/features/apps/corpstats.html?highlight=corpstats#creating-a-corp-stats)

  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at https://developers.eveonline.com before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.

  1.1.0
   * Added service activation information
   * Modified alliance view to show all corpstats visible to a user
   * updated to django-esi >= 2.0.0
   * FA 5 update
  1.0.4
   * perms fixes


pkgId: bdac858139b8c77ee4a81adef4f953b3f240cd4ca60c74884d24d461153da02a
name: python-aa-discord-announcements
arch: src
version: 2.2.0
epoch: 0
release: 1
url: https://github.com/ppfeufer/aa-discord-announcements
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-discord-announcements-2.2.0-1.src.rpm
checksum_type: sha256
summary:
  Discord Announcements via Alliance Auth. Write announcements and manage who can write announcements on your corporation or alliance Discord through Alliance Auth.

description:
  [![Version](https://img.shields.io/pypi/v/aa-discord-announcements?label=release)](https://pypi.org/project/aa-discord-announcements/)
  [![License](https://img.shields.io/github/license/ppfeufer/aa-discord-announcements)](https://github.com/ppfeufer/aa-discord-announcements/blob/master/LICENSE)
  [![Python](https://img.shields.io/pypi/pyversions/aa-discord-announcements)](https://pypi.org/project/aa-discord-announcements/)
  [![Django](https://img.shields.io/pypi/djversions/aa-discord-announcements?label=django)](https://pypi.org/project/aa-discord-announcements/)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-discord-announcements/master.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-discord-announcements/master)
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
  [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
  [![Checks](https://github.com/ppfeufer/aa-discord-announcements/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-discord-announcements/actions/workflows/automated-checks.yml)
  [![codecov](https://codecov.io/gh/ppfeufer/aa-discord-announcements/branch/master/graph/badge.svg?token=9I6HQB6W6J)](https://codecov.io/gh/ppfeufer/aa-discord-announcements)
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-discord-announcements/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/ppfeufer/aa-discord-announcements/blob/master/CODE_OF_CONDUCT.md)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)

  Discord Announcements via [Alliance Auth](https://gitlab.com/allianceauth/allianceauth)

  Write announcements and manage who can write announcements on your corporation or
  alliance Discord through Alliance Auth.

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [AA Discord Announcements](#aa-discord-announcements)
    - [Installation](#installation)
      - [Step 1: Install the App](#step-1-install-the-app)
      - [Step 2: Update Your AA Settings](#step-2-update-your-aa-settings)
      - [Step 3: Finalizing the Installation](#step-3-finalizing-the-installation)
      - [Step 4: Setting up Permission](#step-4-setting-up-permission)
      - [Step 5: Setting up the App](#step-5-setting-up-the-app)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  > \[!NOTE\]
  >
  > **AA Discord Announcements >=2.0.0 needs at least Alliance Auth v4.0.0**.
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version compatible with Alliance Auth v3 is `1.4.2`.

  This app is a plugin for Alliance Auth. If you don't have Alliance Auth running already,
  please install it first before proceeding.
  (See the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html) for details)

  > \[!NOTE\]
  >
  > You also want to make sure that you have the
  > [Discord service](https://allianceauth.readthedocs.io/en/latest/features/services/discord.html)
  > installed, configured and activated before installing this app.



  Make sure you're in the virtual environment (venv) of your Alliance Auth installation.
  Then install the latest version:

  ```shell
  pip install aa-discord-announcements
  ```



  Configure your AA settings (`local.py`) as follows:

  - Add `"aa_discord_announcements",` to `INSTALLED_APPS`



  Copy static files and run migrations

  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```

  Restart your supervisor services for AA



  Now you can set up permissions in Alliance Auth for your users.
  Add `aa_discord_announcements | general | Can access this app` to the states and/or
  groups you would like to have access.



  In your admin backend you'll find a new section called `Discord Announcements`.
  This is where you set all your stuff up, like the webhooks you want to ping and who
  can ping them. It's pretty straight forward, so you shouldn't have any issues. Go nuts!



  See [CHANGELOG.md](https://github.com/ppfeufer/aa-discord-announcements/blob/master/CHANGELOG.md)



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-discord-announcements/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines].\
  (I promise, it's not much, just some basics)

  <!-- Links -->

  [contribution guidelines]: https://github.com/ppfeufer/aa-discord-announcements/blob/master/CONTRIBUTING.md "Contribution Guidelines"
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: 8215ecf57830e9b3ba47ec7379fa097d2587d24e79ef3e4f302b40e7c5bc2820
name: python-aa-discord-ping-formatter
arch: src
version: 1.1.4
epoch: 0
release: 1
summary: Discord Ping Formatter for Alliance Auth
url: https://github.com/ppfeufer/aa-discord-ping-formatter
rpm_license: GNU General Public License v3 (GPLv3)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-discord-ping-formatter-1.1.4-1.src.rpm
checksum_type: sha256
description:
  App for formatting pings for Discord in Alliance Auth



  - [Installation](#installation)
  - [Updating](#updating)
  - [Screenshots](#screenshots)
  - [Configuration](#configuration)
  - [Change Log](CHANGELOG.md)



  **Important**: This app is a plugin for Alliance Auth. If you don't have Alliance Auth running already, please install it first before proceeding. (see the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html) for details)



  Make sure you are in the virtual environment (venv) of your Alliance Auth installation. Then install the latest version:

  ```bash
  pip install aa-discord-ping-formatter
  ```



  Configure your AA settings (`local.py`) as follows:

  - Add `'discordpingformatter',` to `INSTALLED_APPS`




  Run migrations & copy static files

  ```bash
  python manage.py collectstatic
  python manage.py migrate
  ```

  Restart your supervisor services for AA



  Now you can setup permissions in Alliance Auth for your users. Add ``discordpingformatter | aa discord ping formatter | Can access this app`` to the states and/or groups you would like to have access.



  To update your existing installation of AA Discord Ping Formatter first enable your virtual environment.

  Then run the following commands from your AA project directory (the one that contains `manage.py`).

  ```bash
  pip install -U aa-discord-ping-formatter
  ```

  ```bash
  python manage.py collectstatic
  ```

  ```bash
  python manage.py migrate
  ```

  Finally restart your AA supervisor services.





  ![AA View](https://raw.githubusercontent.com/ppfeufer/aa-discord-ping-formatter/master/discordpingformatter/docs/aa-view.jpg)



  ![Discord Ping Examples](https://raw.githubusercontent.com/ppfeufer/aa-discord-ping-formatter/master/discordpingformatter/docs/ping-examples.jpg)

  _(Example for embedded ping (top) and non embedded ping (bottom))_





  You have the option to embed your webhook pings. To do so you can enable it via:

  ```python

  AA_DISCORDFORMATTER_WEBHOOK_EMBED_PING = True
  ```



  Per default you have 2 ping targets you can select from. That's `@everyone` and `@here`. If you need more than these 2, you can add them to your `local.py` and override the default behaviour that way.

  Open your `local.py` in an editor of your choice and add the following at the end.

  ```python

  AA_DISCORDFORMATTER_ADDITIONAL_PING_TARGETS = [
      {
          'roleId': 'xxxxxxxxxxxxxxxxxx',
          'roleName': 'Member'
      },
      {
          
          'restrictedToGroup': [
              5,
              7,
          ],
          'roleId': 'xxxxxxxxxxxxxxxxxx',
          'roleName': 'Capital Pilots'
      },
  ]
  ```

  To get the `roleId` go to your Discord Server Settings » Roles and right click the role you need and copy the ID. You might need to activate the Developer Mode for your Discord account in order to do so. You activate the Developmer Mode in your account settings under Appearance » Advanced » Developer Mode.

  **Important:** Both, `roleId` and `roleName` need to be without the `@`, it will be added automatically. `roleName` needs to be spelled exactly as it is on Discord.


  Per default you have 4 fleet types you can select from. That's `Roam`, `Home Defense`, `StratOP` and `CTA`. If you need more than these 4, you can add them to your `local.py` and override the default behaviour that way.

  Open your `local.py` in an editor of your choice and add the following at the end.

  ```python

  AA_DISCORDFORMATTER_ADDITIONAL_FLEET_TYPES = [
      
      {
          'fleetType': 'Mining',
          'embedColor': '#4F545C' # can be empty but needs to be set. Needs to be #hex and 6 digits
      },

      
      'Ratting',
  ]
  ```

  Both examples will work, no matter if you have `AA_DISCORDFORMATTER_WEBHOOK_EMBED_PING` enabled or not. But keep in mind, to set a custom color for your embed, it needs to be defined like in the first example. The color needs to be your standard hex color code like you define it in (for example) CSS as well. Pre-defined fleet types are by default: Roam = green, Home Defense = yellow, StratOP = orange, CTA = red


  Per default, your ping will just be formatted for you to copy and paste. But, if your FCs are too lazy even for that, you can configure webhooks. One for each channel you might want to ping.

  Open your `local.py` in an editor of your choice and add the following at the end.

  ```python

  AA_DISCORDFORMATTER_ADDITIONAL_PING_WEBHOOKS = [
      {
          'discordChannelName': 'Fleet Pings (#fleet-pings)',
          'discordWebhookUrl': 'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxxxx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
      },
      {
          'discordChannelName': 'Pre Pings (#pre-pings)',
          'discordWebhookUrl': 'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxxxx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
      },
      {
          
          'restrictedToGroup': [
              5,
              7,
          ],
          'discordChannelName': 'Capital Pings (#capital-pings)',
          'discordWebhookUrl': 'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxxxx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
      }
  ]
  ```



  Values for Fleet Comms, Formup Location and Doctrine can be pre-defined as suggestions, so your FCs have a quick selection of the most used comms, stagings and doctrines to select from. These are not fixed values in the form, since we use a combination of input and select fields here. So FCs are absolutely free to something completely different in those 3 fields than the pre-defined suggestions.

  To define these 3 fields, open your `local.py` in an editor of your choice and add the following:

  Fleet Comms
  ```python

  AA_DISCORDFORMATTER_FLEET_COMMS = [
      'Alliance Mumble',
      'Coalition Mumble',
      'Spy Account Mumble' # :-P
  ]
  ```

  Fleet Staging
  ```python

  AA_DISCORDFORMATTER_FLEET_FORMUP_LOCATIONS = [
      'Alliance Staging System',
      'Coalition Staging System'
  ]
  ```

  Doctrine
  ```python

  AA_DISCORDFORMATTER_FLEET_DOCTRINES = [
      'Battle Skiffs',
      'Combat Nereus',
      'Attack Corvettes'
  ]
  ```


pkgId: 898ca8f16e80bd84e41c55a91c09d210691dc7b81a96742cba708c7336bca527
name: python-aa-discordnotify
arch: src
version: 2.0.0
epoch: 0
release: 1
summary: Forward Alliance Auth notifications to users on Discord.
url: https://gitlab.com/ErikKalkoken/aa-discordnotify
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-discordnotify-2.0.0-1.src.rpm
checksum_type: sha256
description:
  Forward Alliance Auth notifications to users on Discord

  [![release](https://img.shields.io/pypi/v/aa-discordnotify?label=release)](https://pypi.org/project/aa-discordnotify/)
  [![python](https://img.shields.io/pypi/pyversions/aa-discordnotify)](https://pypi.org/project/aa-discordnotify/)
  [![django](https://img.shields.io/pypi/djversions/aa-discordnotify?label=django)](https://pypi.org/project/aa-discordnotify/)
  [![pipeline](https://gitlab.com/ErikKalkoken/aa-discordnotify/badges/master/pipeline.svg)](https://gitlab.com/ErikKalkoken/aa-discordnotify/-/pipelines)
  [![codecov](https://codecov.io/gl/ErikKalkoken/aa-discordnotify/branch/master/graph/badge.svg?token=AU1U2LQSUS)](https://codecov.io/gl/ErikKalkoken/aa-discordnotify)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/ErikKalkoken/aa-discordnotify/-/blob/master/LICENSE)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![chat](https://img.shields.io/discord/790364535294132234)](https://discord.gg/zmh52wnfvM)



  - [Overview](#overview)
  - [Installation](#installation)
  - [Settings](#settings)
  - [Change Log](CHANGELOG.md)



  This app automatically forwards Alliance Auth notifications to users on Discord.



  - Auth notifications appear instantly as DM on Discord
  - Notifications are colored according to their level (e.g. INFO = blue)
  - Can be restricted to notifications for superusers only (e.g. to keep track of errors)



  ![example](https://i.imgur.com/eebZFQj.png)





  1. Discord Notify is a plugin for Alliance Auth. If you don't have Alliance Auth running already, please install it first before proceeding. (see the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/auth/allianceauth/) for details)

  1. Discord Notify needs [Discord Proxy](https://gitlab.com/ErikKalkoken/discordproxy) to function. Please make sure the server is up and running on your system, before continuing.

  1. Please also make sure you have the Discord service installed and setup in Alliance Auth.



  Make sure you are in the virtual environment (venv) of your Alliance Auth installation. Then install the newest release from PyPI:

  ```bash
  pip install aa-discordnotify
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `"discordnotify"` to `INSTALLED_APPS`
  - Optional: Add additional settings if you want to change any defaults. See [Settings](#settings) for the full list.



  Restart your supervisor services for Auth (no migration required).



  To test that your installation was successful you can create a test notification to yourself by navigating to the relative route `/discordnotify/test` in your browser. The absolute URL depends on your Auth site. Example: For an Auth site with the URL `https://auth.example.com` the test URL would be:

  ```text
  https://auth.example.com/discordnotify/test
  ```

  When everything was setup correctly, you will receive a test notification on Discord.

  Congratulations you are now ready to use Discord Notify!



  Here is a list of available settings for this app. They can be configured by adding them to your AA settings file (`local.py`).

  Note that all settings are optional and the app will use the documented default settings if they are not used.

  Name | Description | Default
  -- | -- | --
  `DISCORDNOTIFY_ENABLED`| Set this to False to disable this app temporarily | `True`
  `DISCORDPROXY_PORT`| Port used to communicate with Discord Proxy. | `50051`
  `DISCORDPROXY_HOST`| Hostname used to communicate with Discord Proxy. | `localhost`
  `DISCORDNOTIFY_MARK_AS_VIEWED`| When enabled will mark all notifications as viewed that have been successfully submitted to Discord | `False`
  `DISCORDNOTIFY_SUPERUSER_ONLY`| When enabled only superusers will be get their notifications forwarded. | `False`


pkgId: f38db7b8c3f9ab1d80f7b804ab62ffd5ce0d5574675dea4ec17b1d24dddf2858
name: python-aa-drifters
arch: src
version: 0.4.4a0
epoch: 0
release: 1
summary: Drifter wormhole tracker/manager plugin for Alliance Auth.
url: https://gitlab.com/tactical-supremacy/aa-drifters
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-drifters-0.4.4a0-1.src.rpm
checksum_type: sha256
description:
  Drifter wormhole tracker/manager plugin for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/).

  ![License](https://img.shields.io/badge/license-MIT-green)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)

  ![python](https://img.shields.io/badge/python-3.8-informational)
  ![python](https://img.shields.io/badge/python-3.9-informational)
  ![python](https://img.shields.io/badge/python-3.10-informational)
  ![python](https://img.shields.io/badge/python-3.11-informational)

  ![django-4.0](https://img.shields.io/badge/django-4.0-informational)



  - AA-Discordbot Cogs for recording the status of Jove Observatory systems and their contained Drifter holes
  - Cogs for recalling this information in a few ways



  - P2P Mapping using known holes
  - Possible Pathfinder Integration/sync? To investigate usefullness





  Drifters is an App for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/), Please make sure you have this installed. Drifters is not a standalone Django Application

  Drifters needs the App [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse) to function. Please make sure it is installed before continuing.



  ```shell
  pip install aa-drifters
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'drifters'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python


  CELERYBEAT_SCHEDULE['drifters_garbage_collection'] = {
      'task': 'drifters.tasks.garbage_collection',
      'schedule': crontab(minute='*/15', hour='*'),
  }
  ```



  - Run migrations `python manage.py migrate`
  - Gather your staticfiles `python manage.py collectstatic`
  - Restart your project `supervisorctl restart myauth:`



  - `python manage.py eveuniverse_load_data map` This will load Regions, Constellations and Solar Systems



  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at <https://developers.eveonline.com> before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.


pkgId: ff95fc8c74c3a12e39473a91a4ab8457d63639fa4345c1e9ca7d4c090f04418d
name: python-aa-esi-status
arch: src
version: 2.4.1
epoch: 0
release: 1
summary: A simple status monitor for ESI
url: https://github.com/ppfeufer/aa-esi-status
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-esi-status-2.4.1-1.src.rpm
checksum_type: sha256
description:
  [![Version](https://img.shields.io/pypi/v/aa-esi-status?label=release)](https://pypi.org/project/aa-esi-status/)
  [![License](https://img.shields.io/github/license/ppfeufer/aa-esi-status)](https://github.com/ppfeufer/aa-esi-status/blob/master/LICENSE)
  [![Python](https://img.shields.io/pypi/pyversions/aa-esi-status)](https://pypi.org/project/aa-esi-status/)
  [![Django](https://img.shields.io/pypi/djversions/aa-esi-status?label=django)](https://pypi.org/project/aa-esi-status/)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-esi-status/main.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-esi-status/main)
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
  [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
  [![Checks](https://github.com/ppfeufer/aa-esi-status/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-esi-status/actions/workflows/automated-checks.yml)
  [![codecov](https://codecov.io/gh/ppfeufer/aa-esi-status/branch/main/graph/badge.svg?token=1PCUZRGPBT)](https://codecov.io/gh/ppfeufer/aa-esi-status)
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-esi-status/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/ppfeufer/aa-esi-status/blob/master/CODE_OF_CONDUCT.md)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)

  App for Alliance Auth to show the current status of ESI and its end points.

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [AA ESI Status](#aa-esi-status)
    - [Screenshots](#screenshots)
      - [ESI Status Page](#esi-status-page)
      - [Dashboard Widget](#dashboard-widget)
    - [Installation](#installation)
      - [Step 1: Install the App](#step-1-install-the-app)
      - [Step 2: Update Your AA Settings](#step-2-update-your-aa-settings)
      - [Step 3: Finalizing the Installation](#step-3-finalizing-the-installation)
    - [(Optional) Public Views](#optional-public-views)
    - [Updating](#updating)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________





  ![AA ESI Status](https://raw.githubusercontent.com/ppfeufer/aa-esi-status/master/docs/images/aa-esi-status.jpg "AA ESI Status")



  This is how the dashboard widget looks like.
  It shows the current status of ESI for administrative users.

  ![AA ESI Status Dashboard Widget](https://raw.githubusercontent.com/ppfeufer/aa-esi-status/master/docs/images/dashboard-widget.jpg "AA ESI Status Dashboard Widget")



  > \[!NOTE\]
  >
  > **AA ESI Status >= 2.0.0 needs at least Alliance Auth v4!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version of AA ESI Status that supports Alliance Auth v3 is `1.14.2`.

  This app is a plugin for Alliance Auth. If you don't have Alliance Auth running
  already, please install it first before proceeding.
  (See the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html) for details)



  Make sure you're in the virtual environment (venv) of your Alliance Auth installation.
  Then install the latest version:

  ```shell
  pip install aa-esi-status
  ```



  Configure your AA settings (`local.py`) as follows:

  - Add `"esistatus",` to `INSTALLED_APPS`



  Run migrations & copy static files.

  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```

  Restart your supervisor services for AA.



  This app supports AA's feature of public views, since the ESI status is not any
  mission-critical information.
  To allow users to view the time zone conversion page without the need to log in,
  please add `"esistatus",` to the list of `APPS_WITH_PUBLIC_VIEWS` in your `local.py`:

  ```python




  APPS_WITH_PUBLIC_VIEWS = [
      "esistatus",  # https://github.com/ppfeufer/aa-esi-status/
  ]
  ```

  > **Note**
  >
  > If you don't have a list for `APPS_WITH_PUBLIC_VIEWS` yet, then add the whole
  > block from here. This feature has been added in Alliance Auth v3.6.0 so you
  > might not yet have this list in your `local.py`.



  To update your existing installation of AA ESI Status, first enable your virtual
  environment.

  Then run the following commands from your AA project directory (the one that
  contains `manage.py`).

  ```shell
  pip install -U aa-esi-status
  python manage.py collectstatic
  python manage.py migrate
  ```

  Now restart your AA supervisor services.



  See [CHANGELOG.md](https://github.com/ppfeufer/aa-esi-status/blob/main/CHANGELOG.md)



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-esi-status/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines](https://github.com/ppfeufer/aa-esi-status/blob/main/CONTRIBUTING.md).\
  (I promise, it's not much, just some basics)

  <!-- Links -->

  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: f3d5e822e996728f68a1d0d46c33406d96788ee2bbc6681736e48dccc7897937
name: python-aa-evescout
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: Example plugin app for Alliance Auth.
url: https://gitlab.com/r0kym/aa-evescout
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-evescout-1.1.0-1.src.rpm
checksum_type: sha256
description:
  AA module that adds commands to the [allianceauth-discordbot](https://github.com/Solar-Helix-Independent-Transport/allianceauth-discordbot/) related to the [eve-scout](https://eve-scout.com/) API. \
  EVE-Scout API documentation can be found [here](https://api.eve-scout.com/ui).

  Shoutout to Sky Diamond for the API and EVE-Scout for the tireless scanning.

  [![release](https://img.shields.io/pypi/v/aa-evescout?label=release)](https://pypi.org/project/aa-evescout/)
  [![python](https://img.shields.io/pypi/pyversions/aa-evescout)](https://pypi.org/project/aa-evescout/)
  [![django](https://img.shields.io/pypi/djversions/aa-evescout?label=django)](https://pypi.org/project/aa-evescout/)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/r0kym/aa-evescout/-/blob/master/LICENSE)


  - Automated pings when a connection open in system close to a pre-defined system
  - Find connections close to a specific system
  - Find drifter observatories close to a specific system



  ![example_ping.png](images/example_ping.png)

  ![example_closest.png](images/example_closest.png)

  ![example_drifters.png](images/example_drifters.png)





  1. aa-evescout is a plugin for Alliance Auth. If you don't have Alliance Auth running already, please install it first before proceeding. (see the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/auth/allianceauth/) for details)

  2. aa-evescout requires two Alliance Auth modules  to function.
     Make sure it is properly setup before going on.
     - [allianceauth-discordbot](https://github.com/Solar-Helix-Independent-Transport/allianceauth-discordbot/)
     - [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse)



  Make sure you are in the virtual environment (venv) of your Alliance Auth installation. Then install the newest release from PyPI:

  ```bash
  pip install aa-evescout
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'evescout'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python
  CELERYBEAT_SCHEDULE['evescout_update_signatures'] = {
      'task': 'evescout.tasks.update_all_signatures',
      'schedule': crontab(minute='*/6'),
  }
  ```



  Run migrations & copy static files

  ```bash
  python manage.py migrate
  python manage.py collectstatic --noinput
  ```

  Restart your supervisor services for Auth.



  **This command isn't mandatory**

  If you want to speed up the application in the future you can decide to run
  ```bash
  python manage.py eveuniverse_load_data map
  ```

  This command will take some time to complete and consume a lot of database space.
  It isn't mandatory to run it so don't hesitate to skip it if you want to save database space.



  Permissions overview.

  | Name            | Description                                                                      |
  |-----------------|----------------------------------------------------------------------------------|
  | `create_pinger` | The user can use the `/evescout initiate-pinger` command in the alliance discord |



  The following commands can be used when running the module:

  | Name                         | Description                                                        |
  |------------------------------|--------------------------------------------------------------------|
  | `evescout_update_signatures` | Updates all signatures from the EVE-scout API                      |
  | `evescout_load_system`       | Manually loads a solar system to the database to use it in pingers |


pkgId: c15c1cad98a3e09c7c2a072805930f048eab8f6e1d2ca7d4bb2b5d377de11931
name: python-aa-evescout
arch: src
version: 1.1.1
epoch: 0
release: 1
summary: Example plugin app for Alliance Auth.
url: https://gitlab.com/r0kym/aa-evescout
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-evescout-1.1.1-1.src.rpm
checksum_type: sha256
description:
  AA module that adds commands to the [allianceauth-discordbot](https://github.com/Solar-Helix-Independent-Transport/allianceauth-discordbot/) related to the [eve-scout](https://eve-scout.com/) API. \
  EVE-Scout API documentation can be found [here](https://api.eve-scout.com/ui).

  Shoutout to Sky Diamond for the API and EVE-Scout for the tireless scanning.

  [![release](https://img.shields.io/pypi/v/aa-evescout?label=release)](https://pypi.org/project/aa-evescout/)
  [![python](https://img.shields.io/pypi/pyversions/aa-evescout)](https://pypi.org/project/aa-evescout/)
  [![django](https://img.shields.io/pypi/djversions/aa-evescout?label=django)](https://pypi.org/project/aa-evescout/)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/r0kym/aa-evescout/-/blob/master/LICENSE)


  - Automated pings when a connection open in system close to a pre-defined system
  - Find connections close to a specific system
  - Find drifter observatories close to a specific system



  ![example_ping.png](images/example_ping.png)

  ![example_closest.png](images/example_closest.png)

  ![example_drifters.png](images/example_drifters.png)

  ![example_regionobs.png](images/example_regionobs.png)





  1. aa-evescout is a plugin for Alliance Auth. If you don't have Alliance Auth running already, please install it first before proceeding. (see the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/auth/allianceauth/) for details)

  2. aa-evescout requires two Alliance Auth modules  to function.
     Make sure it is properly setup before going on.
     - [allianceauth-discordbot](https://github.com/Solar-Helix-Independent-Transport/allianceauth-discordbot/)
     - [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse)



  Make sure you are in the virtual environment (venv) of your Alliance Auth installation. Then install the newest release from PyPI:

  ```bash
  pip install aa-evescout
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'evescout'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python
  CELERYBEAT_SCHEDULE['evescout_update_signatures'] = {
      'task': 'evescout.tasks.update_all_signatures',
      'schedule': crontab(minute='*/6'),
  }
  ```



  Run migrations & copy static files

  ```bash
  python manage.py migrate
  python manage.py collectstatic --noinput
  ```

  Restart your supervisor services for Auth.



  **This command isn't mandatory**

  If you want to speed up the application in the future you can decide to run
  ```bash
  python manage.py eveuniverse_load_data map
  ```

  This command will take some time to complete and consume a lot of database space.
  It isn't mandatory to run it so don't hesitate to skip it if you want to save database space.



  Permissions overview.

  | Name            | Description                                                                      |
  |-----------------|----------------------------------------------------------------------------------|
  | `create_pinger` | The user can use the `/evescout initiate-pinger` command in the alliance discord |



  The following commands can be used when running the module:

  | Name                         | Description                                                        |
  |------------------------------|--------------------------------------------------------------------|
  | `evescout_update_signatures` | Updates all signatures from the EVE-scout API                      |
  | `evescout_load_system`       | Manually loads a solar system to the database to use it in pingers |


pkgId: 000481487f9b31d3ba5affe9919c0033703e5f61b6f71748a8750f0c5d049b6a
name: python-aa-example-plugin
arch: src
version: 0.0.9
epoch: 0
release: 1
summary: Example Plugin for Alliance Auth (GitHub Version)
url: https://pypi.org/project/aa-example-plugin/
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-example-plugin-0.0.9-1.src.rpm
checksum_type: sha256
description:
  This is an example plugin app for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth)
  (AA) that can be used as a starting point to develop custom plugins.

  ![License](https://img.shields.io/badge/license-GPLv3-green)
  ![python](https://img.shields.io/badge/python-3.8-informational)
  ![django](https://img.shields.io/badge/django-3.2-informational)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)

  _(These badges are examples, you can and should replace them with your own)_

  For the GitLab version of this example app, please have a look over here, Erik
  Kalkoken was so friendly to provide it » [Alliance Auth Example App (GitLab Version)](https://gitlab.com/ErikKalkoken/allianceauth-example-plugin)

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [Example Plugin App for Alliance Auth (GitHub Version)](#example-plugin-app-for-alliance-auth-github-version)
    - [Features](#features)
    - [How to Use It](#how-to-use-it)
      - [Cloning From Repo](#cloning-from-repo)
      - [Renaming the App](#renaming-the-app)
    - [Clearing Migrations](#clearing-migrations)
    - [Writing Unit Tests](#writing-unit-tests)
    - [Installing Into Your Dev AA](#installing-into-your-dev-aa)
    - [Installing Into Production AA](#installing-into-production-aa)
    - [Contribute](#contribute)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  - The plugin can be installed, upgraded (and removed) into an existing AA
    installation using PyInstaller.
  - It has its own menu item in the sidebar.
  - It has one view that shows a panel and some text



  To use this example as a basis for your own development, just fork this repo and then
  clone it on your dev machine.

  You then should rename the app, and then you can install it into your AA dev
  installation.



  For this app, we're assuming that you have all your AA projects, your virtual
  environment, and your AA installation under one top folder (e.g. aa-dev).

  This should look something like this:

  ```text
  aa-dev
  |- venv/
  |- myauth/
  |- aa-example-plugin
  |- (other AA projects ...)
  ```

  Then just cd into the top folder (e.g. aa-dev) and clone the repo from your fork.
  You can give the repo a new name right away (e.g. `aa-your-app-name`). You also want
  to create a new git repo for it.
  Finally, enable [pre-commit](https://pre-commit.com) to enable automatic code style
  checking.

  ```bash
  git clone https://github.com/YourName/aa-example-plugin.git aa-your-app-name
  cd aa-your-app-name
  rm -rf .git
  git init
  pre-commit install
  ```



  Before installing this app into your dev AA you need to rename it to something
  suitable for your development project. Otherwise, you risk not being able to install
  additional apps that might also be called example.

  Here is an overview of the places that you need to edit to adopt the name.

  Easiest is to just find & replace `example` with your new app name in all files
  listed below.

  One small warning about picking names: Python is a bit particular about what special
  characters are allowed for names of modules and packages. To avoid any pitfalls, I
  would therefore recommend using only normal characters (a-z) in your app's name
  unless you know exactly what you're doing.

  | Location                                 | Description                                                                            |
  | ---------------------------------------- | -------------------------------------------------------------------------------------- |
  | `./example/`                             | Folder name                                                                            |
  | `./example/static/example/`              | Folder name                                                                            |
  | `./example/templates/example/`           | Folder name                                                                            |
  | `./pyproject.cfg`                        | Update module name for version import, update package name, update title, author, etc. |
  | `./example/apps.py`                      | App name                                                                               |
  | `./example/__init__.py`                  | App name                                                                               |
  | `./example/auth_hooks.py`                | Menu hook config incl. icon and label of your app's menu item appearing in the sidebar |
  | `./example/models.py`                    | App name                                                                               |
  | `./example/urls.py`                      | App name                                                                               |
  | `./example/views.py`                     | Permission name and template path                                                      |
  | `./example/templates/example/base.html`  | Title of your app to be shown in all views and as title in the browser tab             |
  | `./example/templates/example/index.html` | Template path                                                                          |
  | `./testauth/local.py`                    | App name in `PACKAGE` constant                                                         |
  | `./.coveragerc`                          | App name                                                                               |
  | `./MANIFEST.in`                          | App name                                                                               |
  | `./README.md`                            | Clear content                                                                          |
  | `./LICENSE`                              | Replace with your own license                                                          |
  | `./tox.ini`                              | App name                                                                               |
  | `./.isort.cfg`                           | App name for `import_heading_firstparty`                                               |
  | `./Makefile`                             | App name and package name                                                              |



  Instead of renaming your app in the migrations, it's easier to just recreate them
  later in the process. For this to work, you need to delete the old migration files in
  your `migrations` folder.

  ```bash
  rm your-app-name/migrations/0001_initial.py
  rm -rf your-app-name/migrations/_pycache
  ```



  Write your unit tests in `your-app-name/tests/` and make sure that you use a "test\_"
  prefix for files with your unit tests.



  Once you've cloned or copied all files into place and finished renaming the app,
  you're ready to install it to your dev AA instance.

  Make sure you're in your venv. Then install it with pip in editable mode:

  ```bash
  pip install -e aa-your-app-name
  ```

  First add your app to the Django project by adding the name of your app to
  INSTALLED_APPS in `settings/local.py`.

  Next, we will create new migrations for your app:

  ```bash
  python manage.py makemigrations
  ```

  Then run a check to see if everything is set up correctly.

  ```bash
  python manage.py check
  ```

  In case they're errors make sure to fix them before proceeding.

  Next, perform migrations to add your model to the database:

  ```bash
  python manage.py migrate
  ```

  Finally, restart your AA server and that's it.



  To install your plugin into a production AA, run this command within the virtual
  Python environment of your AA installation:

  ```bash
  pip install git+https://github.com/YourName/aa-your-app-name
  ```

  Alternatively, you can create a package file and manually upload it to your
  production AA:

  ```bash
  pip install build
  python -m build
  ```

  You'll find the package under `./dist/aa-your-app-name.tar.gz` after this.

  Install your package directly from the package file:

  ```bash
  pip install aa-your-app-name.tar.gz
  ```

  Then add your app to `INSTALLED_APPS` in `settings/local.py`, run migrations and
  restart your allianceserver.



  If you've made a new app for AA, please consider sharing it with the rest of the
  community. For any questions on how to share your app, please contact the AA devs on
  their Discord. You find the current community creations
  [here](https://gitlab.com/allianceauth/community-creations).

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: dbad3e1ca5cc43385469964fa78ceb5bdb2d141a699a4a03e2bd9687fc18587b
name: python-aa-fleetfinder
arch: src
version: 2.2.0
epoch: 0
release: 1
summary: Fleet finder plugin for Alliance Auth
url: https://github.com/ppfeufer/aa-fleetfinder
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-fleetfinder-2.2.0-1.src.rpm
checksum_type: sha256
description:
  [![Version](https://img.shields.io/pypi/v/aa-fleetfinder?label=release)](https://pypi.org/project/aa-fleetfinder/)
  [![License](https://img.shields.io/github/license/ppfeufer/aa-fleetfinder)](https://github.com/ppfeufer/aa-fleetfinder/blob/master/LICENSE)
  [![Python](https://img.shields.io/pypi/pyversions/aa-fleetfinder)](https://pypi.org/project/aa-fleetfinder/)
  [![Django](https://img.shields.io/pypi/djversions/aa-fleetfinder?label=django)](https://pypi.org/project/aa-fleetfinder/)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-fleetfinder/master.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-fleetfinder/master)
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
  [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
  [![Checks](https://github.com/ppfeufer/aa-fleetfinder/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-fleetfinder/actions/workflows/automated-checks.yml)
  [![codecov](https://codecov.io/gh/ppfeufer/aa-fleetfinder/branch/master/graph/badge.svg?token=GFOR9GWRNQ)](https://codecov.io/gh/ppfeufer/aa-fleetfinder)
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-fleetfinder/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/ppfeufer/aa-fleetfinder/blob/master/CODE_OF_CONDUCT.md)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)

  Control access to your fleets through Alliance Auth.

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [AA Fleet Finder](#aa-fleet-finder)
    - [Installation](#installation)
      - [Step 1: Install the Package](#step-1-install-the-package)
      - [Step 2: Configure Alliance Auth](#step-2-configure-alliance-auth)
      - [Step 3: Add the Scheduled Task](#step-3-add-the-scheduled-task)
      - [Step 4: Finalizing the Installation](#step-4-finalizing-the-installation)
      - [Step 4: Setup Permissions](#step-4-setup-permissions)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  > \[!NOTE\]
  >
  > **AA Fleet Finder >= 2.0.0 needs at least Alliance Auth v4.0.0!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version compatible with Alliance Auth v3 is `1.5.2`.



  Make sure you're in the virtual environment (venv) of your Alliance Auth installation Then install the latest release directly from PyPi.

  ```shell
  pip install aa-fleetfinder
  ```



  This is fairly simple, just add the following to the `INSTALLED_APPS` of your `local.py`

  Configure your AA settings (`local.py`) as follows:

  - Add `"fleetfinder",` to `INSTALLED_APPS`



  To set up the scheduled task, add the following code to your `local.py`:

  ```python

  if "fleetfinder" in INSTALLED_APPS:
      CELERYBEAT_SCHEDULE["fleetfinder_check_fleet_adverts"] = {
          "task": "fleetfinder.tasks.check_fleet_adverts",
          "schedule": crontab(minute="*/1"),
      }
  ```



  Run static files collection and migrations

  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```



  Now it's time to set up access permissions for your new Fleetfinder module.

  | ID                   | Description                       | Notes                                                                                                       |
  | :------------------- | :-------------------------------- | :---------------------------------------------------------------------------------------------------------- |
  | `access_fleetfinder` | Can access the Fleetfinder module | Your line members should have this permission, together with everyone you want to have access to he module. |
  | `manage_fleets`      | Can manage fleets                 | Everyone with this permission can open and edit fleets                                                      |



  See [CHANGELOG.md](https://github.com/ppfeufer/aa-fleetfinder/blob/master/CHANGELOG.md)



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-fleetfinder/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  You want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines](https://github.com/ppfeufer/aa-fleetfinder/blob/master/CONTRIBUTING.md).\
  (I promise, it's not much, just some basics)

  <!-- Links -->

  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: 1530d702f540aed1f85a1bc132b40bbf92d860a1048f0058299c449ca471fa7c
name: python-aa-fleetpings
arch: src
version: 3.4.0
epoch: 0
release: 1
summary: Fleet Ping Tool for Alliance Auth supporting pings via webhooks to Discord.
url: https://github.com/ppfeufer/aa-fleetpings
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-fleetpings-3.4.0-1.src.rpm
checksum_type: sha256
description:
  [![Version](https://img.shields.io/pypi/v/aa-fleetpings?label=release)](https://pypi.org/project/aa-fleetpings/)
  [![License](https://img.shields.io/github/license/ppfeufer/aa-fleetpings)](https://github.com/ppfeufer/aa-fleetpings/blob/master/LICENSE)
  [![Python](https://img.shields.io/pypi/pyversions/aa-fleetpings)](https://pypi.org/project/aa-fleetpings/)
  [![Django](https://img.shields.io/pypi/djversions/aa-fleetpings?label=django)](https://pypi.org/project/aa-fleetpings/)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-fleetpings/master.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-fleetpings/master)
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
  [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
  [![Checks](https://github.com/ppfeufer/aa-fleetpings/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-fleetpings/actions/workflows/automated-checks.yml)
  [![codecov](https://codecov.io/gh/ppfeufer/aa-fleetpings/branch/master/graph/badge.svg?token=9I6HQB6W6J)](https://codecov.io/gh/ppfeufer/aa-fleetpings)
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-fleetpings/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/ppfeufer/aa-fleetpings/blob/master/CODE_OF_CONDUCT.md)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)

  App for Alliance Auth that can format your fleet pings and also ping for you to
  Discord.

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [AA Fleet Pings](#aa-fleet-pings)
    - [Installation](#installation)
      - [Step 1: Install the App](#step-1-install-the-app)
      - [Step 2: Update Your AA Settings](#step-2-update-your-aa-settings)
      - [Step 3: Finalizing the Installation](#step-3-finalizing-the-installation)
      - [Step 4: Setting up Permission](#step-4-setting-up-permission)
      - [Step 5: Setting up the App](#step-5-setting-up-the-app)
    - [Updating](#updating)
    - [Screenshots](#screenshots)
      - [View in Alliance Auth](#view-in-alliance-auth)
      - [Discord Ping Example](#discord-ping-example)
    - [Configuration](#configuration)
      - [Use Default Fleet Types](#use-default-fleet-types)
      - [Use Default Ping Targets](#use-default-ping-targets)
      - [Use Doctrines From Fittings Module](#use-doctrines-from-fittings-module)
      - [Webhook Verification](#webhook-verification)
      - [Default Embed Color](#default-embed-color)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  > \[!NOTE\]
  >
  > **AA Fleet Pings >= 3.0.0 needs at least Alliance Auth v4.0.0!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version of AA Fleet Pings that supports Alliance Auth v3 is `2.26.3`.

  This app is a plugin for Alliance Auth. If you don't have Alliance Auth running already,
  please install it first before proceeding. (See the official [AA installation guide]
  for details)

  > \[!NOTE\]
  >
  > You also want to make sure that you have the
  > [Discord service](https://allianceauth.readthedocs.io/en/latest/features/services/discord.html)
  > installed, configured and activated before installing this app.



  Make sure you're in the virtual environment (venv) of your Alliance Auth installation.
  Then install the latest version:

  ```bash
  pip install aa-fleetpings
  ```



  Configure your AA settings (`local.py`) as follows:

  - Add `'fleetpings',` to `INSTALLED_APPS`



  Copy static files and run migrations

  ```bash
  python manage.py collectstatic
  python manage.py migrate
  ```

  Restart your supervisor services for AA



  Now you can set up permissions in Alliance Auth for your users.
  Add `fleetpings | aa fleetpings | Can access this app` to the states and/or
  groups you would like to have access.



  In your admin backend you'll find a new section called `Fleet Pings`.
  This is where you set all your stuff up, like the webhooks you want to ping and who
  can ping them, fleet types, comms, formup locations, and so on. It's pretty straight
  forward, so you shouldn't have any issues. Go nuts!



  To update your existing installation of AA Discord Ping Formatter, first enable your
  virtual environment.

  Then run the following commands from your AA project directory (the one that
  contains `manage.py`).

  ```bash
  pip install -U aa-fleetpings

  python manage.py collectstatic
  python manage.py migrate
  ```

  Finally, restart your AA supervisor services.





  ![View in Alliance Auth](https://raw.githubusercontent.com/ppfeufer/aa-fleetpings/master/docs/images/aa-view.jpg "View in Alliance Auth")



  ![Discord Ping Example](https://raw.githubusercontent.com/ppfeufer/aa-fleetpings/master/docs/images/discord-ping.jpg "Discord Ping Example")



  The following settings are available in the Django Admin Backend under
  `/admin/fleetpings/setting/`:



  Enable or disable the default fleet types (Roaming, Home Defense, StratOP, and CTA)
  that are shown in the fleet type dropdown in addition to your own.

  **Default:** True



  Enable or disable the default ping targets (@everyone and @here) that are shown in
  the ping target dropdown in addition to your own.

  **Default:** True



  If you have the [Fittings and Doctrines] module installed, and your doctrines
  configured there, you don't have to re-build your doctrine list for this module. You
  can simply use the doctrines you already have configured in the Fittings and
  Doctrines module.

  **Default:** True



  If you require your pings to be sent to a webhook, that is not a standard discord
  webhook.

  When disabling webhook verification and using non-Discord webhooks, it is up to you
  to make sure your webhook understands a payload that is formatted for Discord webhooks.

  **Default:** True



  The default highlight for the embed, that is used when no other highlight color is
  defined.

  **Default:** #FAA61A



  See [CHANGELOG.md](https://github.com/ppfeufer/aa-fleetpings/blob/master/CHANGELOG.md)



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-fleetpings/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  You want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines](https://github.com/ppfeufer/aa-fleetpings/blob/master/CONTRIBUTING.md).\
  (I promise, it's not much, just some basics)

  <!-- URLs -->

  [aa installation guide]: https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html "AA installation guide"
  [fittings and doctrines]: https://gitlab.com/colcrunch/fittings "Fittings and Doctrines"
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: 5d6519a1daa19ed20821f23603a959b9c583ec8e08285dd0b13751516a3be8cd
name: python-aa-forum
arch: src
version: 2.8.1
epoch: 0
release: 1
summary: Simple forum for Alliance Auth
url: https://github.com/ppfeufer/aa-forum
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-forum-2.8.1-1.src.rpm
checksum_type: sha256
description:
  [![Badge: Version]][aa-forum on pypi]
  [![Badge: License]][aa-forum license]
  [![Badge: Supported Python Versions]][aa-forum on pypi]
  [![Badge: Supported Django Versions]][aa-forum on pypi]
  ![Badge: pre-commit]
  [![Badge: pre-commit.ci status]][pre-commit.ci status]
  [![Badge: Code Style: black]][black code formatter documentation]
  [![Badge: Support Discord]][support discord]
  [![Badge: Automated Tests]][automated tests on github]
  [![Badge: Code Coverage]][aa-forum on codecov]
  [![Badge: Translation Status]][weblate engage]
  [![Badge: Contributor Covenant]][code of conduct]

  [![Badge: Buy me a coffee]][ppfeufer on ko-fi]

  Simple forum app for [Alliance Auth]

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [AA Forum](#aa-forum)
    - [Before You Install This Module](#before-you-install-this-module)
    - [Overview](#overview)
      - [Features](#features)
      - [Screenshots](#screenshots)
        - [Forum Index](#forum-index)
        - [Topic Overview / Board Index](#topic-overview--board-index)
        - [Topic View](#topic-view)
        - [Start New Topic (ckEditor)](#start-new-topic-ckeditor)
        - [Admin View](#admin-view)
    - [Installation](#installation)
      - [Step 1: Install the Package](#step-1-install-the-package)
      - [Step 2: Configure Alliance Auth](#step-2-configure-alliance-auth)
        - [Settings in `/home/allianceserver/myauth/myauth/settings/local.py`](#settings-in-homeallianceservermyauthmyauthsettingslocalpy)
        - [Settings in `/home/allianceserver/myauth/myauth/urls.py`](#settings-in-homeallianceservermyauthmyauthurlspy)
      - [Step 3: Configure Your Webserver](#step-3-configure-your-webserver)
        - [Apache](#apache)
        - [Nginx](#nginx)
      - [Step 4: Finalizing the Installation](#step-4-finalizing-the-installation)
      - [Step 5: Setting up Permissions](#step-5-setting-up-permissions)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  This module needs quite some configuration done before working properly. You need to
  modify your Apache/Nginx configuration as well as the global URL config of Alliance
  Auth. So please only install if you know what you're doing/feel comfortable making
  these kinds of changes. For your own sanity, and mine :-)





  - Simple permission system. Only 2 permissions. ("has_access" and "can_manage")
  - Simple administration, no maze to click through to get where you want to go.
  - Categories and boards are sortable via drag and drop in the admin view.
  - Mass creation of boards with a new category.
  - Boards can be restricted to 1 or more groups, boards without restrictions are
    visible for everyone who has access to the forum.
  - Announcement boards where only certain users can start topics.
  - Child boards (1 Level), which inherit their access restrictions from their parent.
  - CKEditor with image upload.
  - Unread topics counter as a number on the "Forum" link in the left navigation.
  - Optional notifications about new topics in a board via Discord webhooks.
  - Forum profile for each user.
  - Personal Messages.
    - Optional Discord PM for new personal messages.<br>
      This feature is disabled by default, can be enabled by each user in their forum
      profile. Needs one of the following applications installed:
      - [discordproxy]
      - [AA-Discordbot]





  ![Screenshot: Forum Index]



  ![Screenshot: Topic Overview / Board Index]



  ![Screenshot: Topic View]



  ![Screenshot: Start new Topic]



  ![Screenshot: Admin View]



  > \[!NOTE\]
  >
  > **AA Forum >= 2.0.0 needs at least Alliance Auth v4!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version of AA Forum that supports Alliance Auth v3 is `1.19.5`.

  **Important**: Please make sure you meet all preconditions before you proceed:

  - AA Forum is a plugin for Alliance Auth. If you don't have Alliance Auth running
    already, please install it first before proceeding. (see the official
    [AA installation guide] for details)
  - AA Forum needs a couple of changes made to your Webserver and Alliance Auth
    configuration. So make sure you know how to do so. The steps needed will be
    described in this document, but you need to understand what will be changed.



  Make sure you're in the virtual environment (venv) of your Alliance Auth
  installation Then install the latest release directly from PyPi.

  ```shell
  pip install aa-forum
  ```





  This is fairly simple, configure your AA settings (`local.py`) as follows:

  ```python

  INSTALLED_APPS += [
      "django_ckeditor_5",  # https://github.com/hvlads/django-ckeditor-5
      "aa_forum",  # https://github.com/ppfeufer/aa-forum
  ]


  if "django_ckeditor_5" in INSTALLED_APPS:
      
      CKEDITOR_5_FILE_UPLOAD_PERMISSION = (
          "authenticated"  # Possible values: "staff", "authenticated", "any"
      )

      MEDIA_URL = "/media/uploads/"
      MEDIA_ROOT = "/var/www/myauth/media/uploads"

      customColorPalette = [
          {"color": "hsl(4, 90%, 58%)", "label": "Red"},
          {"color": "hsl(340, 82%, 52%)", "label": "Pink"},
          {"color": "hsl(291, 64%, 42%)", "label": "Purple"},
          {"color": "hsl(262, 52%, 47%)", "label": "Deep Purple"},
          {"color": "hsl(231, 48%, 48%)", "label": "Indigo"},
          {"color": "hsl(207, 90%, 54%)", "label": "Blue"},
      ]

      CKEDITOR_5_CONFIGS = {
          "default": {
              "toolbar": [
                  "heading",
                  "|",
                  "bold",
                  "italic",
                  "link",
                  "bulletedList",
                  "numberedList",
                  "blockQuote",
              ],
          },
          "extends": {
              "blockToolbar": [
                  "paragraph",
                  "heading1",
                  "heading2",
                  "heading3",
                  "|",
                  "bulletedList",
                  "numberedList",
                  "|",
                  "blockQuote",
              ],
              "toolbar": [
                  "heading",
                  "|",
                  "outdent",
                  "indent",
                  "|",
                  "bold",
                  "italic",
                  "link",
                  "underline",
                  "strikethrough",
                  "subscript",
                  "superscript",
                  "highlight",
                  "|",
                  "insertImage",
                  "mediaEmbed",
                  "|",
                  "bulletedList",
                  "numberedList",
                  "todoList",
                  "insertTable",
                  "|",
                  "blockQuote",
                  "codeBlock",
                  "|",
                  "fontSize",
                  "fontFamily",
                  "fontColor",
                  "fontBackgroundColor",
                  "removeFormat",
                  "|",
                  "sourceEditing",
              ],
              "image": {
                  "toolbar": [
                      "imageTextAlternative",
                      "|",
                      "imageStyle:alignLeft",
                      "imageStyle:alignRight",
                      "imageStyle:alignCenter",
                      "imageStyle:side",
                      "|",
                  ],
                  "styles": [
                      "full",
                      "side",
                      "alignLeft",
                      "alignRight",
                      "alignCenter",
                  ],
              },
              "table": {
                  "contentToolbar": [
                      "tableColumn",
                      "tableRow",
                      "mergeTableCells",
                      "tableProperties",
                      "tableCellProperties",
                  ],
                  "tableProperties": {
                      "borderColors": customColorPalette,
                      "backgroundColors": customColorPalette,
                  },
                  "tableCellProperties": {
                      "borderColors": customColorPalette,
                      "backgroundColors": customColorPalette,
                  },
              },
              "heading": {
                  "options": [
                      {
                          "model": "paragraph",
                          "title": "Paragraph",
                          "class": "ck-heading_paragraph",
                      },
                      {
                          "model": "heading1",
                          "view": "h1",
                          "title": "Heading 1",
                          "class": "ck-heading_heading1",
                      },
                      {
                          "model": "heading2",
                          "view": "h2",
                          "title": "Heading 2",
                          "class": "ck-heading_heading2",
                      },
                      {
                          "model": "heading3",
                          "view": "h3",
                          "title": "Heading 3",
                          "class": "ck-heading_heading3",
                      },
                  ]
              },
          },
          "list": {
              "properties": {
                  "styles": "true",
                  "startIndex": "true",
                  "reversed": "true",
              }
          },
      }
  ```



  Now let's move on to editing the global URL configuration of Alliance Auth. To do so,
  you need to open `/home/allianceserver/myauth/myauth/urls.py` and change the
  following block right before the `handler` definitions:

  ```python
  from django.apps import apps  # Only if not already imported earlier
  from django.conf import settings  # Only if not already imported earlier
  from django.conf.urls.static import static  # Only if not already imported earlier
  from django.urls import path  # Only if not already imported earlier


  if apps.is_installed("django_ckeditor_5"):
      
      urlpatterns = (
          [
              path("ckeditor5/", include("django_ckeditor_5.urls")),
          ]
          + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
          + urlpatterns
      )
  ```

  After this, your `urls.py` should look similar to this:

  ```python
  from django.apps import apps
  from django.conf import settings
  from django.conf.urls.static import static
  from django.urls import include, path, re_path

  from allianceauth import urls


  urlpatterns = [
      path(r"", include(urls)),
  ]


  if apps.is_installed("django_ckeditor_5"):
      
      urlpatterns = (
          [
              path("ckeditor5/", include("django_ckeditor_5.urls")),
          ]
          + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
          + urlpatterns
      )

  handler500 = "allianceauth.views.Generic500Redirect"
  handler404 = "allianceauth.views.Generic404Redirect"
  handler403 = "allianceauth.views.Generic403Redirect"
  handler400 = "allianceauth.views.Generic400Redirect"
  ```



  Your webserver needs to know from where to serve the uploaded images, of course, so we
  have to tell it.



  In your vhost configuration, you have a line `ProxyPassMatch ^/static !`, which tells
  the server where to find all the static files. We're adding a similar line for the
  media, right below that one.

  Add the following right below the static proxy match:

  ```apache
  ProxyPassMatch ^/media !
  ```

  Now we also need to let the server know where to find the media directory we just
  configured the proxy for. To do so, add a new Alias to your configuration. This can
  be done right below the already existing Alias for `/static`:

  ```apache
  Alias "/media" "/var/www/myauth/media/"
  ```

  At last, a "Directory" rule is needed as well. Add the following code below the already
  existing Directory rule for the static files:

  ```apache
  <Directory "/var/www/myauth/media/">
      Require all granted
  </Directory>
  ```

  So the whole block should now look like this:

  ```apache
  ProxyPassMatch ^/static !
  ProxyPassMatch ^/media !  # *** NEW proxy rule
  ProxyPass / http://127.0.0.1:8000/
  ProxyPassReverse / http://127.0.0.1:8000/
  ProxyPreserveHost On

  Alias "/static" "/var/www/myauth/static/"
  Alias "/media" "/var/www/myauth/media/"

  <Directory "/var/www/myauth/static/">
      Require all granted
  </Directory>

  <Directory "/var/www/myauth/media/">
      Require all granted
  </Directory>
  ```

  Restart your Apache webserver.



  In order to let Nginx know where to find the uploaded files, you need to add a new
  location rule to the configuration. Add the following right below the definition for
  your "static" location.

  ```nginx
  location /media {
      alias /var/www/myauth/media;
      autoindex off;
  }
  ```

  Restart your Nginx webserver.



  Run static files collection and migrations

  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```

  Restart your supervisor services for Auth



  Now it's time to set up access permissions for your new module. You can do so in
  your admin backend.

  | ID             | Description                                                      | Notes                                                                                                                                                                                                                                                                                                                                             |
  | :------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
  | `basic_access` | Can access the AA-Forum module                                   | Grants access to the forum                                                                                                                                                                                                                                                                                                                        |
  | `manage_forum` | Can manage the AA-Forum module (Categories, topics and messages) | Users with this permission can create, edit and delete boards and categories in the "Administration" view. They can also modify and delete messages and topics in the "Forum" view. **Users with this permission are not bound by group restrictions and have access to all boards and topics, so choose wisely who is getting this permission.** |



  See [CHANGELOG.md]



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-forum/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines].
  (I promise, it's not much, just some basics)

  <!-- Inline Links -->

  [aa installation guide]: https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html
  [aa-discordbot]: https://github.com/pvyParts/allianceauth-discordbot "AA-Discordbot"
  [aa-forum license]: https://github.com/ppfeufer/aa-forum/blob/master/LICENSE
  [aa-forum on codecov]: https://codecov.io/gh/ppfeufer/aa-forum
  [aa-forum on pypi]: https://pypi.org/project/aa-forum/
  [alliance auth]: https://gitlab.com/allianceauth/allianceauth
  [automated tests on github]: https://github.com/ppfeufer/aa-forum/actions/workflows/automated-checks.yml
  [badge: automated tests]: https://github.com/ppfeufer/aa-forum/actions/workflows/automated-checks.yml/badge.svg "Automated Tests"
  [badge: buy me a coffee]: https://ko-fi.com/img/githubbutton_sm.svg "Buy me a coffee"
  [badge: code coverage]: https://codecov.io/gh/ppfeufer/aa-forum/branch/master/graph/badge.svg "Code Coverage"
  [badge: code style: black]: https://img.shields.io/badge/code%20style-black-000000.svg "Code Style: black"
  [badge: contributor covenant]: https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg "Contributor Covenant"
  [badge: license]: https://img.shields.io/github/license/ppfeufer/aa-forum "License"
  [badge: pre-commit]: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white "pre-commit"
  [badge: pre-commit.ci status]: https://results.pre-commit.ci/badge/github/ppfeufer/aa-forum/master.svg "pre-commit.ci status"
  [badge: support discord]: https://img.shields.io/discord/790364535294132234?label=discord "Support Discord"
  [badge: supported django versions]: https://img.shields.io/pypi/djversions/aa-forum?label=django "Supported Django Versions"
  [badge: supported python versions]: https://img.shields.io/pypi/pyversions/aa-forum "Supported Python Versions"
  [badge: translation status]: https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-forum/svg-badge.svg "Translation Status"
  [badge: version]: https://img.shields.io/pypi/v/aa-forum?label=release "Version"
  [black code formatter documentation]: http://black.readthedocs.io/en/latest/
  [changelog.md]: https://github.com/ppfeufer/aa-forum/blob/master/CHANGELOG.md
  [code of conduct]: https://github.com/ppfeufer/aa-forum/blob/master/CODE_OF_CONDUCT.md
  [contribution guidelines]: https://github.com/ppfeufer/aa-forum/blob/master/CONTRIBUTING.md
  [discordproxy]: https://gitlab.com/ErikKalkoken/discordproxy
  [ppfeufer on ko-fi]: https://ko-fi.com/N4N8CL1BY
  [pre-commit.ci status]: https://results.pre-commit.ci/latest/github/ppfeufer/aa-forum/master "pre-commit.ci"
  [screenshot: admin view]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/admin-view.jpg "Admin View"
  [screenshot: forum index]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/forum-index.jpg "Forum Index"
  [screenshot: start new topic]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/start-new-topic.jpg "Start new Topic (ckEditor)"
  [screenshot: topic overview / board index]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/topic-overview.jpg "Topic Overview / Board Index"
  [screenshot: topic view]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/topic-view.jpg "Topic View"
  [support discord]: https://discord.gg/zmh52wnfvM
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: 0b080653331ab77f245a249c9fc8cba988b4d8f3f2ecf67291edc0e07eb0e275
name: python-aa-forum
arch: src
version: 2.9.1
epoch: 0
release: 1
summary: Simple forum for Alliance Auth
url: https://github.com/ppfeufer/aa-forum
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-forum-2.9.1-1.src.rpm
checksum_type: sha256
description:
  [![Badge: Version]][aa-forum on pypi]
  [![Badge: License]][aa-forum license]
  [![Badge: Supported Python Versions]][aa-forum on pypi]
  [![Badge: Supported Django Versions]][aa-forum on pypi]
  ![Badge: pre-commit]
  [![Badge: pre-commit.ci status]][pre-commit.ci status]
  [![Badge: Code Style: black]][black code formatter documentation]
  [![Badge: Support Discord]][support discord]
  [![Badge: Automated Tests]][automated tests on github]
  [![Badge: Code Coverage]][aa-forum on codecov]
  [![Badge: Translation Status]][weblate engage]
  [![Badge: Contributor Covenant]][code of conduct]

  [![Badge: Buy me a coffee]][ppfeufer on ko-fi]

  Simple forum app for [Alliance Auth]

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [AA Forum](#aa-forum)
    - [Before You Install This Module](#before-you-install-this-module)
    - [Overview](#overview)
      - [Features](#features)
      - [Screenshots](#screenshots)
        - [Forum Index](#forum-index)
        - [Topic Overview / Board Index](#topic-overview--board-index)
        - [Topic View](#topic-view)
        - [Start New Topic (ckEditor)](#start-new-topic-ckeditor)
        - [Admin View](#admin-view)
    - [Installation](#installation)
      - [Step 1: Install the Package](#step-1-install-the-package)
      - [Step 2: Configure Alliance Auth](#step-2-configure-alliance-auth)
        - [Settings in `/home/allianceserver/myauth/myauth/settings/local.py`](#settings-in-homeallianceservermyauthmyauthsettingslocalpy)
        - [Settings in `/home/allianceserver/myauth/myauth/urls.py`](#settings-in-homeallianceservermyauthmyauthurlspy)
      - [Step 3: Configure Your Webserver](#step-3-configure-your-webserver)
        - [Apache](#apache)
        - [Nginx](#nginx)
      - [Step 4: Finalizing the Installation](#step-4-finalizing-the-installation)
      - [Step 5: Setting up Permissions](#step-5-setting-up-permissions)
      - [Step 6: (Optional) Settings for Discord Proxy (If Used)](#step-6-optional-settings-for-discord-proxy-if-used)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  This module needs quite some configuration done before working properly. You need to
  modify your Apache/Nginx configuration as well as the global URL config of Alliance
  Auth. So please only install if you know what you're doing/feel comfortable making
  these kinds of changes. For your own sanity, and mine :-)





  - Simple permission system. Only 2 permissions. ("has_access" and "can_manage")
  - Simple administration, no maze to click through to get where you want to go.
  - Categories and boards are sortable via drag and drop in the admin view.
  - Mass creation of boards with a new category.
  - Boards can be restricted to 1 or more groups, boards without restrictions are
    visible for everyone who has access to the forum.
  - Announcement boards where only certain users can start topics.
  - Child boards (1 Level), which inherit their access restrictions from their parent.
  - CKEditor with image upload.
  - Unread topics counter as a number on the "Forum" link in the left navigation.
  - Optional notifications about new topics in a board via Discord webhooks.
  - Forum profile for each user.
  - Personal Messages.
    - Optional Discord PM for new personal messages.<br>
      This feature is disabled by default, can be enabled by each user in their forum
      profile. Needs one of the following applications installed:
      - [discordproxy]
      - [AA-Discordbot]





  ![Screenshot: Forum Index]



  ![Screenshot: Topic Overview / Board Index]



  ![Screenshot: Topic View]



  ![Screenshot: Start new Topic]



  ![Screenshot: Admin View]



  > [!NOTE]
  >
  > **AA Forum >= 2.0.0 needs at least Alliance Auth v4!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version of AA Forum that supports Alliance Auth v3 is `1.19.5`.

  **Important**: Please make sure you meet all preconditions before you proceed:

  - AA Forum is a plugin for Alliance Auth. If you don't have Alliance Auth running
    already, please install it first before proceeding. (see the official
    [AA installation guide] for details)
  - AA Forum needs a couple of changes made to your Webserver and Alliance Auth
    configuration. So make sure you know how to do so. The steps needed will be
    described in this document, but you need to understand what will be changed.



  Make sure you're in the virtual environment (venv) of your Alliance Auth
  installation Then install the latest release directly from PyPi.

  ```shell
  pip install aa-forum
  ```





  This is fairly simple, configure your AA settings (`local.py`) as follows:

  ```python

  INSTALLED_APPS += [
      "django_ckeditor_5",  # https://github.com/hvlads/django-ckeditor-5
      "aa_forum",  # https://github.com/ppfeufer/aa-forum
  ]


  if "django_ckeditor_5" in INSTALLED_APPS:
      
      CKEDITOR_5_FILE_UPLOAD_PERMISSION = (
          "authenticated"  # Possible values: "staff", "authenticated", "any"
      )

      MEDIA_URL = "/media/uploads/"
      MEDIA_ROOT = "/var/www/myauth/media/uploads"

      customColorPalette = [
          {"color": "hsl(4, 90%, 58%)", "label": "Red"},
          {"color": "hsl(340, 82%, 52%)", "label": "Pink"},
          {"color": "hsl(291, 64%, 42%)", "label": "Purple"},
          {"color": "hsl(262, 52%, 47%)", "label": "Deep Purple"},
          {"color": "hsl(231, 48%, 48%)", "label": "Indigo"},
          {"color": "hsl(207, 90%, 54%)", "label": "Blue"},
      ]

      CKEDITOR_5_CONFIGS = {
          "default": {
              "toolbar": [
                  "heading",
                  "|",
                  "bold",
                  "italic",
                  "link",
                  "bulletedList",
                  "numberedList",
                  "blockQuote",
              ],
          },
          "extends": {
              "blockToolbar": [
                  "paragraph",
                  "heading1",
                  "heading2",
                  "heading3",
                  "|",
                  "bulletedList",
                  "numberedList",
                  "|",
                  "blockQuote",
              ],
              "toolbar": [
                  "heading",
                  "|",
                  "outdent",
                  "indent",
                  "|",
                  "bold",
                  "italic",
                  "link",
                  "underline",
                  "strikethrough",
                  "subscript",
                  "superscript",
                  "highlight",
                  "|",
                  "insertImage",
                  "mediaEmbed",
                  "|",
                  "bulletedList",
                  "numberedList",
                  "todoList",
                  "insertTable",
                  "|",
                  "blockQuote",
                  "codeBlock",
                  "|",
                  "fontSize",
                  "fontFamily",
                  "fontColor",
                  "fontBackgroundColor",
                  "removeFormat",
                  "|",
                  "sourceEditing",
              ],
              "image": {
                  "toolbar": [
                      "imageTextAlternative",
                      "|",
                      "imageStyle:alignLeft",
                      "imageStyle:alignRight",
                      "imageStyle:alignCenter",
                      "imageStyle:side",
                      "|",
                  ],
                  "styles": [
                      "full",
                      "side",
                      "alignLeft",
                      "alignRight",
                      "alignCenter",
                  ],
              },
              "table": {
                  "contentToolbar": [
                      "tableColumn",
                      "tableRow",
                      "mergeTableCells",
                      "tableProperties",
                      "tableCellProperties",
                  ],
                  "tableProperties": {
                      "borderColors": customColorPalette,
                      "backgroundColors": customColorPalette,
                  },
                  "tableCellProperties": {
                      "borderColors": customColorPalette,
                      "backgroundColors": customColorPalette,
                  },
              },
              "heading": {
                  "options": [
                      {
                          "model": "paragraph",
                          "title": "Paragraph",
                          "class": "ck-heading_paragraph",
                      },
                      {
                          "model": "heading1",
                          "view": "h1",
                          "title": "Heading 1",
                          "class": "ck-heading_heading1",
                      },
                      {
                          "model": "heading2",
                          "view": "h2",
                          "title": "Heading 2",
                          "class": "ck-heading_heading2",
                      },
                      {
                          "model": "heading3",
                          "view": "h3",
                          "title": "Heading 3",
                          "class": "ck-heading_heading3",
                      },
                  ]
              },
          },
          "list": {
              "properties": {
                  "styles": "true",
                  "startIndex": "true",
                  "reversed": "true",
              }
          },
      }
  ```



  Now let's move on to editing the global URL configuration of Alliance Auth. To do so,
  you need to open `/home/allianceserver/myauth/myauth/urls.py` and change the
  following block right before the `handler` definitions:

  ```python
  from django.apps import apps  # Only if not already imported earlier
  from django.conf import settings  # Only if not already imported earlier
  from django.conf.urls.static import static  # Only if not already imported earlier
  from django.urls import path  # Only if not already imported earlier


  if apps.is_installed("django_ckeditor_5"):
      
      urlpatterns = (
          [
              path("ckeditor5/", include("django_ckeditor_5.urls")),
          ]
          + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
          + urlpatterns
      )
  ```

  After this, your `urls.py` should look similar to this:

  ```python
  from django.apps import apps
  from django.conf import settings
  from django.conf.urls.static import static
  from django.urls import include, path, re_path

  from allianceauth import urls


  urlpatterns = [
      path(r"", include(urls)),
  ]


  if apps.is_installed("django_ckeditor_5"):
      
      urlpatterns = (
          [
              path("ckeditor5/", include("django_ckeditor_5.urls")),
          ]
          + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
          + urlpatterns
      )

  handler500 = "allianceauth.views.Generic500Redirect"
  handler404 = "allianceauth.views.Generic404Redirect"
  handler403 = "allianceauth.views.Generic403Redirect"
  handler400 = "allianceauth.views.Generic400Redirect"
  ```



  Your webserver needs to know from where to serve the uploaded images, of course, so we
  have to tell it.



  In your vhost configuration, you have a line `ProxyPassMatch ^/static !`, which tells
  the server where to find all the static files. We're adding a similar line for the
  media, right below that one.

  Add the following right below the static proxy match:

  ```apache
  ProxyPassMatch ^/media !
  ```

  Now we also need to let the server know where to find the media directory we just
  configured the proxy for. To do so, add a new Alias to your configuration. This can
  be done right below the already existing Alias for `/static`:

  ```apache
  Alias "/media" "/var/www/myauth/media/"
  ```

  At last, a "Directory" rule is needed as well. Add the following code below the already
  existing Directory rule for the static files:

  ```apache
  <Directory "/var/www/myauth/media/">
      Require all granted
  </Directory>
  ```

  So the whole block should now look like this:

  ```apache
  ProxyPassMatch ^/static !
  ProxyPassMatch ^/media !  # *** NEW proxy rule
  ProxyPass / http://127.0.0.1:8000/
  ProxyPassReverse / http://127.0.0.1:8000/
  ProxyPreserveHost On

  Alias "/static" "/var/www/myauth/static/"
  Alias "/media" "/var/www/myauth/media/"

  <Directory "/var/www/myauth/static/">
      Require all granted
  </Directory>

  <Directory "/var/www/myauth/media/">
      Require all granted
  </Directory>
  ```

  Restart your Apache webserver.



  In order to let Nginx know where to find the uploaded files, you need to add a new
  location rule to the configuration. Add the following right below the definition for
  your "static" location.

  ```nginx
  location /media {
      alias /var/www/myauth/media;
      autoindex off;
  }
  ```

  Restart your Nginx webserver.



  Run static files collection and migrations

  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```

  Restart your supervisor services for Auth



  Now it's time to set up access permissions for your new module. You can do so in
  your admin backend.

  | ID             | Description                                                      | Notes                                                                                                                                                                                                                                                                                                                                             |
  | :------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
  | `basic_access` | Can access the AA-Forum module                                   | Grants access to the forum                                                                                                                                                                                                                                                                                                                        |
  | `manage_forum` | Can manage the AA-Forum module (Categories, topics and messages) | Users with this permission can create, edit and delete boards and categories in the "Administration" view. They can also modify and delete messages and topics in the "Forum" view. **Users with this permission are not bound by group restrictions and have access to all boards and topics, so choose wisely who is getting this permission.** |



  If you are using [discordproxy] to send Discord messages, you can configure the host and port in your `local.py` settings.

  | Name                | Description                                      | Default     |
  | ------------------- | ------------------------------------------------ | ----------- |
  | `DISCORDPROXY_HOST` | Hostname used to communicate with Discord Proxy. | `localhost` |
  | `DISCORDPROXY_PORT` | Port used to communicate with Discord Proxy.     | `50051`     |



  See [CHANGELOG.md]



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-forum/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines].
  (I promise, it's not much, just some basics)

  <!-- Inline Links -->

  [aa installation guide]: https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html
  [aa-discordbot]: https://github.com/pvyParts/allianceauth-discordbot "AA-Discordbot"
  [aa-forum license]: https://github.com/ppfeufer/aa-forum/blob/master/LICENSE
  [aa-forum on codecov]: https://codecov.io/gh/ppfeufer/aa-forum
  [aa-forum on pypi]: https://pypi.org/project/aa-forum/
  [alliance auth]: https://gitlab.com/allianceauth/allianceauth
  [automated tests on github]: https://github.com/ppfeufer/aa-forum/actions/workflows/automated-checks.yml
  [badge: automated tests]: https://github.com/ppfeufer/aa-forum/actions/workflows/automated-checks.yml/badge.svg "Automated Tests"
  [badge: buy me a coffee]: https://ko-fi.com/img/githubbutton_sm.svg "Buy me a coffee"
  [badge: code coverage]: https://codecov.io/gh/ppfeufer/aa-forum/branch/master/graph/badge.svg "Code Coverage"
  [badge: code style: black]: https://img.shields.io/badge/code%20style-black-000000.svg "Code Style: black"
  [badge: contributor covenant]: https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg "Contributor Covenant"
  [badge: license]: https://img.shields.io/github/license/ppfeufer/aa-forum "License"
  [badge: pre-commit]: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white "pre-commit"
  [badge: pre-commit.ci status]: https://results.pre-commit.ci/badge/github/ppfeufer/aa-forum/master.svg "pre-commit.ci status"
  [badge: support discord]: https://img.shields.io/discord/790364535294132234?label=discord "Support Discord"
  [badge: supported django versions]: https://img.shields.io/pypi/djversions/aa-forum?label=django "Supported Django Versions"
  [badge: supported python versions]: https://img.shields.io/pypi/pyversions/aa-forum "Supported Python Versions"
  [badge: translation status]: https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-forum/svg-badge.svg "Translation Status"
  [badge: version]: https://img.shields.io/pypi/v/aa-forum?label=release "Version"
  [black code formatter documentation]: http://black.readthedocs.io/en/latest/
  [changelog.md]: https://github.com/ppfeufer/aa-forum/blob/master/CHANGELOG.md
  [code of conduct]: https://github.com/ppfeufer/aa-forum/blob/master/CODE_OF_CONDUCT.md
  [contribution guidelines]: https://github.com/ppfeufer/aa-forum/blob/master/CONTRIBUTING.md
  [discordproxy]: https://gitlab.com/ErikKalkoken/discordproxy
  [ppfeufer on ko-fi]: https://ko-fi.com/N4N8CL1BY
  [pre-commit.ci status]: https://results.pre-commit.ci/latest/github/ppfeufer/aa-forum/master "pre-commit.ci"
  [screenshot: admin view]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/admin-view.jpg "Admin View"
  [screenshot: forum index]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/forum-index.jpg "Forum Index"
  [screenshot: start new topic]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/start-new-topic.jpg "Start new Topic (ckEditor)"
  [screenshot: topic overview / board index]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/topic-overview.jpg "Topic Overview / Board Index"
  [screenshot: topic view]: https://raw.githubusercontent.com/ppfeufer/aa-forum/master/docs/images/topic-view.jpg "Topic View"
  [support discord]: https://discord.gg/zmh52wnfvM
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: ff0c483d6b29d4aaf59df6841e2cb34b3d801737613d87bdae7440204eb6687c
name: python-aa-freight
arch: src
version: 1.12.0
epoch: 0
release: 1
summary: Freight is an Alliance Auth app for running a freight service.
url: https://gitlab.com/ErikKalkoken/aa-freight
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-freight-1.12.0-1.src.rpm
checksum_type: sha256
description:
  Freight is an [Alliance Auth](https://gitlab.com/allianceauth/allianceauth) (AA) app for running a freight service.

  [![release](https://img.shields.io/pypi/v/aa-freight?label=release)](https://pypi.org/project/aa-freight/)
  [![python](https://img.shields.io/pypi/pyversions/aa-freight)](https://pypi.org/project/aa-freight/)
  [![django](https://img.shields.io/pypi/djversions/aa-freight?label=django)](https://pypi.org/project/aa-freight/)
  [![pipeline](https://gitlab.com/ErikKalkoken/aa-freight/badges/master/pipeline.svg)](https://gitlab.com/ErikKalkoken/aa-freight/-/pipelines)
  [![codecov](https://codecov.io/gl/ErikKalkoken/aa-freight/branch/master/graph/badge.svg?token=SDOK25QUHd)](https://codecov.io/gl/ErikKalkoken/aa-freight)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/ErikKalkoken/aa-freight/-/blob/master/LICENSE)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![chat](https://img.shields.io/discord/790364535294132234)](https://discord.gg/zmh52wnfvM)



  - [Overview](#overview)
  - [Key Features](#key-features)
  - [Screenshots](#screenshots)
  - [Installation](#installation)
  - [Updating](#updating)
  - [Settings](#settings)
  - [Operation Mode](#operation-mode)
  - [Permissions](#permissions)
  - [Pricing](#pricing)
  - [Contract Check](#contract-check)
  - [Change Log](CHANGELOG.md)



  This app helps running a central freight service for an alliance or corporation. It allows different modes of operation that support the most common approaches a central freight service is setup. (e.g. for alliance members only or run by a corporation outside the alliance)



  Freight offers the following main features:

  - Reward calculator allowing members to easily calculate the correct reward for their a courier contract
  - Page showing the list of currently outstanding courier contracts incl. an indicator if the contract is compliant with the pricing for the respective route ("contract check")
  - Multiple routes can be defined, each with its own pricing.
  - It's possible to have the same pricing for both directions, or to have different pricings for each direction of the same route.
  - Automatic notifications to freight pilots on Discord informing them about new courier contracts
  - Automatic notifications to contract issuers on Discord informing them about the developing status of their contract or potentially issues
  - Contract issuer can always check the current status of his courier contracts
  - Statistics page showing key performance metrics for routes, pilots, customers
  - Language support for English 🇺🇸 and German 🇩🇪





  ![calculator](https://i.imgur.com/h9BZG4D.png)



  ![contract list](https://i.imgur.com/aJc6dwG.png)



  ![notification](https://i.imgur.com/ynWnW0o.png)





  Install into your Alliance Auth virtual environment from PyPI:

  ```bash
  pip install aa-freight
  ```



  Update the Eve Online app used for authentication in your AA installation to include the following scopes:

  ```plain
  esi-universe.read_structures.v1
  esi-contracts.read_corporation_contracts.v1
  ```



  Configure your AA settings (`local.py`) as follows:

  - Add `'freight'` to `INSTALLED_APPS`
  - Add these lines add to bottom of your settings file:

     ```python
     
     CELERYBEAT_SCHEDULE['freight_run_contracts_sync'] = {
         'task': 'freight.tasks.run_contracts_sync',
         'schedule': crontab(minute='*/10'),
     }
     ```

  If you want to setup notifications for Discord you can now also add the required settings. Check out section **Settings** for details.



  This app uses celery for critical functions like refreshing data from ESI. We strongly recommend to enable the following additional settings for celery workers to enable proper logging and to protect against potential memory leaks:

  - To enable logging of celery tasks up to info level: `-l info`

  - To automatically restart workers that grow above 256 MB: `--max-memory-per-child 262144`

  Here is how an example config would look for workers in your supervisor conf:

  ```plain
  command=/home/allianceserver/venv/auth/bin/celery -A myauth worker -l info --max-memory-per-child 262144
  ```

  On Ubuntu you can run `systemctl status supervisor` to see where your supervisor config file is located.

  Note that you need to restart the supervisor service itself to activate those changes.

  e.g. on Ubuntu:

  ```bash
  systemctl restart supervisor
  ```



  Run migrations & copy static files

  ```bash
  python manage.py migrate
  python manage.py collectstatic
  ```

  Restart your supervisor services for AA



  Now you can access Alliance Auth and setup permissions for your users. See section **Permissions** below for details.



  Finally you need to set the contract handler with the character that will be used for fetching the corporation or alliance contracts and related structures. Just click on "Set Contract Handler" and add the requested token. Note that only users with the appropriate permission will be able to see and use this function. However, the respective character does not need any special corporation roles. Any corp member will work.

  Once a contract handler is set the app will start fetching contracts. Wait a minute and then reload the contract list page to see the result.



  Finally go ahead and define the first pricing of a courier route. See section **Pricing** for details.

  That's it. The Freight app is fully installed and ready to be used.



  If you want Freight to send contract updates as direct messages to your users you need to have [Discord Proxy](https://gitlab.com/ErikKalkoken/discordproxy) running. You also need to have Discord Proxy installed in the same Python venv like Freight.

  Once Discord Proxy is running just set `FREIGHT_DISCORDPROXY_ENABLED = True` in your local settings to enable this feature.

  For details on how to setup Discord Proxy (if you don't have it running already) please see the [installation documentation](https://discordproxy.readthedocs.io/en/latest/operations.html#installation).



  To update your existing installation of Freight first enable your virtual environment.

  Then run the following commands from your AA project directory (the one that contains `manage.py`).

  ```bash
  pip install -U aa-freight
  ```

  ```bash
  python manage.py migrate
  ```

  ```bash
  python manage.py collectstatic
  ```

  Finally restart your AA supervisor services.



  Here is a list of available settings for this app. They can be configured by adding them to your AA settings file (`local.py`). If they are not set the defaults are used.

  Name|Description|Default
  --|--|--
  `DISCORDPROXY_HOST`|Port used to communicate with Discord Proxy.|`localhost`
  `DISCORDPROXY_PORT`|Host used to communicate with Discord Proxy.|`50051`
  `FREIGHT_APP_NAME`|Name of this app as shown in the Auth sidebar, page titles and as default avatar name for notifications.|`Freight`
  `FREIGHT_CONTRACT_SYNC_GRACE_MINUTES`|Sets the number minutes until a delayed sync will be recognized as error.|`30`
  `FREIGHT_DISCORDPROXY_ENABLED`|Whether to use Discord Proxy for sending customer notifications as direct messages. This requires the app Discord Proxy to be setup and running on your system and AA's Discord Services to be enabled.|`False`
  `FREIGHT_DISCORD_AVATAR_NAME`|Will be shown as "user name" instead of what is configured as app name for notifications when defined. Optional.|`None`
  `FREIGHT_DISCORD_CUSTOMERS_WEBHOOK_URL`|Webhook URL for the Discord channel where contract notifications for customers should appear. Optional.|`None`
  `FREIGHT_DISCORD_DISABLE_BRANDING`|Turns off setting the name and avatar url for the webhook. Notifications will be posted by a bot called "Freight" with the logo of your organization as avatar image.|`False`
  `FREIGHT_DISCORD_MENTIONS`|Optional mention string put in front of every notification to create pings.  Typical values are: `@here` or `@everyone`.  You can also mention roles, however you will need to add the role ID for that. The format is: `<@&role_id>` and you can get the role ID by entering `_<@role_name>` in a channel on Discord. See [this link](https://www.reddit.com/r/discordapp/comments/580qib/how_do_i_mention_a_role_with_webhooks/) for details.|`None`
  `FREIGHT_DISCORD_WEBHOOK_URL`|Webhook URL used for the Discord channel where contract notifications for pilots should appear. Optional.|`None`
  `FREIGHT_ESI_TIMEOUT_ENABLED`|Whether ESI requests have a timeout.|`True`
  `FREIGHT_FULL_ROUTE_NAMES`|Show full name of locations in route, e.g on calculator drop down.|`False`
  `FREIGHT_HOURS_UNTIL_STALE_STATUS`|Defines after how many hours the status of a contract is considered to be stale.  Customer notifications will not be sent for a contract status that has become stale. This settings also prevents the app from sending out customer notifications for old contracts.|`24`
  `FREIGHT_NOTIFY_ALL_CONTRACTS`|Send discord notifications about every contract, even if no pricing defined.|`False`
  `FREIGHT_OPERATION_MODE`|Operation mode to use.  Note that switching operation modes requires you to remove the existing contract handler with all its contracts and then setup a new contract handler.|`my_alliance`
  `FREIGHT_STATISTICS_MAX_DAYS`|Sets the number of days that are considered for creating the statistics.|`90`



  The operation mode defines which contracts are processed by the Freight. For example you can define that only contracts assigned to your alliance are processed. Any courier contract that is  not in scope of the configured operation mode will be ignored by the freight app and e.g. not show up in the contract list or generate notifications.



  The following operation modes are available:

  Name | Description
  -- | --
  `'my_alliance'`| courier contracts assigned to configured alliance by an alliance member
  `'my_corporation'`| courier contracts assigned to configured corporation by a corp member
  `'corp_in_alliance'`| courier contracts assigned to configured corporation by an alliance member
  `'corp_public'`| any courier contract assigned to the configured corporation



  You can switch to a different operation mode with the following process. Please note that this will delete your current contract statistics:

  - Delete the current contract handler. This can be done on the admin site with the delete action.
  - Change the operation mode in your local settings
  - Restart your AA instance
  - Create a new contract handler with the "Setup My Corporation/Alliance" button



  This is an overview of all permissions used by this app:

  Name | Purpose | Code
  -- | -- | --
  Can add / update locations | User can add and update Eve Online contract locations, e.g. stations and upwell structures |  `add_location`
  Can access this app |Enabling the app for a user. This permission should be enabled for everyone who is allowed to use the app (e.g. Member state) |  `basic_access`
  Can setup contract handler | Add or updates the character for syncing contracts. This should be limited to users with admins / leadership privileges. Note that characters need to retain that permission for the update process to continue to function. |  `setup_contract_handler`
  Can use the calculator | Enables using the calculator page and the "My Contracts" page. This permission is usually enabled for every user with the member state. |  `use_calculator`
  Can view the contracts list | Enables viewing the page with all outstanding courier contracts  |  `view_contracts`
  Can see statistics | User with this permission can view the statistics page  |  `view_statistics`



  A pricing defines a route and the parameters for calculating the price for that route along with some additional information for the users. You can define multiple pricings if you want, but at least one pricing has to be defined for this app to work.

  Pricing routes are bidirectional by default. For bidirectional pricings courier contracts in both directions are matched against the same pricing. Alternatively pricings can also be defined individually for each direction.

  Pricings are defined in the admin section of AA, so you need staff permissions to access it.

  Most parameters of a pricing are optional, but you need to define at least one of the four pricing components to create a valid pricing. It's also possible to define a route that does not require a reward by setting "Price base" to 0 and not setting any other pricing components.

  All pricing parameters can be found on the admin panel under Pricing, with the exception of the "price per volume modifier", which is a global pricing parameter and therefore property of the ContractHandler.

  Parameter | Description | Pricing Functionality
  -- | -- | --
  Start Location | Starting station or structure for courier route | -
  End Location | Destination station or structure for courier route  | -
  Is Active | Non active pricings will not be used or shown | -
  Is Bidirectional | Wether this pricing shall apply to contracts for both directions of the route or only the specified direction | -
  Price base | Base price in ISK. If this is the only defined pricing component it will be shown as "Fix price" in the calculator. | Pricing component
  Price min | Minimum total price in ISK | Pricing component
  Price per volume | Add-on price per m3 volume in ISK | Pricing component
  Use price per volume modifier | Switch defining if the global price per volume modifier should be used for pricing | Pricing flag
  Price per volume modifier | Global modifier for price per volume in percent.<br>The purpose of this modifier is to be able to compensate for fuel price fluctuations, without having to adjust pricing for many individual routes. When used it will be added to the price per volume. It can be positive and negative, and the resulting price per volume will always be >= 0.<br>e.g. if you have set a price of 200 ISK per m3 on a route, and set the global modifier to 10% then you get 220 ISK per m3 effectively.<br>(defined for ContractHandler) | Pricing modifier
  Price per collateral_percent | Add-on price in % of collateral | Pricing component
  Collateral min | Minimum required collateral in ISK | Validation check
  Collateral max | Maximum allowed collateral in ISK | Validation check
  Volume min | Minimum allowed volume in m3 | Validation check
  Volume max | Maximum allowed volume in m3 | Validation check
  Days to expire | Recommended days for contracts to expire | Info
  Days to complete | Recommended days for contract completion | Info
  Details | Text with additional instructions for using this pricing | Info

  > **How to add new locations**:<br>If you are creating a pricing for a new route you may need to first add the locations (stations and/or structures).<br>The easiest way is to create a courier contract between those locations in game and then run contract sync. Those locations will then be added automatically.<br>Alternatively you can use the "Add Location" feature on the main page of the app. This will require you to provide the respective station or structure eve ID.



  The app will automatically check if a newly issued contract complies with the pricing parameters for the respective route. If you want to be notified about all contracts, even without correct pricing, set `FREIGHT_NOTIFY_ALL_CONTRACTS` option to `True`

  Compliant contracts will have a green checkmark (✓) in the "Contract Check" column on the contract list. Related notifications on Discord will be colored in green.

  Non-compliant contracts will have a red warning sign in the "Contract Check" column on the contract list. And related notifications on Discord will be colored in red. In addition the first customer notification will inform the customer about the issues and ask him to correct the issues.

  The following parameters will be checked (if they have been defined):

  - reward in contract >= calculated reward
  - volume min <= volume in contract <= volume max
  - collateral min <= collateral in contract <= collateral max

  Deviations on "Days to expire" and "Days to complete" are currently not part of the contract check and only used to show the recommended contract parameters in the calculator.


pkgId: 01da68a5690a1b30978e31ef17fc7e0895c171e46c40f34b906bad0b0374c1ad
name: python-aa-inactivity
arch: src
version: 1.1.1
epoch: 0
release: 1
summary: "Activity monitoring app for Alliance Auth.
url: https://gitlab.com/eclipse-expeditions/aa-inactivity
rpm_license: GNU General Public License v3 (GPLv3)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-inactivity-1.1.1-1.src.rpm
checksum_type: sha256
description:
  This is a player activity monitoring plugin app for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth) (AA).

  ![release](https://img.shields.io/pypi/v/aa-inactivity?label=release)
  ![License](https://img.shields.io/badge/license-GPL-green)
  ![python](https://img.shields.io/pypi/pyversions/aa-inactivity)
  ![django](https://img.shields.io/pypi/djversions/aa-inactivity?label=django)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  ![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)



  - [Features](#features)
  - [Screenshots](#screenshots)
  - [Installation](#installation)
  - [Permissions](#permissions)



  - Automatically notify users who become inactive.
  - Automatically notify managers when users become inactive.
  - Approval process for leave of absence requests
  - Can inform managers about various events via Discord webhook
  - List of inactive users
  - Define through policies after how many days a user of absence a user is considered inactive
  - Fetching the last login dates from Member Audit to determine how long a user has been inactive

  Users are notified on Alliance Auth. If you want those notifications to be forwarded as DM on Discord, please check out this app: [Discord Notify](https://gitlab.com/ErikKalkoken/aa-discordnotify).



  A user creating a new leave of absence request:

  ![request](https://imgpile.com/images/9oMUiC.png)

  A manager reviewing a leave of absence request:

  ![pending](https://imgpile.com/images/9oKyoP.png)

  A manager looking through the list of currently inactive and notified users:

  ![notified](https://imgpile.com/images/9oMIrx.png)





  This app needs [Member Audit](https://gitlab.com/ErikKalkoken/aa-memberaudit) to function. Please make sure it is installed before continuing.



  Make sure you are in the virtual environment (venv) of your Alliance Auth installation. Then install the newest release from PyPI:

  ```bash
  pip install aa-inactivity`
  ```



  Add `inactivity` to your `INSTALLED_APPS`, and add the following task definition:

  ```python
  CELERYBEAT_SCHEDULE['inactivity_check_inactivity'] = {
      'task': 'inactivity.tasks.check_inactivity',
      'schedule': crontab(minute=0, hour=0),
  }
  ```



  Run migrations:

  ```bash
  python manage.py migrate
  python manage.py collectstatic
  ```

  Restart your supervisor services for Auth



  This app uses permissions to control access to features.

  Name | Purpose | Code
  -- | -- | --
  general - Can access this app | Enabling the app for a user. This permission should be enabled for everyone who is allowed to use the app |  `basic_access`
  general - Can manage leave of absence requests | Allows a user to approve/deny loa requests. |  `manage_leave`


pkgId: d330514fc1b021509e78771cd530a367564a57777d184240ef0465adf56106be
name: python-aa-incursions
arch: src
version: 0.6.1a0
epoch: 0
release: 1
summary: AllianceAuth Incursion Tools
url: https://gitlab.com/tactical-supremacy/aa-incursions
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-incursions-0.6.1a0-1.src.rpm
checksum_type: sha256
description:
  Incursion Tools for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/).

  ![License](https://img.shields.io/badge/license-MIT-green)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)

  ![python](https://img.shields.io/badge/python-3.8-informational)
  ![python](https://img.shields.io/badge/python-3.9-informational)
  ![python](https://img.shields.io/badge/python-3.10-informational)
  ![python](https://img.shields.io/badge/python-3.11-informational)

  ![django-4.0](https://img.shields.io/badge/django-4.0-informational)



  - AA-Discordbot Cogs for information about active incursions, their status and any set Focus
  - Webhook notifications for new incursions and them changing state (Mobilizing/Withdrawing)



  - Waitlist
  - AA Fittings Integration
  - Secure Groups Integration





  Incursions is an App for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/), Please make sure you have this installed. incursions is not a standalone Django Application

  Incursions needs the App [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse) to function. Please make sure it is installed before continuing.



  ```shell
  pip install aa-incursions
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'incursions'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python



  CELERYBEAT_SCHEDULE['incursions_update_incursions'] = {
      'task': 'incursions.tasks.update_incursions',
      'schedule': crontab(minute='*/1', hour='*'),
  }
  ```



  - Run migrations `python manage.py migrate`
  - Gather your staticfiles `python manage.py collectstatic`
  - Restart your project `supervisorctl restart myauth:`



  - `python manage.py eveuniverse_load_data map` This will load Regions, Constellations and Solar Systems



  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at <https://developers.eveonline.com> before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.


pkgId: dfe5cd5357d2ae3e3dbd916d11adf463e3ef4393687f709a7f8261a48fa371e8
name: python-aa-intel-tool
arch: src
version: 2.5.0
epoch: 0
release: 1
summary: A simple parser for D-Scans and more for Alliance Auth
url: https://github.com/ppfeufer/aa-intel-tool
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-intel-tool-2.5.0-1.src.rpm
checksum_type: sha256
description:
  [![Badge: Version]][aa intel tool on pypi]
  [![Badge: License]][aa intel tool license]
  [![Badge: Supported Python Versions]][aa intel tool on pypi]
  [![Badge: Supported Django Versions]][aa intel tool on pypi]
  ![Badge: pre-commit]
  [![Badge: pre-commit.ci status]][pre-commit.ci status]
  [![Badge: Code Style: black]][black code formatter documentation]
  [![Badge: Support Discord]][support discord]
  [![Badge: Automated Tests]][automated tests on github]
  [![Badge: Code Coverage]][aa intel tool on codecov]
  [![Badge: Translation Status]][weblate engage]
  [![Badge: Contributor Covenant]][code of conduct]

  [![Badge: Buy me a coffee]][ppfeufer on ko-fi]

  D-Scans and more in [Alliance Auth].

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=2 -->

  - [Overview](#overview)
    - [Features](#features)
    - [Screenshots](#screenshots)
      - [Chat Scan](#chat-scan)
      - [D-Scan](#d-scan)
      - [Fleet Composition](#fleet-composition)
  - [Installation](#installation)
    - [Step 1: Install the Package](#step-1-install-the-package)
    - [Step 2: Configure Alliance Auth](#step-2-configure-alliance-auth)
      - [Add the App to Alliance Auth](#add-the-app-to-alliance-auth)
      - [Add the Scheduled Task](#add-the-scheduled-task)
      - [(Optional) Allow Public Views](#optional-allow-public-views)
    - [Step 4: Preload Eve Universe Data](#step-4-preload-eve-universe-data)
    - [Step 5: Finalizing the Installation](#step-5-finalizing-the-installation)
    - [Step 6: Update Your Webserver Configuration](#step-6-update-your-webserver-configuration)
      - [Apache 2](#apache-2)
      - [Nginx](#nginx)
  - [Settings](#settings)
  - [Changelog](#changelog)
  - [Translation Status](#translation-status)
  - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________





  The following modules can be enabled or disabled.
  See [Settings](#settings) section for details.

  - Chat scan module (Disabled by default due to its possible high number of ESI calls)
  - D-Scan module





  ![Image: Chat Scan Module]



  ![Image: D-Scan Module]



  ![Image: Fleet Composition Module]



  > \[!NOTE\]
  >
  > **AA Intel Tool >= 2.0.0 needs at least Alliance Auth v4.0.0!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version compatible with Alliance Auth v3 is `1.2.0`.

  **Important**: Please make sure you meet all preconditions before you proceed:

  - AA Intel Tool is a plugin for [Alliance Auth]. If you don't have Alliance Auth running
    already, please install it first before proceeding. (see the official
    [Alliance Auth installation guide] for details)
  - AA Intel Tool needs [Eve Universe] to function. Please make sure it is installed,
    before continuing.



  Make sure you're in the virtual environment (venv) of your Alliance Auth
  installation Then install the latest release directly from PyPi.

  ```shell
  pip install aa-intel-tool
  ```





  This is fairly simple, configure your AA settings (`local.py`) as follows:

  Add `eveuniverse` (if not already done so for a different app) and `aa_intel_tool` to
  the list of `INSTALLED_APPS`.

  ```python

  INSTALLED_APPS += [
      "eveuniverse",
      "aa_intel_tool",  # https://github.com/ppfeufer/aa-intel-tool
  ]
  ```



  To remove old scans from your DB, add the following task.
  The retention time can be adjusted through the `INTELTOOL_SCAN_RETENTION_TIME` setting.

  ```python
  if "aa_intel_tool" in INSTALLED_APPS:
      
      CELERYBEAT_SCHEDULE["AA Intel Tool :: Housekeeping"] = {
          "task": "aa_intel_tool.tasks.housekeeping",
          "schedule": crontab(minute="0", hour="1"),
      }
  ```



  This app supports AA's feature of public views. To allow this feature, please add
  `"aa_intel_tool",` to the list of `APPS_WITH_PUBLIC_VIEWS` in your `local.py`:

  ```python




  APPS_WITH_PUBLIC_VIEWS = [
      "aa_intel_tool",  # https://github.com/ppfeufer/aa-intel-tool
  ]
  ```

  > **Note**
  >
  > If you don't have a list for `APPS_WITH_PUBLIC_VIEWS` yet, then add the whole
  > block from here. This feature has been added in Alliance Auth v3.6.0 so you
  > might not yet have this list in your `local.py`.



  AA Intel Tool utilizes the EveUniverse module, so it doesn't need to ask ESI for ship
  information. To set this up, you now need to run the following command.

  ```shell
  python manage.py aa_intel_tool_load_eve_types
  ```



  Run static files collection and migrations.

  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```

  Restart your supervisor services for Auth.



  By default, webservers have a timout of about 30 seconds for requests. So we have to
  tweak that a little bit, since parsing intel data can take a while, and we don't want
  the webserver to spoil our fun, right?



  Open your vhost configuration and add the following 2 lines right after the
  `ProxyPreserveHost On` directive:

  ```apache
  ProxyTimeout 600
  Timeout      600
  ```

  Restart your Apache2 service.



  Open your vhost configuration and add the following lines inside the `location / {`
  directive:

  ```nginx
  proxy_connect_timeout 600;
  proxy_read_timeout    600;
  proxy_send_timeout    600;
  send_timeout          600;
  ```

  Restart your Nginx service.



  To customize the app, the following settings are available and can be made in
  your `local.py`.

  > **Warning**
  >
  > Enable the chat scan module at your own risk. This module has the potential to
  > generate a huge number of ESI calls, which CCP might not be too happy about.

  | Name                              | Description                                                                                                                             | Default |
  | :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :------ |
  | INTELTOOL_ENABLE_MODULE_CHATSCAN  | Enable or disable the chat scan module.                                                                                                 | False   |
  | INTELTOOL_ENABLE_MODULE_DSCAN     | Enable or disable the d-scan module.                                                                                                    | True    |
  | INTELTOOL_ENABLE_MODULE_FLEETCOMP | Enable or disable the fleet composition module.                                                                                         | True    |
  | INTELTOOL_SCAN_RETENTION_TIME     | Set the time in days for how long the scans will be kept in the database. Set to 0 to keep scans indefinitely.                          | 30      |
  | INTELTOOL_CHATSCAN_MAX_PILOTS     | Set the limit of pilots for chat scans, since these can take quite a long time to process. Set to 0 to disable.                         | 500     |
  | INTELTOOL_DSCAN_GRID_SIZE         | Set the grid size for D-Scans.<br/>This defines the size of the grid in km in which ships and structures are considered to be "on grid" | 10000   |

  > **Note**
  >
  > **A word about the chat scan limitations:**
  >
  > It is advised to keep the `INTELTOOL_CHATSCAN_MAX_PILOTS` to a sane number. Large
  > chat scans can take quite some time to parse and from a certain number of pilots, the
  > bottleneck might be your browser refusing to render the results page.
  > (Source: Trust me, bro …)



  See [CHANGELOG.md]



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-intel-tool/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines].\
  (I promise, it's not much, just some basics)

  <!-- Inline Links -->

  [aa intel tool license]: https://github.com/ppfeufer/aa-intel-tool/blob/master/LICENSE
  [aa intel tool on codecov]: https://codecov.io/gh/ppfeufer/aa-intel-tool
  [aa intel tool on pypi]: https://pypi.org/project/aa-intel-tool/
  [alliance auth]: https://gitlab.com/allianceauth/allianceauth "Alliance Auth on GitLab"
  [alliance auth installation guide]: https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html
  [automated tests on github]: https://github.com/ppfeufer/aa-intel-tool/actions/workflows/automated-checks.yml
  [badge: automated tests]: https://github.com/ppfeufer/aa-intel-tool/actions/workflows/automated-checks.yml/badge.svg "Automated Tests"
  [badge: buy me a coffee]: https://ko-fi.com/img/githubbutton_sm.svg "Buy Me a Coffee!"
  [badge: code coverage]: https://codecov.io/gh/ppfeufer/aa-intel-tool/branch/master/graph/badge.svg "Code Coverage"
  [badge: code style: black]: https://img.shields.io/badge/code%20style-black-000000.svg "Code Style: black"
  [badge: contributor covenant]: https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg "Contributor Covenant"
  [badge: license]: https://img.shields.io/github/license/ppfeufer/aa-intel-tool "License"
  [badge: pre-commit]: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white "pre-commit"
  [badge: pre-commit.ci status]: https://results.pre-commit.ci/badge/github/ppfeufer/aa-intel-tool/master.svg "pre-commit.ci status"
  [badge: support discord]: https://img.shields.io/discord/790364535294132234?label=discord "Support Discord"
  [badge: supported django versions]: https://img.shields.io/pypi/djversions/aa-intel-tool?label=django "Supported Django Versions"
  [badge: supported python versions]: https://img.shields.io/pypi/pyversions/aa-intel-tool "Supported Python Versions"
  [badge: translation status]: https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-intel-tool/svg-badge.svg "Translation Status"
  [badge: version]: https://img.shields.io/pypi/v/aa-intel-tool?label=release "Version"
  [black code formatter documentation]: http://black.readthedocs.io/en/latest/
  [changelog.md]: https://github.com/ppfeufer/aa-intel-tool/blob/master/CHANGELOG.md
  [code of conduct]: https://github.com/ppfeufer/aa-intel-tool/blob/master/CODE_OF_CONDUCT.md
  [contribution guidelines]: https://github.com/ppfeufer/aa-intel-tool/blob/master/CONTRIBUTING.md "Contribution Guidelines"
  [eve universe]: https://gitlab.com/ErikKalkoken/django-eveuniverse "Eve Universe"
  [image: chat scan module]: https://raw.githubusercontent.com/ppfeufer/aa-intel-tool/master/docs/images/representation/chat-scan.jpg "Chat Scan Module"
  [image: d-scan module]: https://raw.githubusercontent.com/ppfeufer/aa-intel-tool/master/docs/images/representation/d-scan.jpg "D-Scan Module"
  [image: fleet composition module]: https://raw.githubusercontent.com/ppfeufer/aa-intel-tool/master/docs/images/representation/fleet-composition.jpg "Fleet Composition Module"
  [ppfeufer on ko-fi]: https://ko-fi.com/ppfeufer "Buy Me a Coffee!"
  [pre-commit.ci status]: https://results.pre-commit.ci/latest/github/ppfeufer/aa-intel-tool/master "pre-commit.ci"
  [support discord]: https://discord.gg/zmh52wnfvM "Alliance Auth Community Apps Support Discord"
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: c42c1ca5362912b590c9af0b1d5fbceb5e3457975cac8ed298fda1bd20846f57
name: python-aa-killstats
arch: src
version: 0.5.1
epoch: 0
release: 1
summary: Killboard Stats shows Hall of Shame/Fame, Kills, Top Kills,Loss,etc.
url: https://github.com/Geuthur/aa-killstats
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-killstats-0.5.1-1.src.rpm
checksum_type: sha256
description:
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Geuthur/aa-killstats/master.svg)](https://results.pre-commit.ci/latest/github/Geuthur/aa-killstats/master)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![Tests](https://github.com/Geuthur/aa-killstats/actions/workflows/autotester.yml/badge.svg)](https://github.com/Geuthur/aa-killstats/actions/workflows/autotester.yml)
  [![codecov](https://codecov.io/gh/Geuthur/aa-killstats/graph/badge.svg?token=jRicu5enZF)](https://codecov.io/gh/Geuthur/aa-killstats)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/W7W810Q5J4)

  Killstats for Corporations & Alliances, Hall of Fame, Hall of Shame, etc.



  - [AA Killstats](#aa-killstats)
    - [Features](#features)
    - [Upcoming](#upcoming)
    - [Installation](#features)
      - [Step 0 - Check dependencies are installed](#step0)
      - [Step 1 - Install the Package](#step1)
      - [Step 2 - Configure Alliance Auth](#step2)
      - [Step 3 - Add the Scheduled Tasks and Settings](#step3)
      - [Step 4 - Migration to AA](#step4)
      - [Step 5 - Setting up Permissions](#step5)
      - [Step 6 - (Optional) Setting up Compatibilies](#step6)
    - [Highlights](#highlights)



  - Graphical Overview
  - Corporation & Alliance Overview
  - Kills/Losses
  - Main Character and Alts combined ([explanation](/killstats/docs/explanation.md))
  - Hall of Fame, Hall of Shame
  - Killstats like Top Kill, Top Killer, Top Loss, Alltime Killer, etc.
  - Top 10 list for each Month



  - Filtering Settings for each Corporation / Alliance
  - Administration Access for specific Corps or Alliances



  > \[!NOTE\]
  > AA Killstats needs at least Alliance Auth v4.0.0
  > Please make sure to update your Alliance Auth before you install this APP



  - Ledger needs the app [django-eveuniverse](https://apps.allianceauth.org/apps/detail/django-eveuniverse) to function. Please make sure it is installed.



  Make sure you're in your virtual environment (venv) of your Alliance Auth then install the pakage.

  ```shell
  pip install aa-killstats
  ```



  Configure your Alliance Auth settings (`local.py`) as follows:

  - Add `'killstats',` to `INSTALLED_APPS`



  To set up the Scheduled Tasks add following code to your `local.py`

  ```python
  CELERYBEAT_SCHEDULE["killstats_killmail_fetch"] = {
      "task": "killstats.tasks.killmail_fetch_all",
      "schedule": crontab(minute=0, hour="*/1"),
  }
  ```



  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```



  With the Following IDs you can set up the permissions for the KILLSTATS

  | ID             | Description                     |                                                                  |
  | :------------- | :------------------------------ | :--------------------------------------------------------------- |
  | `basic_access` | Can access this app, Killstats. | All Members with the Permission can access the Killstats App.    |
  | `admin_access` | Has access to all killstats.    | Has access to all Killstats Views, Can add Corporation/Alliance. |



  The Following Settings can be setting up in the `local.py`

  | Setting                        | Configuration(default)     | Description                                  |
  | :----------------------------- | :------------------------- | :------------------------------------------- |
  | `KILLSTATS_APP_NAME`           | `"YOURNAME"` ("Killstats") | Set the name of the APP.                     |
  | `KILLSTATS_LOGGER_USE`         | `True / False` (False)     | Set to use own Logger File.                  |
  | `KILLBOARD_API_CACHE_LIFETIME` | `5` (10)                   | Set Cache Lifetime for Killstats in Minutes. |

  If you set up KILLSTATS_LOGGER_USE to `True` you need to add the following code below:

  ```python
  LOGGING_KILLSTATS = {
      "handlers": {
          "killstats_file": {
              "level": "INFO",
              "class": "logging.handlers.RotatingFileHandler",
              "filename": os.path.join(BASE_DIR, "log/killstats.log"),
              "formatter": "verbose",
              "maxBytes": 1024 * 1024 * 5,
              "backupCount": 5,
          },
      },
      "loggers": {
          "killstats": {
              "handlers": ["killstats_file", "console"],
              "level": "INFO",
          },
      },
  }
  LOGGING["handlers"].update(LOGGING_KILLSTATS["handlers"])
  LOGGING["loggers"].update(LOGGING_KILLSTATS["loggers"])
  ```



  ![Stats](/killstats/docs/img/killstats1.png)
  ![Hall](/killstats/docs/img/killstats2.png)
  ![Kills](/killstats/docs/img/killstats3.png)

  > \[!NOTE\]
  > Contributing
  > You want to improve the project?
  > Just Make a [Pull Request](https://github.com/Geuthur/aa-killstats/pulls) with the Guidelines.
  > We Using pre-commit

rpm_license:
  GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007  Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.  Preamble  The GNU General Public License is a free, copyleft license for software and other kinds of works.  The licenses for most software and other practical works are designed to take away your freedom to share and change the works.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.  We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors.  You can apply it to your programs, too.  When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.  To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights.  Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.  For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their rights.  Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.  For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software.  For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.  Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so.  This is fundamentally incompatible with the aim of protecting users' freedom to change the software.  The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable.  Therefore, we have designed this version of the GPL to prohibit the practice for those products.  If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.  Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary.  To prevent this, the GPL assures that patents cannot be used to render the program non-free.  The precise terms and conditions for copying, distribution and modification follow.  TERMS AND CONDITIONS  0. Definitions.  "This License" refers to version 3 of the GNU General Public License.  "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.  "The Program" refers to any copyrightable work licensed under this License.  Each licensee is addressed as "you".  "Licensees" and "recipients" may be individuals or organizations.  To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy.  The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.  A "covered work" means either the unmodified Program or a work based on the Program.  To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy.  Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.  To "convey" a work means any kind of propagation that enables other parties to make or receive copies.  Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.  An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License.  If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.  1. Source Code.  The "source code" for a work means the preferred form of the work for making modifications to it.  "Object code" means any non-source form of a work.  A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.  The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form.  A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.  The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.  However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work.  For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.  The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.  The Corresponding Source for a work in source code form is that same work.  2. Basic Permissions.  All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met.  This License explicitly affirms your unlimited permission to run the unmodified Program.  The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work.  This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.  You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.  You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright.  Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.  Conveying under any other circumstances is permitted solely under the conditions stated below.  Sublicensing is not allowed; section 10 makes it unnecessary.  3. Protecting Users' Legal Rights From Anti-Circumvention Law.  No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.  When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.  4. Conveying Verbatim Copies.  You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.  You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.  5. Conveying Modified Source Versions.  You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:  a) The work must carry prominent notices stating that you modified it, and giving a relevant date.  b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7.  This requirement modifies the requirement in section 4 to "keep intact all notices".  c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy.  This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged.  This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.  d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.  A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit.  Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.  6. Conveying Non-Source Forms.  You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:  a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.  b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.  c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source.  This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.  d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge.  You need not require recipients to copy the Corresponding Source along with the object code.  If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source.  Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.  e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.  A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.  A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling.  In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage.  For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product.  A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.  "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source.  The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.  If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information.  But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).  The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed.  Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.  Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.  7. Additional Terms.  "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law.  If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.  When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it.  (Additional permissions may be written to require their own removal in certain cases when you modify the work.)  You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.  Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:  a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or  b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or  c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or  d) Limiting the use for publicity purposes of names of licensors or authors of the material; or  e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or  f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.  All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10.  If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term.  If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.  If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.  Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.  8. Termination.  You may not propagate or modify a covered work except as expressly provided under this License.  Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).  However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.  Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.  Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License.  If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.  9. Acceptance Not Required for Having Copies.  You are not required to accept this License in order to receive or run a copy of the Program.  Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance.  However, nothing other than this License grants you permission to propagate or modify any covered work.  These actions infringe copyright if you do not accept this License.  Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.  10. Automatic Licensing of Downstream Recipients.  Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License.  You are not responsible for enforcing compliance by third parties with this License.  An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations.  If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.  You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.  For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.  11. Patents.  A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based.  The work thus licensed is called the contributor's "contributor version".  A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version.  For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.  Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.  In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement).  To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.  If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients.  "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.  If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.  A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License.  You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.  Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.  12. No Surrender of Others' Freedom.  If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all.  For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.  13. Use with the GNU Affero General Public License.  Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work.  The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.  14. Revised Versions of this License.  The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.  Each version is given a distinguishing version number.  If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.  If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.  Later license versions may give you additional or different permissions.  However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.  15. Disclaimer of Warranty.  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.  16. Limitation of Liability.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  17. Interpretation of Sections 15 and 16.  If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.  END OF TERMS AND CONDITIONS  How to Apply These Terms to Your New Programs  If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.  To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.  AA Killstats Killboard Statistics Module for Alliance Auth Copyright (C) 2024  Geuthur  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with this program.  If not, see <https://www.gnu.org/licenses/>.  Also add information on how to contact you by electronic and paper mail.  If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:  AA Killstats  Copyright (C) 2024  Geuthur This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.  The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, your program's commands might be different; for a GUI interface, you would use an "about box".  You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.  The GNU General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Lesser General Public License instead of this License.  But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>.


pkgId: c4945e1049daaceffd85b957fecea3109af4a9789d3adaa094c6f293cf1166b9
name: python-aa-ledger
arch: src
version: 0.6.4
epoch: 0
release: 1
url: https://github.com/Geuthur/aa-ledger
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-ledger-0.6.4-1.src.rpm
checksum_type: sha256
summary:
  Character and Corporation statistics, including detailed information on ESS, Ratting, Trading, Mining, and other activities.

description:
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Geuthur/aa-ledger/master.svg)](https://results.pre-commit.ci/latest/github/Geuthur/aa-ledger/master)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![Tests](https://github.com/Geuthur/aa-ledger/actions/workflows/autotester.yml/badge.svg)](https://github.com/Geuthur/aa-ledger/actions/workflows/autotester.yml)
  [![codecov](https://codecov.io/gh/Geuthur/aa-ledger/graph/badge.svg?token=5CWREOQKGZ)](https://codecov.io/gh/Geuthur/aa-ledger)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/W7W810Q5J4)

  Character and Corporation statistics, including detailed information on ESS, Ratting, Trading, Mining, and other activities.

  ______________________________________________________________________

  - [AA Ledger](#aa-ledger)
    - [Features](#features)
    - [Upcoming](#upcoming)
    - [Installation](#features)
      - [Step 0 - Check dependencies are installed](#step0)
      - [Step 1 - Install the Package](#step1)
      - [Step 2 - Configure Alliance Auth](#step2)
      - [Step 3 - Add the Scheduled Tasks and Settings](#step3)
      - [Step 4 - Migration to AA](#step4)
      - [Step 5 - Setting up Permissions](#step5)
      - [Step 6 - (Optional) Setting up Compatibilies](#step6)
    - [Highlights](#highlights)



  - Statistics
    - Graphical Statistics
    - Yearly, Monthly, Daily, Hourly
    - Current Day
  - Character Ledger
    - Graphical Overview for each Character
      - Graphical Statistics
    - Ratting
    - Encounter Surveillance System Payouts
    - Mining
    - Trading
    - Costs
  - Corporation Ledger
    - Graphical Overview for each Member
    - Ratting Tax
    - Encounter Surveillance System Tax
  - Alliance Ledger
    - Graphical Overview for each Corporation
    - Ratting
    - Encounter Surveillance System Tax
  - Planetary Ledger
    - Graphical Overview for each Planet
    - Notification if Extractor expire
    - Switchable Notification for each Planet
    - Products Overview
  - Events Calender



  - Bug Fixing, Performance Optimation



  > \[!NOTE\]
  > AA Ledger needs at least Alliance Auth v4.0.0
  > Please make sure to update your Alliance Auth before you install this APP



  - Ledger needs the app [django-eveuniverse](https://apps.allianceauth.org/apps/detail/django-eveuniverse) to function. Please make sure it is installed.



  Make sure you're in your virtual environment (venv) of your Alliance Auth then install the pakage.

  ```shell
  pip install aa-ledger
  ```



  Configure your Alliance Auth settings (`local.py`) as follows:

  - Add `'ledger',` to `INSTALLED_APPS`



  To set up the Scheduled Tasks add following code to your `local.py`

  ```python
  CELERYBEAT_SCHEDULE["ledger_character_audit_update_all"] = {
      "task": "ledger.tasks.update_all_characters",
      "schedule": crontab(minute=0, hour="*/1"),
  }
  CELERYBEAT_SCHEDULE["ledger_corporation_audit_update_all"] = {
      "task": "ledger.tasks.update_all_corps",
      "schedule": crontab(minute=0, hour="*/1"),
  }
  CELERYBEAT_SCHEDULE["ledger_check_planetary_alarms"] = {
      "task": "ledger.tasks.check_planetary_alarms",
      "schedule": crontab(minute=0, hour="*/3"),
  }
  ```



  > \[!NOTE\]
  > If you have Member Audit installed add this to Fetch Member Audit Chars and Sync with Ledger

  ```python
  CELERYBEAT_SCHEDULE["ledger_character_member_audit_fetch"] = {
      "task": "ledger.tasks.create_member_audit",
      "schedule": crontab(minute=0, hour="*/1"),
  }
  ```



  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```



  With the Following IDs you can set up the permissions for the Ledger

  > \[!IMPORTANT\]
  > Character, Corporation, Alliance Ledger only show Data from User has access to
  > `advanced_access` give User access to see own Corporations he is in

  | ID                         | Description                                |                                                        |
  | :------------------------- | :----------------------------------------- | :----------------------------------------------------- |
  | `basic_access`             | Can access the Ledger module               | All Members with the Permission can access the Ledger. |
  | `advanced_access`          | Can access Corporation and Alliance Ledger | Can see Corporation & Alliance Ledger.                 |
  | `admin_access`             | Can access the Administration tools        | Can Add Corporations, Alliances.                       |
  | `char_audit_manager`       | Has Access to all characters for own Corp  | Can see all Chars from Corps he is in.                 |
  | `char_audit_admin_manager` | Has Access to all Characters               | Can see all Chars.                                     |
  | `corp_audit_admin_manager` | Has Access to all Corporations             | Can see all Corps.                                     |



  The Following Settings can be setting up in the `local.py`

  - LEDGER_APP_NAME:          `"YOURNAME"`     - Set the name of the APP

  - LEDGER_CORP_TAX:          `15`             - Set Tax Value for ESS Payout Calculation

  - LEDGER_LOGGER_USE:        `True / False`   - Set to use own Logger File

  If you set up LEDGER_LOGGER_USE to `True` you need to add the following code below:

  ```python
  LOGGING_LEDGER = {
      "handlers": {
          "ledger_file": {
              "level": "INFO",
              "class": "logging.handlers.RotatingFileHandler",
              "filename": os.path.join(BASE_DIR, "log/ledger.log"),
              "formatter": "verbose",
              "maxBytes": 1024 * 1024 * 5,
              "backupCount": 5,
          },
      },
      "loggers": {
          "ledger": {
              "handlers": ["ledger_file", "console"],
              "level": "INFO",
          },
      },
  }
  LOGGING["handlers"].update(LOGGING_LEDGER["handlers"])
  LOGGING["loggers"].update(LOGGING_LEDGER["loggers"])
  ```



  ![ledger1](https://github.com/user-attachments/assets/a6f89d3e-89c0-410c-b95d-efbd1fd00a0a)

  ![ledger2](https://github.com/user-attachments/assets/38a8a3ea-6909-49a0-b778-3a18d2af13fc)

  ![ledger3](https://github.com/user-attachments/assets/48d5f6e6-91f6-455b-ae01-1b98fd96b1de)

  ![ledger4](https://github.com/user-attachments/assets/c32d792e-1240-4dae-a5d9-216fc5f58d26)

  ![ledger5](https://github.com/user-attachments/assets/b37856d6-bd45-4655-9ef8-6f213dc9da24)

  ![ledger6](https://github.com/user-attachments/assets/5c37eef1-cd93-4682-a8a3-aebd4f7278c8)

  > \[!NOTE\]
  > Contributing
  > You want to improve the project?
  > Just Make a [Pull Request](https://github.com/Geuthur/aa-ledger/pulls) with the Guidelines.
  > We Using pre-commit

rpm_license:
  GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007  Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.  Preamble  The GNU General Public License is a free, copyleft license for software and other kinds of works.  The licenses for most software and other practical works are designed to take away your freedom to share and change the works.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.  We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors.  You can apply it to your programs, too.  When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.  To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights.  Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.  For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their rights.  Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.  For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software.  For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.  Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so.  This is fundamentally incompatible with the aim of protecting users' freedom to change the software.  The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable.  Therefore, we have designed this version of the GPL to prohibit the practice for those products.  If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.  Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary.  To prevent this, the GPL assures that patents cannot be used to render the program non-free.  The precise terms and conditions for copying, distribution and modification follow.  TERMS AND CONDITIONS  0. Definitions.  "This License" refers to version 3 of the GNU General Public License.  "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.  "The Program" refers to any copyrightable work licensed under this License.  Each licensee is addressed as "you".  "Licensees" and "recipients" may be individuals or organizations.  To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy.  The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.  A "covered work" means either the unmodified Program or a work based on the Program.  To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy.  Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.  To "convey" a work means any kind of propagation that enables other parties to make or receive copies.  Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.  An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License.  If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.  1. Source Code.  The "source code" for a work means the preferred form of the work for making modifications to it.  "Object code" means any non-source form of a work.  A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.  The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form.  A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.  The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.  However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work.  For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.  The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.  The Corresponding Source for a work in source code form is that same work.  2. Basic Permissions.  All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met.  This License explicitly affirms your unlimited permission to run the unmodified Program.  The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work.  This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.  You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.  You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright.  Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.  Conveying under any other circumstances is permitted solely under the conditions stated below.  Sublicensing is not allowed; section 10 makes it unnecessary.  3. Protecting Users' Legal Rights From Anti-Circumvention Law.  No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.  When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.  4. Conveying Verbatim Copies.  You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.  You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.  5. Conveying Modified Source Versions.  You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:  a) The work must carry prominent notices stating that you modified it, and giving a relevant date.  b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7.  This requirement modifies the requirement in section 4 to "keep intact all notices".  c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy.  This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged.  This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.  d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.  A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit.  Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.  6. Conveying Non-Source Forms.  You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:  a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.  b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.  c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source.  This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.  d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge.  You need not require recipients to copy the Corresponding Source along with the object code.  If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source.  Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.  e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.  A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.  A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling.  In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage.  For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product.  A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.  "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source.  The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.  If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information.  But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).  The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed.  Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.  Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.  7. Additional Terms.  "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law.  If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.  When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it.  (Additional permissions may be written to require their own removal in certain cases when you modify the work.)  You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.  Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:  a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or  b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or  c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or  d) Limiting the use for publicity purposes of names of licensors or authors of the material; or  e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or  f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.  All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10.  If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term.  If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.  If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.  Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.  8. Termination.  You may not propagate or modify a covered work except as expressly provided under this License.  Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).  However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.  Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.  Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License.  If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.  9. Acceptance Not Required for Having Copies.  You are not required to accept this License in order to receive or run a copy of the Program.  Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance.  However, nothing other than this License grants you permission to propagate or modify any covered work.  These actions infringe copyright if you do not accept this License.  Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.  10. Automatic Licensing of Downstream Recipients.  Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License.  You are not responsible for enforcing compliance by third parties with this License.  An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations.  If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.  You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.  For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.  11. Patents.  A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based.  The work thus licensed is called the contributor's "contributor version".  A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version.  For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.  Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.  In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement).  To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.  If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients.  "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.  If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.  A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License.  You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.  Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.  12. No Surrender of Others' Freedom.  If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all.  For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.  13. Use with the GNU Affero General Public License.  Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work.  The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.  14. Revised Versions of this License.  The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.  Each version is given a distinguishing version number.  If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.  If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.  Later license versions may give you additional or different permissions.  However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.  15. Disclaimer of Warranty.  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.  16. Limitation of Liability.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  17. Interpretation of Sections 15 and 16.  If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.  END OF TERMS AND CONDITIONS  How to Apply These Terms to Your New Programs  If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.  To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.  AA Ledger detailed statistic Module for Alliance Auth Copyright (C) 2024  Geuthur  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with this program.  If not, see <https://www.gnu.org/licenses/>.  Also add information on how to contact you by electronic and paper mail.  If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:  AA Ledger  Copyright (C) 2024  Geuthur This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.  The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, your program's commands might be different; for a GUI interface, you would use an "about box".  You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.  The GNU General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Lesser General Public License instead of this License.  But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>.


pkgId: 1e6751b5a7d5a9f9ad28b10dec6c292706d9dbf347ecca6d31cbb760ee1380f9
name: python-aa-ledger
arch: src
version: 0.6.6
epoch: 0
release: 1
url: https://github.com/Geuthur/aa-ledger
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-ledger-0.6.6-1.src.rpm
checksum_type: sha256
summary:
  Character and Corporation statistics, including detailed information on ESS, Ratting, Trading, Mining, and other activities.

description:
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Geuthur/aa-ledger/master.svg)](https://results.pre-commit.ci/latest/github/Geuthur/aa-ledger/master)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![Tests](https://github.com/Geuthur/aa-ledger/actions/workflows/autotester.yml/badge.svg)](https://github.com/Geuthur/aa-ledger/actions/workflows/autotester.yml)
  [![codecov](https://codecov.io/gh/Geuthur/aa-ledger/graph/badge.svg?token=5CWREOQKGZ)](https://codecov.io/gh/Geuthur/aa-ledger)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/W7W810Q5J4)

  Character and Corporation statistics, including detailed information on ESS, Ratting, Trading, Mining, and other activities.

  ______________________________________________________________________

  - [AA Ledger](#aa-ledger)
    - [Features](#features)
    - [Upcoming](#upcoming)
    - [Installation](#features)
      - [Step 0 - Check dependencies are installed](#step0)
      - [Step 1 - Install the Package](#step1)
      - [Step 2 - Configure Alliance Auth](#step2)
      - [Step 3 - Add the Scheduled Tasks and Settings](#step3)
      - [Step 4 - Migration to AA](#step4)
      - [Step 5 - Setting up Permissions](#step5)
      - [Step 6 - (Optional) Setting up Compatibilies](#step6)
    - [Highlights](#highlights)



  - Statistics
    - Graphical Statistics
    - Yearly, Monthly, Daily, Hourly
    - Current Day
  - Character Ledger
    - Graphical Overview for each Character
      - Graphical Statistics
    - Ratting
    - Encounter Surveillance System Payouts
    - Mining
    - Trading
    - Costs
  - Corporation Ledger
    - Graphical Overview for each Member
    - Ratting Tax
    - Encounter Surveillance System Tax
  - Alliance Ledger
    - Graphical Overview for each Corporation
    - Ratting
    - Encounter Surveillance System Tax
  - Planetary Ledger
    - Graphical Overview for each Planet
    - Notification if Extractor expire
    - Switchable Notification for each Planet
    - Products Overview
  - Events Calender



  - Bug Fixing, Performance Optimation
  - Costs for Corporation Ledger



  > \[!NOTE\]
  > AA Ledger needs at least Alliance Auth v4.0.0
  > Please make sure to update your Alliance Auth before you install this APP



  - Ledger needs the app [django-eveuniverse](https://apps.allianceauth.org/apps/detail/django-eveuniverse) to function. Please make sure it is installed.



  Make sure you're in your virtual environment (venv) of your Alliance Auth then install the pakage.

  ```shell
  pip install aa-ledger
  ```



  Configure your Alliance Auth settings (`local.py`) as follows:

  - Add `'ledger',` to `INSTALLED_APPS`



  To set up the Scheduled Tasks add following code to your `local.py`

  ```python
  CELERYBEAT_SCHEDULE["ledger_character_audit_update_all"] = {
      "task": "ledger.tasks.update_all_characters",
      "schedule": crontab(minute=0, hour="*/1"),
  }
  CELERYBEAT_SCHEDULE["ledger_corporation_audit_update_all"] = {
      "task": "ledger.tasks.update_all_corps",
      "schedule": crontab(minute=0, hour="*/1"),
  }
  CELERYBEAT_SCHEDULE["ledger_check_planetary_alarms"] = {
      "task": "ledger.tasks.check_planetary_alarms",
      "schedule": crontab(minute=0, hour="*/3"),
  }
  ```



  > \[!NOTE\]
  > If you have Member Audit installed add this to Fetch Member Audit Chars and Sync with Ledger

  ```python
  CELERYBEAT_SCHEDULE["ledger_character_member_audit_fetch"] = {
      "task": "ledger.tasks.create_member_audit",
      "schedule": crontab(minute=0, hour="*/1"),
  }
  ```



  ```shell
  python manage.py collectstatic
  python manage.py migrate
  ```



  With the Following IDs you can set up the permissions for the Ledger

  > \[!IMPORTANT\]
  > Character, Corporation, Alliance Ledger only show Data from User has access to
  > `advanced_access` give User access to see own Corporations he is in

  | ID                         | Description                                |                                                        |
  | :------------------------- | :----------------------------------------- | :----------------------------------------------------- |
  | `basic_access`             | Can access the Ledger module               | All Members with the Permission can access the Ledger. |
  | `advanced_access`          | Can access Corporation and Alliance Ledger | Can see Corporation & Alliance Ledger.                 |
  | `admin_access`             | Can access the Administration tools        | Can Add Corporations, Alliances.                       |
  | `char_audit_manager`       | Has Access to all characters for own Corp  | Can see all Chars from Corps he is in.                 |
  | `char_audit_admin_manager` | Has Access to all Characters               | Can see all Chars.                                     |
  | `corp_audit_admin_manager` | Has Access to all Corporations             | Can see all Corps.                                     |



  The Following Settings can be setting up in the `local.py`

  - LEDGER_APP_NAME:          `"YOURNAME"`     - Set the name of the APP

  - LEDGER_CORP_TAX:          `15`             - Set Tax Value for ESS Payout Calculation

  - LEDGER_LOGGER_USE:        `True / False`   - Set to use own Logger File

  If you set up LEDGER_LOGGER_USE to `True` you need to add the following code below:

  ```python
  LOGGING_LEDGER = {
      "handlers": {
          "ledger_file": {
              "level": "INFO",
              "class": "logging.handlers.RotatingFileHandler",
              "filename": os.path.join(BASE_DIR, "log/ledger.log"),
              "formatter": "verbose",
              "maxBytes": 1024 * 1024 * 5,
              "backupCount": 5,
          },
      },
      "loggers": {
          "ledger": {
              "handlers": ["ledger_file", "console"],
              "level": "INFO",
          },
      },
  }
  LOGGING["handlers"].update(LOGGING_LEDGER["handlers"])
  LOGGING["loggers"].update(LOGGING_LEDGER["loggers"])
  ```



  ![ledger1](ledger/docs/images/preview1.png)

  ![ledger2](ledger/docs/images/preview2.png)

  ![ledger3](ledger/docs/images/preview3.png)

  ![ledger4](ledger/docs/images/preview4.png)

  ![ledger5](ledger/docs/images/preview5.png)

  ![ledger6](ledger/docs/images/preview6.png)

  > \[!NOTE\]
  > Contributing
  > You want to improve the project?
  > Just Make a [Pull Request](https://github.com/Geuthur/aa-ledger/pulls) with the Guidelines.
  > We Using pre-commit

rpm_license:
  GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007  Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.  Preamble  The GNU General Public License is a free, copyleft license for software and other kinds of works.  The licenses for most software and other practical works are designed to take away your freedom to share and change the works.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.  We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors.  You can apply it to your programs, too.  When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.  To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights.  Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.  For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their rights.  Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.  For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software.  For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.  Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so.  This is fundamentally incompatible with the aim of protecting users' freedom to change the software.  The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable.  Therefore, we have designed this version of the GPL to prohibit the practice for those products.  If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.  Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary.  To prevent this, the GPL assures that patents cannot be used to render the program non-free.  The precise terms and conditions for copying, distribution and modification follow.  TERMS AND CONDITIONS  0. Definitions.  "This License" refers to version 3 of the GNU General Public License.  "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.  "The Program" refers to any copyrightable work licensed under this License.  Each licensee is addressed as "you".  "Licensees" and "recipients" may be individuals or organizations.  To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy.  The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.  A "covered work" means either the unmodified Program or a work based on the Program.  To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy.  Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.  To "convey" a work means any kind of propagation that enables other parties to make or receive copies.  Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.  An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License.  If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.  1. Source Code.  The "source code" for a work means the preferred form of the work for making modifications to it.  "Object code" means any non-source form of a work.  A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.  The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form.  A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.  The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.  However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work.  For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.  The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.  The Corresponding Source for a work in source code form is that same work.  2. Basic Permissions.  All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met.  This License explicitly affirms your unlimited permission to run the unmodified Program.  The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work.  This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.  You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.  You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright.  Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.  Conveying under any other circumstances is permitted solely under the conditions stated below.  Sublicensing is not allowed; section 10 makes it unnecessary.  3. Protecting Users' Legal Rights From Anti-Circumvention Law.  No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.  When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.  4. Conveying Verbatim Copies.  You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.  You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.  5. Conveying Modified Source Versions.  You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:  a) The work must carry prominent notices stating that you modified it, and giving a relevant date.  b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7.  This requirement modifies the requirement in section 4 to "keep intact all notices".  c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy.  This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged.  This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.  d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.  A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit.  Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.  6. Conveying Non-Source Forms.  You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:  a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.  b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.  c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source.  This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.  d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge.  You need not require recipients to copy the Corresponding Source along with the object code.  If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source.  Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.  e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.  A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.  A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling.  In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage.  For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product.  A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.  "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source.  The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.  If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information.  But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).  The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed.  Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.  Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.  7. Additional Terms.  "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law.  If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.  When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it.  (Additional permissions may be written to require their own removal in certain cases when you modify the work.)  You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.  Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:  a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or  b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or  c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or  d) Limiting the use for publicity purposes of names of licensors or authors of the material; or  e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or  f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.  All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10.  If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term.  If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.  If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.  Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.  8. Termination.  You may not propagate or modify a covered work except as expressly provided under this License.  Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).  However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.  Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.  Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License.  If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.  9. Acceptance Not Required for Having Copies.  You are not required to accept this License in order to receive or run a copy of the Program.  Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance.  However, nothing other than this License grants you permission to propagate or modify any covered work.  These actions infringe copyright if you do not accept this License.  Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.  10. Automatic Licensing of Downstream Recipients.  Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License.  You are not responsible for enforcing compliance by third parties with this License.  An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations.  If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.  You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.  For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.  11. Patents.  A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based.  The work thus licensed is called the contributor's "contributor version".  A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version.  For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.  Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.  In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement).  To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.  If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients.  "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.  If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.  A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License.  You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.  Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.  12. No Surrender of Others' Freedom.  If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all.  For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.  13. Use with the GNU Affero General Public License.  Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work.  The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.  14. Revised Versions of this License.  The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.  Each version is given a distinguishing version number.  If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.  If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.  Later license versions may give you additional or different permissions.  However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.  15. Disclaimer of Warranty.  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.  16. Limitation of Liability.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  17. Interpretation of Sections 15 and 16.  If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.  END OF TERMS AND CONDITIONS  How to Apply These Terms to Your New Programs  If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.  To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.  AA Ledger detailed statistic Module for Alliance Auth Copyright (C) 2024  Geuthur  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with this program.  If not, see <https://www.gnu.org/licenses/>.  Also add information on how to contact you by electronic and paper mail.  If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:  AA Ledger  Copyright (C) 2024  Geuthur This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.  The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, your program's commands might be different; for a GUI interface, you would use an "about box".  You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.  The GNU General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Lesser General Public License instead of this License.  But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>.


pkgId: afdfb49c48b1e6c55369f3bc854a3c76de84b33ba95b55d85aa4be801dbb2f2d
name: python-aa-ma-securegroups
arch: src
version: 1.2.0
epoch: 0
release: 1
summary: Member Audit Secure Groups integration for Alliance Auth
url: https://github.com/ppfeufer/aa-ma-securegroups
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-ma-securegroups-1.2.0-1.src.rpm
checksum_type: sha256
description:
  [![Version](https://img.shields.io/pypi/v/aa-ma-securegroups?label=release)](https://pypi.org/project/aa-ma-securegroups/)
  [![License](https://img.shields.io/github/license/ppfeufer/aa-ma-securegroups)](https://github.com/ppfeufer/aa-ma-securegroups/blob/master/LICENSE)
  [![Python](https://img.shields.io/pypi/pyversions/aa-ma-securegroups)](https://pypi.org/project/aa-ma-securegroups/)
  [![Django](https://img.shields.io/pypi/djversions/aa-ma-securegroups?label=django)](https://pypi.org/project/aa-ma-securegroups/)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-ma-securegroups/master.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-ma-securegroups/master)
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
  [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
  [![Checks](https://github.com/ppfeufer/aa-ma-securegroups/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-ma-securegroups/actions/workflows/automated-checks.yml)
  [![codecov](https://codecov.io/gh/ppfeufer/aa-ma-securegroups/branch/master/graph/badge.svg)](https://codecov.io/gh/ppfeufer/aa-ma-securegroups)
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-member-audit-secure-groups/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/ppfeufer/aa-ma-securegroups/blob/master/CODE_OF_CONDUCT.md)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)

  This is an integration between [Member Audit](https://gitlab.com/ErikKalkoken/aa-memberaudit) and [Secure Groups](https://github.com/pvyParts/allianceauth-secure-groups) for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth) (AA).

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=gitlab --maxlevel=6 --minlevel=1 -->

  - [Member Audit Secure Groups Integration for Alliance Auth](#member-audit-secure-groups-integration-for-alliance-auth)
    - [What's the difference to Member Audit Securegroups](#whats-the-difference-to-member-audit-securegroups)
    - [Features](#features)
    - [Installation](#installation)
      - [Requirements](#requirements)
      - [Step 0.5: Migrating from Member Audit Securegroups](#step-05-migrating-from-member-audit-securegroups)
      - [Step 1: Install the Package](#step-1-install-the-package)
      - [Step 2: Config](#step-2-config)
      - [Step 3: Finalize App Installation](#step-3-finalize-app-installation)
    - [Filters](#filters)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  Pretty much nothing.

  I took over Member Audit Securegroups in August 2022 from the original developer who
  is no longer actively maintaining the app. After more than a year and the fact that
  I have a distinct dislike for Gitlab, and the original developer didn't want to transfer
  the PyPi repository to me, I decided it is time to make an actual fork of the app
  which is now again actively maintained by me.

  This app is fully compatible with the original, all that has changed is the `pip`
  name from `aa-memberaudit-securegroups` to `aa-ma-securegroups`, and if
  you had the original app installed, it is really easy to switch to this one, see
  [Step 0.5: Migrating from Member Audit Securegroups](#step-05-migrating-from-member-audit-securegroups).

  Thanks to [@rcmurphy](https://github.com/rcmurphy) for all her work on the [original
  app](https://gitlab.com/eclipse-expeditions/aa-memberaudit-securegroups)!



  - Activity Filter
  - Asset Filter
  - Character Age Filter
  - Compliance Filter
  - Corporation Role Filter
  - Corporation Title Filter
  - Skill Set Filter
  - Skill Point Filter
  - Time in Corporation Filter



  > \[!NOTE\]
  >
  > **Member Audit Secure Groups Integration >= 1.0.0 needs at least Alliance Auth v4.0.0!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version compatible with Alliance Auth v3 is `0.6.1`.



  This integration needs [Member Audit](https://gitlab.com/ErikKalkoken/aa-memberaudit)
  and [Secure Groups](https://github.com/pvyParts/allianceauth-secure-groups) to
  function. Please make sure they are installed before continuing.



  In case you have the original app installed, you need to uninstall it before
  you can continue. To do so, simply run:

  ```shell
  pip uninstall aa-memberaudit-securegroups
  ```

  That's all, no need to worry about the DB related stuff, this app is fully
  compatible with it and will use the DB tables from the original app. Now feel free
  to continue with the installation.



  Make sure you are in the virtual environment (venv) of your Alliance Auth
  installation. Then install the newest release from PyPI:

  ```shell
  pip install aa-ma-securegroups
  ```



  Add `memberaudit_securegroups` to your `INSTALLED_APPS`.



  Run migrations:

  ```shell
  python manage.py migrate
  ```

  Restart your supervisor services for Auth



  | Filter Name             | Matches if...                                                                  |
  | ----------------------- | ------------------------------------------------------------------------------ |
  | Activity Filter         | User has *at least one* character active within the last X days                |
  | Age Filter              | User has *at least one* character over X days old                              |
  | Asset Filter            | User has *at least one* character with *any of* the assets defined             |
  | Compliance Filter       | User has *all* characters registered on Member Audit                           |
  | Corporation Role Filter | User has a character (main or alt) in a certain corpration with a certain role |
  | Skill Point Filter      | User has *at least one* character with at least X skill points                 |
  | Skill Set Filter        | User has *at least one* character with *any of* the selected skill sets        |



  See [CHANGELOG.md]



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-member-audit-secure-groups/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines].\
  (I promise, it's not much, just some basics)

  <!-- Inline links -->

  [changelog.md]: https://github.com/ppfeufer/aa-ma-securegroups/blob/master/CHANGELOG.md
  [contribution guidelines]: https://github.com/ppfeufer/aa-ma-securegroups/blob/master/CONTRIBUTING.md "Contribution Guidelines"
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: c9eb20b956421477531c5e41cd8339b864210de50cb55edf0b4456adf8788ba8
name: python-aa-ma-securegroups
arch: src
version: 1.3.0
epoch: 0
release: 1
summary: Member Audit Secure Groups integration for Alliance Auth
url: https://github.com/ppfeufer/aa-ma-securegroups
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-ma-securegroups-1.3.0-1.src.rpm
checksum_type: sha256
description:
  [![Version](https://img.shields.io/pypi/v/aa-ma-securegroups?label=release)](https://pypi.org/project/aa-ma-securegroups/)
  [![License](https://img.shields.io/github/license/ppfeufer/aa-ma-securegroups)](https://github.com/ppfeufer/aa-ma-securegroups/blob/master/LICENSE)
  [![Python](https://img.shields.io/pypi/pyversions/aa-ma-securegroups)](https://pypi.org/project/aa-ma-securegroups/)
  [![Django](https://img.shields.io/pypi/djversions/aa-ma-securegroups?label=django)](https://pypi.org/project/aa-ma-securegroups/)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-ma-securegroups/master.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-ma-securegroups/master)
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
  [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
  [![Checks](https://github.com/ppfeufer/aa-ma-securegroups/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-ma-securegroups/actions/workflows/automated-checks.yml)
  [![codecov](https://codecov.io/gh/ppfeufer/aa-ma-securegroups/branch/master/graph/badge.svg)](https://codecov.io/gh/ppfeufer/aa-ma-securegroups)
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-member-audit-secure-groups/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/ppfeufer/aa-ma-securegroups/blob/master/CODE_OF_CONDUCT.md)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)

  This is an integration between [Member Audit](https://gitlab.com/ErikKalkoken/aa-memberaudit) and [Secure Groups](https://github.com/pvyParts/allianceauth-secure-groups) for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth) (AA).

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=gitlab --maxlevel=6 --minlevel=1 -->

  - [Member Audit Secure Groups Integration for Alliance Auth](#member-audit-secure-groups-integration-for-alliance-auth)
    - [What's the difference to Member Audit Securegroups](#whats-the-difference-to-member-audit-securegroups)
    - [Features](#features)
    - [Installation](#installation)
      - [Requirements](#requirements)
      - [Step 0.5: Migrating from Member Audit Securegroups](#step-05-migrating-from-member-audit-securegroups)
      - [Step 1: Install the Package](#step-1-install-the-package)
      - [Step 2: Config](#step-2-config)
      - [Step 3: Finalize App Installation](#step-3-finalize-app-installation)
    - [Filters](#filters)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  Pretty much nothing.

  I took over Member Audit Securegroups in August 2022 from the original developer who
  is no longer actively maintaining the app. After more than a year and the fact that
  I have a distinct dislike for Gitlab, and the original developer didn't want to transfer
  the PyPi repository to me, I decided it is time to make an actual fork of the app
  which is now again actively maintained by me.

  This app is fully compatible with the original, all that has changed is the `pip`
  name from `aa-memberaudit-securegroups` to `aa-ma-securegroups`, and if
  you had the original app installed, it is really easy to switch to this one, see
  [Step 0.5: Migrating from Member Audit Securegroups](#step-05-migrating-from-member-audit-securegroups).

  Thanks to [@rcmurphy](https://github.com/rcmurphy) for all her work on the [original
  app](https://gitlab.com/eclipse-expeditions/aa-memberaudit-securegroups)!



  - Activity Filter
  - Asset Filter
  - Character Age Filter
  - Compliance Filter
  - Corporation Role Filter
  - Corporation Title Filter
  - Skill Set Filter
  - Skill Point Filter
  - Time in Corporation Filter



  > [!NOTE]
  >
  > **Member Audit Secure Groups Integration >= 1.0.0 needs at least Alliance Auth v4.0.0!**
  >
  > Please make sure to update your Alliance Auth instance _before_ you install this
  > module or update to the latest version, otherwise an update to Alliance Auth will
  > be pulled in unsupervised.
  >
  > The last version compatible with Alliance Auth v3 is `0.6.1`.



  This integration needs [Member Audit](https://gitlab.com/ErikKalkoken/aa-memberaudit)
  and [Secure Groups](https://github.com/pvyParts/allianceauth-secure-groups) to
  function. Please make sure they are installed before continuing.



  In case you have the original app installed, you need to uninstall it before
  you can continue. To do so, simply run:

  ```shell
  pip uninstall aa-memberaudit-securegroups
  ```

  That's all, no need to worry about the DB related stuff, this app is fully
  compatible with it and will use the DB tables from the original app. Now feel free
  to continue with the installation.



  Make sure you are in the virtual environment (venv) of your Alliance Auth
  installation. Then install the newest release from PyPI:

  ```shell
  pip install aa-ma-securegroups
  ```



  Add `memberaudit_securegroups` to your `INSTALLED_APPS`.



  Run migrations:

  ```shell
  python manage.py migrate
  ```

  Restart your supervisor services for Auth



  | Filter Name             | Matches if...                                                                  |
  | ----------------------- | ------------------------------------------------------------------------------ |
  | Activity Filter         | User has *at least one* character active within the last X days                |
  | Age Filter              | User has *at least one* character over X days old                              |
  | Asset Filter            | User has *at least one* character with *any of* the assets defined             |
  | Compliance Filter       | User has *all* characters registered on Member Audit                           |
  | Corporation Role Filter | User has a character (main or alt) in a certain corpration with a certain role |
  | Skill Point Filter      | User has *at least one* character with at least X skill points                 |
  | Skill Set Filter        | User has *at least one* character with *any of* the selected skill sets        |



  See [CHANGELOG.md]



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-member-audit-secure-groups/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines].\
  (I promise, it's not much, just some basics)

  <!-- Inline links -->

  [changelog.md]: https://github.com/ppfeufer/aa-ma-securegroups/blob/master/CHANGELOG.md
  [contribution guidelines]: https://github.com/ppfeufer/aa-ma-securegroups/blob/master/CONTRIBUTING.md "Contribution Guidelines"
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: de8414e50bb64133589f37c9ff21935598afeb0369f19a73b94e9a76f4677047
name: python-aa-market-manager
arch: src
version: 1.0.2
epoch: 0
release: 1
summary: AllianceAuth Market Management Tool
url: https://gitlab.com/tactical-supremacy/aa-market-manager
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-market-manager-1.0.2-1.src.rpm
checksum_type: sha256
description:
  Market Manager and Market Browser plugin for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/).

  Inspired by [EveMarketer](https://evemarketer.com/), [Fuzzworks Market](https://market.fuzzwork.co.uk/browser/) and all those that came before them

  ![Screenshot](https://i.imgur.com/BBQ1kAM.png)

  ![Screenshot](https://i.imgur.com/XmY6BRp.png)
  ![Screenshot](https://i.imgur.com/vHLy3xP.png)



  - Market Browser
    - Item Search with Autocomplete
    - Buy/Sell Orders
    - Region filtering
    - Order highlighting on Corporation and User ownership of Orders
    - Item Statistics, Medians and Percentiles
  - Order Types
    - Public Orders
    - Character Orders
    - Corporation Orders
    - Private Structures Orders
  - Configurable Alerts
    - Supply Alerts, Ensure adequate volume is on the market at a given price.
    - Price Alerts, Highlights orders that breach a given threshold to find Scalpers and market abuse.
    - Price Alerts (Bargains!), Flip the logic to find bargains like dreads in surrounding regions.
  - Alert Destinations
    - Discord Webhooks
    - AA Discordbot channel messages



  - Corporation Orders
    - A Title/Role checker, to find valid tokens to fetch orders.
  - Private Structure Orders
    - Requires mapping tokens to their allowed Structures and/or Corporation's Structures.
  - Structure ID Resolver
    - Resolves Stations via Django-EveUniverse EveEntity resolver
    - Resolves Citadels internally
      - Fetches Corporation Citadels from Corporation Tokens loaded with the appropriate EVE Roles ("Station_Manager")
      - get_universe_structures_structure_id requires docking ACL Access. As there is no way to tell who has docking (even the owner corporation is not a guarantee),
  - Will detect and use any tokens loaded by other means, if you request the scopes as part of a wider scoped app (Such as an Audit tool etc.)
  - Managed WatchConfigs, to allow external apps to manage and create their own configs.
    - Very basic currently
    - Supports Generating and maintaining WatchConfigs for a given fit.



  - Private Structure Orders
    - Failing to resolve will disable the token mapping to avoid error-bans.
  - Configurable Alerts
    - Re-List detection, Highlight characters buying and relisting items past a configured threshold.

  - Managed WatchConfigs, to allow external apps to manage and create their own configs.
    - Framework exists, need code.
    - Buybacks?!?





  Market Manager is an App for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/), Please make sure you have this installed. Market Manager is not a standalone Django Application

  Market Manager needs the App [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse) to function. Please make sure it is installed before continuing.



  ```shell
  pip install aa-market-manager
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'marketmanager'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python


  CELERYBEAT_SCHEDULE['marketmanager_fetch_public_market_orders'] = {
      'task': 'marketmanager.tasks.fetch_public_market_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_character_orders'] = {
      'task': 'marketmanager.tasks.fetch_all_character_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_corporation_orders'] = {
      'task': 'marketmanager.tasks.fetch_all_corporation_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_structure_orders'] = {
      'task': 'marketmanager.tasks.fetch_all_structure_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }

  CELERYBEAT_SCHEDULE['marketmanager_fetch_public_structures'] = {
      'task': 'marketmanager.tasks.fetch_public_structures',
      'schedule': crontab(minute=0, hour=4),
  }
  CELERYBEAT_SCHEDULE['marketmanager_update_private_structures'] = {
      'task': 'marketmanager.tasks.update_private_structures',
      'schedule': crontab(minute=0, hour=5),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_corporations_structures'] = {
      'task': 'marketmanager.tasks.fetch_all_corporations_structures',
      'schedule': crontab(minute=0, hour=6),
  }

  CELERYBEAT_SCHEDULE['marketmanager_update_managed_supply_configs'] = {
      'task': 'marketmanager.tasks.update_managed_supply_configs',
      'schedule': crontab(minute='0', hour='2'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_run_all_watch_configs'] = {
      'task': 'marketmanager.tasks.run_all_watch_configs',
      'schedule': crontab(minute=0, hour='*/3'),
  }

  CELERYBEAT_SCHEDULE['marketmanager_update_all_type_statistics'] = {
      'task': 'marketmanager.tasks.update_all_type_statistics',
      'schedule': crontab(minute='0', hour='7'),
  }

  CELERYBEAT_SCHEDULE['marketmanager_garbage_collection'] = {
      'task': 'marketmanager.tasks.garbage_collection',
      'schedule': crontab(minute='0', hour=0),
  }
  ```



  - Run migrations `python manage.py migrate`
  - Gather your staticfiles `python manage.py collectstatic`
  - Restart your project `supervisorctl restart myauth:`



  - `python manage.py eveuniverse_load_data map` This will load Regions, Constellations and Solar Systems



  This is less required the more you have used eveuniverse in the past

  - `python manage.py eveuniverse_load_data ships --types-enabled-sections EveType.Section.MARKET_GROUPS` This will load Ships, which are nearly universally on the market
  - `python manage.py eveuniverse_load_data structures`, this will load Structures for use in Filters
  - `python manage.py marketmanager_preload_common_eve_types` This will preload a series of Types using Groups and Categories I've analyzed to be popular on the market, please note this currently will not import MarketGroups until a market update is run for the first time, this may impact your ability to make SupplyConfigs immediately.



  In the Admin interface, visit `marketmanager` or `<AUTH-URL>/admin/marketmanager`



  Select the Regions you would like to pull Public Market Data for

  - Please note Jita (The Forge) is not trivial and will take several minutes to pull and process depending on your hardware.



  Select the Regions you would like to calculate Percentiles, Medians and Weighted Averages for

  - We always calculate these stats across New Eden, but these will likely match Public Market Configuration or the regions where your Private Structures are located.
  - Supply Configs require The Forge selected to use The Forge(Jita) Relative Pricing.
  - An item must have a minimum amount of orders to be calculated (see settings)



  Map the appropriate tokens with Access to Docking and Market (this cant be assumed), to the right Structures And/Or Corps.



  Configure some supply alerts



  - Highlight Types (Items), that fail to meet a defined config
  - Volume of Items at given price in location
  Example. Warn if there is less than 1,000,000 Units of Oxygen Isotopes under 1,000 ISK/Unit, in 9KOE-A.



  - Highlights Orders that meet a defined config.
  Example. Notify if Naglfars under 3,000,000,000 ISK/Unit are on sale in Curse NPC Stations



  - Highlights Orders, that breach Jita/Universe price.
  Example. Notify Leadership that Ariel Rin is selling Nanite Repair Paste at over 500% Jita price in Staging.



  - Compares the lowest/highest orders in a source location to a destination.
  - Either Importing a market or Exporting with Buy/Sell order choices for both source and destination
  - Optionally can include a freight cost in calculations





  - Managed By App = `fittings`
  - Managed App-Identifier = `fittings.fit.<FIT_ID>`
  - Managed App Reason = A user facing reason
  - ... a slightly limited subset of WatchConfig settings that will be replicated on each WatchConfig created.



  | Perm | Admin Site  | Perm | Description |
  | --- | --- | --- | --- |
  | basic_market_browser | nill | Can access the Standard Market Browser | Can access the normal user facing market browser|
  | advanced_market_browser | nill | Can access the Advanced Market Browser | Can access the more advanced management browser with private details|
  | order_highlight_user | nill | Can access other character's data for own alliance. | Enables Highlighting a users own Orders in the Market Browser|
  | order_highlight_corporation | nill | Can access other character's data for own corp. | Enables Highlighting the orders of a users corporation in the Market Browser|
  | can_add_token_character | nill | Can add a Character Token with required scopes | Enables the "Add Character Token" button to request the needed scopes from a user|
  | can_add_token_corporation | nill | Can add a Corporation Token with required scopes | Enables the "Add Corporation Token" button to request the needed scopes from a user|



  | Name | Description | Default |
  | --- | --- | --- |
  |`MARKETMANAGER_CLEANUP_DAYS_STRUCTURE`| Number of days without an update, before considering a Structure stale and to be deleted | 30 |
  |`MARKETMANAGER_CLEANUP_DAYS_ORDER`| Number of days without an update, before considering an Order stale and to be deleted | 30|
  |`MARKETMANAGER_TASK_PRIORITY_ORDERS`| Celery task priority for Order tasks | 5|
  |`MARKETMANAGER_TASK_PRIORITY_STRUCTURES`| Celery task priority for Structure tasks | 4|
  |`MARKETMANAGER_TASK_PRIORITY_BACKGROUND`| Celery task priority for Background tasks | 7|
  |`MARKETMANAGER_TASK_PRIORITY_SUPPLY_CONFIGS`| Celery task priority for SupplyConfig tasks, This is Lower than Orders to ensure it runs while Orders are all up to date | 6|
  |`MARKETMANAGER_TASK_PRIORITY_PRICE_CONFIGS`| Celery task priority for PriceConfig tasks, This is Lower than Orders to ensure it runs while Orders are all up to date | 6|
  |`MARKETMANAGER_WEBHOOK_COLOUR_ERROR`| Webhook colour for Errors | 16711710|
  |`MARKETMANAGER_WEBHOOK_COLOUR_WARNING`| Webhook colour for Errors | 14177041|
  |`MARKETMANAGER_WEBHOOK_COLOUR_INFO`| Webhook colour for Errors  | 42751|
  |`MARKETMANAGER_WEBHOOK_COLOUR_SUCCESS`| Webhook colour for Success | 6684416|
  |`MARKETMANAGER_TYPESTATISTICS_MINIMUM_ORDER_COUNT` | Minimum number of Orders to exist before calculating Medians, Averages and Percentiles | 10 |



  Creating Watch Configs from external applications is relatively straight forward and Market Manager provides an Optional Model for keeping track of these Watch Configs.

  How an app maintains these Watch Configs is left to the developer, but Fittings provides a decent starting point using App Signals and referencing the Managed Watch Config model.

  managed_app should follow python referencing convention. `fittings`, `projectname.modulename`
  managed_app_identifier is up to the app, but i would suggest following from Fittings, `fittings.fit.{fit.id}`
  managed_app_reason is presented to users as to_why_ a managed config exists, `Standard MWD Eagle x50`

  ```python
  def marketmanager_active() -> bool:
      return apps.is_installed("marketmanager")

  if marketmanager_active():
      from marketmanager.models import WatchConfig, ManagedAppConfig

      
      
      
  ```

  - Fittings (Currently from Market Manager)
    - Create and Maintain Watch Configs for x number of a Fit or Fits.



  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at <https://developers.eveonline.com> before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.


pkgId: c7f682f9cd7af8c8dd0b0b0b89c23b72aec916210a3036dd2a2e93f5829049ab
name: python-aa-market-manager
arch: src
version: 1.0.3
epoch: 0
release: 1
summary: AllianceAuth Market Management Tool
url: https://gitlab.com/tactical-supremacy/aa-market-manager
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-market-manager-1.0.3-1.src.rpm
checksum_type: sha256
description:
  Market Manager and Market Browser plugin for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/).

  Inspired by [EveMarketer](https://evemarketer.com/), [Fuzzworks Market](https://market.fuzzwork.co.uk/browser/) and all those that came before them

  ![Screenshot](https://i.imgur.com/BBQ1kAM.png)

  ![Screenshot](https://i.imgur.com/XmY6BRp.png)
  ![Screenshot](https://i.imgur.com/vHLy3xP.png)



  - Market Browser
    - Item Search with Autocomplete
    - Buy/Sell Orders
    - Region filtering
    - Order highlighting on Corporation and User ownership of Orders
    - Item Statistics, Medians and Percentiles
  - Order Types
    - Public Orders
    - Character Orders
    - Corporation Orders
    - Private Structures Orders
  - Configurable Alerts
    - Supply Alerts, Ensure adequate volume is on the market at a given price.
    - Price Alerts, Highlights orders that breach a given threshold to find Scalpers and market abuse.
    - Price Alerts (Bargains!), Flip the logic to find bargains like dreads in surrounding regions.
  - Alert Destinations
    - Discord Webhooks
    - AA Discordbot channel messages



  - Corporation Orders
    - A Title/Role checker, to find valid tokens to fetch orders.
  - Private Structure Orders
    - Requires mapping tokens to their allowed Structures and/or Corporation's Structures.
  - Structure ID Resolver
    - Resolves Stations via Django-EveUniverse EveEntity resolver
    - Resolves Citadels internally
      - Fetches Corporation Citadels from Corporation Tokens loaded with the appropriate EVE Roles ("Station_Manager")
      - get_universe_structures_structure_id requires docking ACL Access. As there is no way to tell who has docking (even the owner corporation is not a guarantee),
  - Will detect and use any tokens loaded by other means, if you request the scopes as part of a wider scoped app (Such as an Audit tool etc.)
  - Managed WatchConfigs, to allow external apps to manage and create their own configs.
    - Very basic currently
    - Supports Generating and maintaining WatchConfigs for a given fit.



  - Private Structure Orders
    - Failing to resolve will disable the token mapping to avoid error-bans.
  - Configurable Alerts
    - Re-List detection, Highlight characters buying and relisting items past a configured threshold.

  - Managed WatchConfigs, to allow external apps to manage and create their own configs.
    - Framework exists, need code.
    - Buybacks?!?





  Market Manager is an App for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/), Please make sure you have this installed. Market Manager is not a standalone Django Application

  Market Manager needs the App [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse) to function. Please make sure it is installed before continuing.



  ```shell
  pip install aa-market-manager
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'marketmanager'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python


  CELERYBEAT_SCHEDULE['marketmanager_fetch_public_market_orders'] = {
      'task': 'marketmanager.tasks.fetch_public_market_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_character_orders'] = {
      'task': 'marketmanager.tasks.fetch_all_character_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_corporation_orders'] = {
      'task': 'marketmanager.tasks.fetch_all_corporation_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_structure_orders'] = {
      'task': 'marketmanager.tasks.fetch_all_structure_orders',
      'schedule': crontab(minute=0, hour='*/3'),
  }

  CELERYBEAT_SCHEDULE['marketmanager_fetch_public_structures'] = {
      'task': 'marketmanager.tasks.fetch_public_structures',
      'schedule': crontab(minute=0, hour=4),
  }
  CELERYBEAT_SCHEDULE['marketmanager_update_private_structures'] = {
      'task': 'marketmanager.tasks.update_private_structures',
      'schedule': crontab(minute=0, hour=5),
  }
  CELERYBEAT_SCHEDULE['marketmanager_fetch_all_corporations_structures'] = {
      'task': 'marketmanager.tasks.fetch_all_corporations_structures',
      'schedule': crontab(minute=0, hour=6),
  }

  CELERYBEAT_SCHEDULE['marketmanager_update_managed_supply_configs'] = {
      'task': 'marketmanager.tasks.update_managed_supply_configs',
      'schedule': crontab(minute='0', hour='2'),
  }
  CELERYBEAT_SCHEDULE['marketmanager_run_all_watch_configs'] = {
      'task': 'marketmanager.tasks.run_all_watch_configs',
      'schedule': crontab(minute=0, hour='*/3'),
  }

  CELERYBEAT_SCHEDULE['marketmanager_update_all_type_statistics'] = {
      'task': 'marketmanager.tasks.update_all_type_statistics',
      'schedule': crontab(minute='0', hour='7'),
  }

  CELERYBEAT_SCHEDULE['marketmanager_garbage_collection'] = {
      'task': 'marketmanager.tasks.garbage_collection',
      'schedule': crontab(minute='0', hour=0),
  }
  ```



  - Run migrations `python manage.py migrate`
  - Gather your staticfiles `python manage.py collectstatic`
  - Restart your project `supervisorctl restart myauth:`



  - `python manage.py eveuniverse_load_data map` This will load Regions, Constellations and Solar Systems



  This is less required the more you have used eveuniverse in the past

  - `python manage.py eveuniverse_load_data ships --types-enabled-sections market_groups` This will load Ships, which are nearly universally on the market
  - `python manage.py eveuniverse_load_data structures`, this will load Structures for use in Filters
  - `python manage.py marketmanager_preload_common_eve_types` This will preload a series of Types using Groups and Categories I've analyzed to be popular on the market, please note this currently will not import MarketGroups until a market update is run for the first time, this may impact your ability to make SupplyConfigs immediately.



  In the Admin interface, visit `marketmanager` or `<AUTH-URL>/admin/marketmanager`



  Select the Regions you would like to pull Public Market Data for

  - Please note Jita (The Forge) is not trivial and will take several minutes to pull and process depending on your hardware.



  Select the Regions you would like to calculate Percentiles, Medians and Weighted Averages for

  - We always calculate these stats across New Eden, but these will likely match Public Market Configuration or the regions where your Private Structures are located.
  - Supply Configs require The Forge selected to use The Forge(Jita) Relative Pricing.
  - An item must have a minimum amount of orders to be calculated (see settings)



  Map the appropriate tokens with Access to Docking and Market (this cant be assumed), to the right Structures And/Or Corps.



  Configure some supply alerts



  - Highlight Types (Items), that fail to meet a defined config
  - Volume of Items at given price in location
  Example. Warn if there is less than 1,000,000 Units of Oxygen Isotopes under 1,000 ISK/Unit, in 9KOE-A.



  - Highlights Orders that meet a defined config.
  Example. Notify if Naglfars under 3,000,000,000 ISK/Unit are on sale in Curse NPC Stations



  - Highlights Orders, that breach Jita/Universe price.
  Example. Notify Leadership that Ariel Rin is selling Nanite Repair Paste at over 500% Jita price in Staging.



  - Compares the lowest/highest orders in a source location to a destination.
  - Either Importing a market or Exporting with Buy/Sell order choices for both source and destination
  - Optionally can include a freight cost in calculations





  - Managed By App = `fittings`
  - Managed App-Identifier = `fittings.fit.<FIT_ID>`
  - Managed App Reason = A user facing reason
  - ... a slightly limited subset of WatchConfig settings that will be replicated on each WatchConfig created.



  | Perm | Admin Site  | Perm | Description |
  | --- | --- | --- | --- |
  | basic_market_browser | nill | Can access the Standard Market Browser | Can access the normal user facing market browser|
  | advanced_market_browser | nill | Can access the Advanced Market Browser | Can access the more advanced management browser with private details|
  | order_highlight_user | nill | Can access other character's data for own alliance. | Enables Highlighting a users own Orders in the Market Browser|
  | order_highlight_corporation | nill | Can access other character's data for own corp. | Enables Highlighting the orders of a users corporation in the Market Browser|
  | can_add_token_character | nill | Can add a Character Token with required scopes | Enables the "Add Character Token" button to request the needed scopes from a user|
  | can_add_token_corporation | nill | Can add a Corporation Token with required scopes | Enables the "Add Corporation Token" button to request the needed scopes from a user|



  | Name | Description | Default |
  | --- | --- | --- |
  |`MARKETMANAGER_CLEANUP_DAYS_STRUCTURE`| Number of days without an update, before considering a Structure stale and to be deleted | 30 |
  |`MARKETMANAGER_CLEANUP_DAYS_ORDER`| Number of days without an update, before considering an Order stale and to be deleted | 30|
  |`MARKETMANAGER_TASK_PRIORITY_ORDERS`| Celery task priority for Order tasks | 5|
  |`MARKETMANAGER_TASK_PRIORITY_STRUCTURES`| Celery task priority for Structure tasks | 4|
  |`MARKETMANAGER_TASK_PRIORITY_BACKGROUND`| Celery task priority for Background tasks | 7|
  |`MARKETMANAGER_TASK_PRIORITY_SUPPLY_CONFIGS`| Celery task priority for SupplyConfig tasks, This is Lower than Orders to ensure it runs while Orders are all up to date | 6|
  |`MARKETMANAGER_TASK_PRIORITY_PRICE_CONFIGS`| Celery task priority for PriceConfig tasks, This is Lower than Orders to ensure it runs while Orders are all up to date | 6|
  |`MARKETMANAGER_WEBHOOK_COLOUR_ERROR`| Webhook colour for Errors | 16711710|
  |`MARKETMANAGER_WEBHOOK_COLOUR_WARNING`| Webhook colour for Errors | 14177041|
  |`MARKETMANAGER_WEBHOOK_COLOUR_INFO`| Webhook colour for Errors  | 42751|
  |`MARKETMANAGER_WEBHOOK_COLOUR_SUCCESS`| Webhook colour for Success | 6684416|
  |`MARKETMANAGER_TYPESTATISTICS_MINIMUM_ORDER_COUNT` | Minimum number of Orders to exist before calculating Medians, Averages and Percentiles | 10 |



  Creating Watch Configs from external applications is relatively straight forward and Market Manager provides an Optional Model for keeping track of these Watch Configs.

  How an app maintains these Watch Configs is left to the developer, but Fittings provides a decent starting point using App Signals and referencing the Managed Watch Config model.

  managed_app should follow python referencing convention. `fittings`, `projectname.modulename`
  managed_app_identifier is up to the app, but i would suggest following from Fittings, `fittings.fit.{fit.id}`
  managed_app_reason is presented to users as to_why_ a managed config exists, `Standard MWD Eagle x50`

  ```python
  def marketmanager_active() -> bool:
      return apps.is_installed("marketmanager")

  if marketmanager_active():
      from marketmanager.models import WatchConfig, ManagedAppConfig

      
      
      
  ```

  - Fittings (Currently from Market Manager)
    - Create and Maintain Watch Configs for x number of a Fit or Fits.



  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at <https://developers.eveonline.com> before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.


pkgId: 46018f0c9535c5205b53e450eb4fd484b5b89c5083aa24a02e4c95328d96fd01
name: python-aa-memberaudit
arch: src
version: 3.11.0
epoch: 0
release: 1
summary: An Alliance Auth app that provides full access to Eve characters
url: https://gitlab.com/ErikKalkoken/aa-memberaudit
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-memberaudit-3.11.0-1.src.rpm
checksum_type: sha256
description:
  An Alliance Auth app that provides full access to Eve characters and related reports for auditing, vetting and monitoring.

  [![release](https://img.shields.io/pypi/v/aa-memberaudit?label=release)](https://pypi.org/project/aa-memberaudit/)
  [![python](https://img.shields.io/pypi/pyversions/aa-memberaudit)](https://pypi.org/project/aa-memberaudit/)
  [![django](https://img.shields.io/pypi/djversions/aa-memberaudit?label=django)](https://pypi.org/project/aa-memberaudit/)
  [![pipeline](https://gitlab.com/ErikKalkoken/aa-memberaudit/badges/master/pipeline.svg)](https://gitlab.com/ErikKalkoken/aa-memberaudit/-/pipelines)
  [![codecov](https://codecov.io/gl/ErikKalkoken/aa-memberaudit/branch/master/graph/badge.svg?token=QHMCUAFZBV)](https://codecov.io/gl/ErikKalkoken/aa-memberaudit)
  [![Documentation Status](https://readthedocs.org/projects/aa-memberaudit/badge/?version=latest)](https://aa-memberaudit.readthedocs.io/en/latest/?badge=latest)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/ErikKalkoken/aa-memberaudit/-/blob/master/LICENSE)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![chat](https://img.shields.io/discord/790364535294132234)](https://discord.gg/zmh52wnfvM)



  - [Overview](#overview)
  - [Features](#features)
  - [Highlights](#highlights)
  - [Documentation](#documentation)



  Member Audit is an Alliance Auth app that provides full access to Eve characters and related reports.

  Users can monitor their characters, recruiters can vet the characters of applicants and leadership can audit the characters of their members to ensure compliance and find spies.

  In addition character based reports gives leadership another valuable tool for managing their respective organization.



  Member Audit adds the following features to Auth:

  - Users can see an overview of all their characters with key information like their current location and wallet balance
  - Users can get full access to their characters to monitor them without having to open the Eve client (similar to the classic Eve ap "EveMon").
  - Applicants can temporarily share their characters with recruiters for vetting
  - Leadership can get full access to characters of their members for auditing (e.g. to check suspicious members)
  - Full access to characters currently includes the following information:
    - Assets
    - Bio
    - Contacts
    - Contracts
    - Corporation history
    - Corporation roles (NEW)
    - Faction Warfare statistics
    - Implants
    - Jump clones
    - Mails
    - Mining ledger
    - Loyalty points
    - Skill queue
    - Skill sets
    - Skills
    - Wallet (journal and transactions)

  - Leadership can define Skill Sets, which are a way of defining skills needed to perform a specific activity or fly a doctrine ship. They allow recruiters and leadership to see at a glance what a character can do (e.g. which doctrine ships he/she can fly)
  - Skill Sets can be generated from imported fittings
  - Leadership can see reports and analytics about their members. Those currently include:
    - Compliance: if users have added all their characters
    - Skill Sets: which character has which skill sets

  - Admins can use the flexible permission system to grant access levels for different roles (e.g. corp leadership may only have access to reports about their own corp members)
  - Admins can customize and configure Member Audit to fit their needs. e.g. change the app's name and define how often which type of data is updated from the Eve server

  - Ensure that only users who have registered all their characters have access to services (see also [Compliance Groups](https://aa-memberaudit.readthedocs.io/en/latest/user.html#compliance-groups))
  - Get notifications when a user removes a character that they had previously registered.
  - Designed to work efficiently with large number of characters
  - Data retention policy allows managing storage capacity needs
  - Data can be exported for processing it with third party apps like Google Sheets (currently wallet journal only)
  - Language support for Chinese :cn:, English :us:, German :de:, Russian :ru: and Ukrainian 🇺🇦





  The main page for users to register their characters and get a key infos of all registered characters.

  ![launcher](https://i.imgur.com/v9AU3Gr.jpg)



  The page for displaying all details about a character.

  ![viewer](https://i.imgur.com/vo1N3kg.jpg)



  Skill sets are a way of defining both required and recommended skills for a specific activity or ship.

  This tab on the character view allows you to view what skill sets a character has. For skill sets they don't have or are missing parts of, it also shows what skills are missing.

  ![skill-plans](https://i.imgur.com/cKNy5vz.png)

  Requirements can be customized per skill set in the administration panel. Recommended skill levels can be added in addition to requirements.

  ![skill-set-admin](https://i.imgur.com/ef2cCd9.png)



  On this page recruiters and leadership can look for other characters to view (assuming they have been given permission).

  ![finder](https://i.imgur.com/4sDnBcz.png)



  Link to [documentation](https://aa-memberaudit.readthedocs.io/en/latest/).


pkgId: 6884aaffc40d54f4e54e883653a2c9a25b233d4ca33e3f519fccc8ca99a0aa3f
name: python-aa-memberaudit
arch: src
version: 3.12.0
epoch: 0
release: 1
summary: An Alliance Auth app that provides full access to Eve characters
url: https://gitlab.com/ErikKalkoken/aa-memberaudit
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-memberaudit-3.12.0-1.src.rpm
checksum_type: sha256
description:
  An Alliance Auth app that provides full access to Eve characters and related reports for auditing, vetting and monitoring.

  [![release](https://img.shields.io/pypi/v/aa-memberaudit?label=release)](https://pypi.org/project/aa-memberaudit/)
  [![python](https://img.shields.io/pypi/pyversions/aa-memberaudit)](https://pypi.org/project/aa-memberaudit/)
  [![django](https://img.shields.io/pypi/djversions/aa-memberaudit?label=django)](https://pypi.org/project/aa-memberaudit/)
  [![pipeline](https://gitlab.com/ErikKalkoken/aa-memberaudit/badges/master/pipeline.svg)](https://gitlab.com/ErikKalkoken/aa-memberaudit/-/pipelines)
  [![codecov](https://codecov.io/gl/ErikKalkoken/aa-memberaudit/branch/master/graph/badge.svg?token=QHMCUAFZBV)](https://codecov.io/gl/ErikKalkoken/aa-memberaudit)
  [![Documentation Status](https://readthedocs.org/projects/aa-memberaudit/badge/?version=latest)](https://aa-memberaudit.readthedocs.io/en/stable/)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/ErikKalkoken/aa-memberaudit/-/blob/master/LICENSE)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![chat](https://img.shields.io/discord/790364535294132234)](https://discord.gg/zmh52wnfvM)



  - [Overview](#overview)
  - [Features](#features)
  - [Highlights](#highlights)
  - [Documentation](#documentation)



  Member Audit is an Alliance Auth app that provides full access to Eve characters and related reports.

  Users can monitor their characters, recruiters can vet the characters of applicants and leadership can audit the characters of their members to ensure compliance and find spies.

  In addition character based reports gives leadership another valuable tool for managing their respective organization.



  Member Audit adds the following features to Auth:

  - Users can see an overview of all their characters with key information like their current location and wallet balance
  - Users can get full access to their characters to monitor them without having to open the Eve client (similar to the classic Eve ap "EveMon").
  - Applicants can temporarily share their characters with recruiters for vetting
  - Leadership can get full access to characters of their members for auditing (e.g. to check suspicious members)
  - Full access to characters currently includes the following information:
    - Assets
    - Bio
    - Contacts
    - Contracts
    - Corporation history
    - Corporation roles (NEW)
    - Faction Warfare statistics
    - Implants
    - Jump clones
    - Mails
    - Mining ledger
    - Loyalty points
    - Skill queue
    - Skill sets
    - Skills
    - Wallet (journal and transactions)

  - Leadership can define Skill Sets, which are a way of defining skills needed to perform a specific activity or fly a doctrine ship. They allow recruiters and leadership to see at a glance what a character can do (e.g. which doctrine ships he/she can fly)
  - Skill Sets can be generated from imported fittings
  - Leadership can see reports and analytics about their members. Those currently include:
    - Compliance: if users have added all their characters
    - Skill Sets: which character has which skill sets

  - Admins can use the flexible permission system to grant access levels for different roles (e.g. corp leadership may only have access to reports about their own corp members)
  - Admins can customize and configure Member Audit to fit their needs. e.g. change the app's name and define how often which type of data is updated from the Eve server

  - Ensure that only users who have registered all their characters have access to services (see also [Compliance Groups](https://aa-memberaudit.readthedocs.io/en/stable/user.html#compliance-groups))
  - Get notifications when a user removes a character that they had previously registered.
  - Designed to work efficiently with large number of characters
  - Data retention policy allows managing storage capacity needs
  - Data can be exported for processing it with third party apps like Google Sheets (currently wallet journal only)
  - Language support for Chinese :cn:, English :us:, German :de:, Russian :ru: and Ukrainian 🇺🇦





  The main page for users to register their characters and get a key infos of all registered characters.

  ![launcher](https://i.imgur.com/v9AU3Gr.jpg)



  The page for displaying all details about a character.

  ![viewer](https://i.imgur.com/vo1N3kg.jpg)



  Skill sets are a way of defining both required and recommended skills for a specific activity or ship.

  This tab on the character view allows you to view what skill sets a character has. For skill sets they don't have or are missing parts of, it also shows what skills are missing.

  ![skill-plans](https://i.imgur.com/cKNy5vz.png)

  Requirements can be customized per skill set in the administration panel. Recommended skill levels can be added in addition to requirements.

  ![skill-set-admin](https://i.imgur.com/ef2cCd9.png)



  On this page recruiters and leadership can look for other characters to view (assuming they have been given permission).

  ![finder](https://i.imgur.com/4sDnBcz.png)



  Link to [documentation](https://aa-memberaudit.readthedocs.io/en/stable/).


pkgId: 44efee553fbeb221740e5e3a7cdd30a034e504230cb1eb64796dde42101fcc8f
name: python-aa-memberaudit
arch: src
version: 3.12.2
epoch: 0
release: 1
summary: An Alliance Auth app that provides full access to Eve characters
url: https://gitlab.com/ErikKalkoken/aa-memberaudit
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-memberaudit-3.12.2-1.src.rpm
checksum_type: sha256
description:
  An Alliance Auth app that provides full access to Eve characters and related reports for auditing, vetting and monitoring.

  [![release](https://img.shields.io/pypi/v/aa-memberaudit?label=release)](https://pypi.org/project/aa-memberaudit/)
  [![python](https://img.shields.io/pypi/pyversions/aa-memberaudit)](https://pypi.org/project/aa-memberaudit/)
  [![django](https://img.shields.io/pypi/djversions/aa-memberaudit?label=django)](https://pypi.org/project/aa-memberaudit/)
  [![pipeline](https://gitlab.com/ErikKalkoken/aa-memberaudit/badges/master/pipeline.svg)](https://gitlab.com/ErikKalkoken/aa-memberaudit/-/pipelines)
  [![codecov](https://codecov.io/gl/ErikKalkoken/aa-memberaudit/branch/master/graph/badge.svg?token=QHMCUAFZBV)](https://codecov.io/gl/ErikKalkoken/aa-memberaudit)
  [![Documentation Status](https://readthedocs.org/projects/aa-memberaudit/badge/?version=latest)](https://aa-memberaudit.readthedocs.io/en/stable/)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/ErikKalkoken/aa-memberaudit/-/blob/master/LICENSE)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![chat](https://img.shields.io/discord/790364535294132234)](https://discord.gg/zmh52wnfvM)



  - [Overview](#overview)
  - [Features](#features)
  - [Highlights](#highlights)
  - [Documentation](#documentation)



  Member Audit is an Alliance Auth app that provides full access to Eve characters and related reports.

  Users can monitor their characters, recruiters can vet the characters of applicants and leadership can audit the characters of their members to ensure compliance and find spies.

  In addition character based reports gives leadership another valuable tool for managing their respective organization.



  Member Audit adds the following features to Auth:

  - Users can see an overview of all their characters with key information like their current location and wallet balance
  - Users can get full access to their characters to monitor them without having to open the Eve client (similar to the classic Eve ap "EveMon").
  - Applicants can temporarily share their characters with recruiters for vetting
  - Leadership can get full access to characters of their members for auditing (e.g. to check suspicious members)
  - Full access to characters currently includes the following information:
    - Assets
    - Bio
    - Contacts
    - Contracts
    - Corporation history
    - Corporation roles (NEW)
    - Faction Warfare statistics
    - Implants
    - Jump clones
    - Mails
    - Mining ledger
    - Loyalty points
    - Skill queue
    - Skill sets
    - Skills
    - Wallet (journal and transactions)

  - Leadership can define Skill Sets, which are a way of defining skills needed to perform a specific activity or fly a doctrine ship. They allow recruiters and leadership to see at a glance what a character can do (e.g. which doctrine ships he/she can fly)
  - Skill Sets can be generated from imported fittings
  - Leadership can see reports and analytics about their members. Those currently include:
    - Compliance: if users have added all their characters
    - Skill Sets: which character has which skill sets

  - Admins can use the flexible permission system to grant access levels for different roles (e.g. corp leadership may only have access to reports about their own corp members)
  - Admins can customize and configure Member Audit to fit their needs. e.g. change the app's name and define how often which type of data is updated from the Eve server

  - Ensure that only users who have registered all their characters have access to services (see also [Compliance Groups](https://aa-memberaudit.readthedocs.io/en/stable/user.html#compliance-groups))
  - Get notifications when a user removes a character that they had previously registered.
  - Designed to work efficiently with large number of characters
  - Data retention policy allows managing storage capacity needs
  - Data can be exported for processing it with third party apps like Google Sheets (currently wallet journal only)
  - Language support for Chinese :cn:, English :us:, German :de:, Russian :ru: and Ukrainian 🇺🇦

  A few noteworthy community apps that are build on Member Audit:

  - [aa-ma-securegroups](https://apps.allianceauth.org/apps/detail/aa-ma-securegroups): Secure Groups integration with Member Audit
  - [Inactivity](https://apps.allianceauth.org/apps/detail/aa-inactivity): Activity monitoring app
  - [Mail Relay](https://apps.allianceauth.org/apps/detail/aa-mailrelay): An app for relaying Eve mails to Discord

  See [here](https://apps.allianceauth.org/apps/detail/aa-memberaudit) for a full list of community apps that use Member Audit.





  The main page for users to register their characters and get a key infos of all registered characters.

  ![launcher](https://i.imgur.com/v9AU3Gr.jpg)



  The page for displaying all details about a character.

  ![viewer](https://i.imgur.com/vo1N3kg.jpg)



  Skill sets are a way of defining both required and recommended skills for a specific activity or ship.

  This tab on the character view allows you to view what skill sets a character has. For skill sets they don't have or are missing parts of, it also shows what skills are missing.

  ![skill-plans](https://i.imgur.com/cKNy5vz.png)

  Requirements can be customized per skill set in the administration panel. Recommended skill levels can be added in addition to requirements.

  ![skill-set-admin](https://i.imgur.com/ef2cCd9.png)



  On this page recruiters and leadership can look for other characters to view (assuming they have been given permission).

  ![finder](https://i.imgur.com/4sDnBcz.png)



  Link to [documentation](https://aa-memberaudit.readthedocs.io/en/stable/).


pkgId: 5fba97faf48955b524a774d6a62b0c255a2b384b007c80f3dbfde859243cdfd8
name: python-aa-metenox
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: Metenox app config
url: https://gitlab.com/r0kym/aa-metenox
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-metenox-1.1.0-1.src.rpm
checksum_type: sha256
description:
  AA module for Metenox management.

  [![release](https://img.shields.io/pypi/v/aa-metenox?label=release)](https://pypi.org/project/aa-metenox/)
  [![python](https://img.shields.io/pypi/pyversions/aa-metenox)](https://pypi.org/project/aa-metenox/)
  [![django](https://img.shields.io/pypi/djversions/aa-metenox?label=django)](https://pypi.org/project/aa-metenox/)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/r0kym/aa-metenox/-/blob/master/LICENSE)



  - Imports moon scans from the [aa-moonmining](https://gitlab.com/ErikKalkoken/aa-moonmining) application
  - Import Metenoxes from a corporation
    - Displays remaining fuel
    - Displays currently stored moon materials
  - Manager overview of corporation displaying their number of Metenoxes and profit



  - [ ] Setup notifications when the fuel/reagent levels are low


  - Estimate moon price for athanor.
    Use [aa-moonmining](https://gitlab.com/ErikKalkoken/aa-moonmining)
  - Ping when metenox are being reffed
    Use [aa-structures](https://gitlab.com/ErikKalkoken/aa-structures)

  This module aims to be specific for Metenox management.



  ![moon details](images/moon_details.png)
  ![metenox window](images/metenox_window.png)
  ![metenox details](images/metenox_details.png)
  ![corporation window](images/corporation_window.png)





  1. Metenox is a plugin for Alliance Auth. If you don't have Alliance Auth running already, please install it first before proceeding. (see the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/auth/allianceauth/) for details)

  2. Metenox requires the Alliance Auth module [aa-moonmining](https://gitlab.com/ErikKalkoken/aa-moonmining) to function.
    The moon database and other utilities are imported from this module.



  Make sure you are in the virtual environment (venv) of your Alliance Auth installation. Then install the newest release from PyPI:

  ```bash
  pip install aa-metenox
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'metenox'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python
  CELERYBEAT_SCHEDULE['metenox_update_prices'] = {
      'task': 'metenox.tasks.update_prices',
      'schedule': crontab(minute='0', hour='*/12'),
  }
  CELERYBEAT_SCHEDULE['metenox_update_moons_from_moonmining'] = {
      'task': 'metenox.tasks.update_moons_from_moonmining',
      'schedule': crontab(minute='0', hour='*/3'),
  }

  CELERYBEAT_SCHEDULE['metenox_update_all_holdings'] = {
      'task': 'metenox.tasks.update_all_holdings',
      'schedule': crontab(minute='0', hour='*/1')
  }

  CELERYBEAT_SCHEDULE['metenox_send_daily_analytics'] = {
    'task': 'metenox.tasks.send_daily_analytics',
    'schedule': crontab(minute='0', hour='5')
  }
  ```


  Note: the delay of the `update_moons_from_moonmining` task is intentionally long.
  If you know moons will be added in your database often you can reduce it for them to appear faster.
  You can even not use this task at all and only update moon scans with the `metenox_update_moons_from_moonmining` [command](#commands).

  For the `send_daily_analytics` refer to [analytics](#analytics)

  Optional: Alter the application settings.
  The list can be found in [Settings](#settings)



  Run migrations & copy static files

  ```bash
  python manage.py migrate
  python manage.py collectstatic --noinput
  ```

  Restart your supervisor services for Auth.



  Run the following management command to load all moon materials from ESI.
  This only has to be run once.

  ```bash
  python manage.py metenox_load_eve
  ```

  Wait until the command is finished before continuing.



  First load the data from the moonmining module using
  ```bash
  python manage.py metenox_update_moons_from_moonmining
  ```

  Once it's done update their prices with

  ```bash
  python manage.py metenox_update_all_prices
  ```



  This application will send anonymous analytic data using Alliance Auth built-in [analytics module](https://allianceauth.readthedocs.io/en/v4.3.1/features/core/analytics.html).
  If you wish to disable the analytics for this application you can easily do so by removing the `metenox_send_daily_analytics` task.

  The collected analytics are
  - number of owners
  - number of moons
  - number of metenoxes



  Permissions overview.

  | Name                  | Description                                                                                              |
  |-----------------------|----------------------------------------------------------------------------------------------------------|
  | `view_moons`          | This permissions allow to see all scanned moons of the database                                          |
  | `view_metenoxes`      | This permissions allow to add owners and see all metenoxes from the owners corporations                  |
  | `corporation_manager` | This permission allows to add webhooks to corporations and edit when a corporation should get fuel pings |
  | `auditor`             | This permission allows to see all metenoxes regardless of having an owner in the corporation             |

  Users need to have at least `view_moons` or `view_metenoxes` to be able to have any interactions with the application.
  For the permissions `corporation_manager` and `auditor` to work properly the user needs to also have the `view_metenoxes` permission.



  List of settings that can be modified for the application.
  You can alter them by adding them in your `local.py` file.

  | Name                                 | Description                                                                                                                                        | Default |
  |--------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|---------|
  | `METENOX_ADMIN_NOTIFICATIONS_ENABLE` | Whether admins will get notifications about important events like when someone adds a new owner.                                                   | True    |
  | `METENOX_MOON_MATERIAL_BAY_CAPACITY` | Volume of the Metenox's Moon material Output Bay. Used to calculate how long a metenox takes before being full.<br/>This value shouldn't be edited | 500_000 |
  | `METENOX_HOURLY_HARVEST_VOLUME`      | Hourly volume in m3 that a metenox will harvest.<br/>This value shouldn't be edited                                                                | 30_000  |
  | `METENOX_HARVEST_REPROCESS_YIELD`    | Yield at which the metenox reprocess the harvested materials.<br/>This value shouldn't be edited                                                   | 0.40    |
  | `METENOX_FUEL_BLOCKS_PER_HOUR`       | How many fuel blocks a running Metenox consumes every hours.<br/>This value shouldn't be edited                                                    | 5       |
  | `METENOX_MAGMATIC_GASES_PER_HOUR`    | How many magmatic gases a running Metenox consumes every hours.<br/>This value shouldn't be edited                                                 | 88      |




  The following commands can be used when running the module:

  | Name                                   | Description                                                                   |
  |----------------------------------------|-------------------------------------------------------------------------------|
  | `metenox_load_eve`                     | Loads up the data from `eveuniverse` this command should only be ran once     |
  | `metenox_update_all_holdings`          | Fetches all holdings in the database and updates their metenoxes with the ESI |
  | `metenox_update_all_prices`            | Fetches new prices from fuzzwork and update the price of all known moons      |
  | `metenox_update_moons_from_moonmining` | Checks the moonmining application and adds all missing moons                  |


pkgId: a83623912ca2a52066be1025461df227e6e264f34a81bf5ff8b2004b7783e171
name: python-aa-miningtaxes
arch: src
version: 1.4.21
epoch: 0
release: 1
summary: An Alliance Auth app that tracks and applies taxes for mining
url: https://gitlab.com/arctiru/aa-miningtaxes
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-miningtaxes-1.4.21-1.src.rpm
checksum_type: sha256
description:
  ![partner](screens/partner.jpg)

  Please join the `miningtaxes` thread in the Community Creations section on the  [Alliance Auth Discord Server](https://discord.gg/4SEyDZKB) for giveaways and support for this plugin!



  An Alliance Auth app for tracking mining activities and charging taxes.

  [![pipeline](https://gitlab.com/arctiru/aa-miningtaxes/badges/master/pipeline.svg)](https://gitlab.com/arctiru/aa-miningtaxes/-/commits/master)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

  Credit to AA's [memberaudit](https://gitlab.com/ErikKalkoken/aa-memberaudit) and [buyback](https://gitlab.com/paulipa/allianceauth-buyback-program) plugins which formed the foundation for this plugin.


  ![monthly](screens/screen1.jpg)
  ![oreprices](screens/screen2.jpg)
  ![leaderboards](screens/screen3.jpg)



  - Monthly leaderboards to show top miners.
  - Supports multiple corps under one system (Add one character with the accountant role per corp in the admin setup)
  - Supports corp moon mining tracking.
  - Able to track when unrecognized characters are mining your corp's private moons.
  - Tax credit system to offset, zero, or award tax credits to a given user.
  - Supports separate tax rates for Regular Ore, Mercoxit, Gas, Ice, R64, R32, R16, R8, and R4.
  - Tracks tax payments into the corp master wallet filtering with a user defined phrase.
  - Set a monthly interest rate that penalizes for unpaid tax balances.
  - Automatic monthly notifications and monthly interest applied with unpaid balance.
  - Supports Fuzzworks and Janice for daily price updates.
  - Supports refined price calculation versus raw ore prices (the higher price will be the taxed price).
  - Supports multiple mining characters under one user.
  - Monthly statistics and detailed tax calculations available to each user and auditor.
  - Provides a current Ore price chart that is updated each day with the latest prices.
  - Export tax information in CSV format.
  - Supports whitelisting and blacklisting of systems, and turning taxing on and off by security status.



  - If you would like to use [Janice](https://janice.e-351.com/) for pricing information, obtain an API key by following the instructions at the top of the [Swagger documentation](https://janice.e-351.com/api/rest/docs/index.html) and [FAQ](https://janice.e-351.com/about).
  - Install using pip: `pip install aa-miningtaxes`
  - Add `miningtaxes` and `django_celery_results` to INSTALLED_APPS in `myauth/settings/local.py`
  - Run migrations: `python manage.py migrate`
  - Collect and deploy static assets: `python manage.py collectstatic`
  - Preload pricing information `python manage.py miningtaxes_preload_prices`
  - Set local settings
  ```
  CELERY_RESULT_BACKEND = 'django-db'
  CELERY_CACHE_BACKEND = 'django-cache'

  MININGTAXES_PRICE_JANICE_API_KEY = "XXXX"
  MININGTAXES_PRICE_METHOD = "Janice"

  CELERYBEAT_SCHEDULE['miningtaxes_update_daily'] = {
      'task': 'miningtaxes.tasks.update_daily',
      'schedule':  crontab(minute=0, hour='1'),
  }


  CELERYBEAT_SCHEDULE['miningtaxes_notifications'] = {
      'task': 'miningtaxes.tasks.notify_taxes_due',
      'schedule': crontab(0, 0, day_of_month='2'),
  }


  CELERYBEAT_SCHEDULE['miningtaxes_apply_interest'] = {
      'task': 'miningtaxes.tasks.apply_interest',
      'schedule': crontab(0, 0, day_of_month='15'),
  }
  ```
  - Navigate to the admin panel and setup the accountants (1 per corp)



  - After you have setup your accountants (1 per corp) in the Admin Setup panel, invite all the members of your corp to add their characters.
  - If you enable `MININGTAXES_TAX_ONLY_CORP_MOONS`, remember that only moon mining of your corp moons will be taxes and other moons will be ignored.
  - After everyone in the corp has added their characters, consider running to the `miningtaxes_zero_all` command to zero out everyone's taxes to prevent mining activity from the past from being taxed.
  - When a new user joins your corp and adds their character to the plugin, also consider going into the audit tables and providing a tax credit so that it will zero out their past mining activity.




  Name | Description | Default
  -- | -- | --
  MININGTAXES_CORP_WALLET_DIVISION | Corp Wallet Division to seek for tax payments (this option will be used for ALL admin toons linked) | 1
  MININGTAXES_UNKNOWN_TAX_RATE | The tax rate when a new type of ore is encountered that has not yet been added to the plugin in float (eg 0.10 means 10%) | 0.10
  MININGTAXES_TAX_ONLY_CORP_MOONS | Only tax corporate moons using moon observers as opposed to all moons appearing in the personal mining ledgers. | True
  MININGTAXES_UPDATE_LEDGER_STALE | Minutes after which a character's mining ledger is considered stale | 240
  MININGTAXES_REFINED_RATE | Refining rate for ores. | 0.9063
  MININGTAXES_ALWAYS_TAX_REFINED | Always tax the refined rate instead of the raw ore price (if higher) | False
  MININGTAXES_PRICE_METHOD | By default Fuzzwork API will be used for pricing, if this is set to "Janice" then the Janice API will be used. | Fuzzwork
  MININGTAXES_PRICE_JANICE_API_KEY | The API key to access Janice API. |
  MININGTAXES_PRICE_JANICE_TIMING | Choices are `immediatePrices` or `top5AveragePrices` | top5AveragePrices
  MININGTAXES_PRICE_JANICE_BUY | Choices are `buyPrice`, `splitPrice`, `buyPrice5DayMedian`, `splitPrice5DayMedian`, `buyPrice30DayMedian`, `splitPrice30DayMedian`  | buyPrice5DayMedian
  MININGTAXES_PRICE_SOURCE_ID | Station ID for fetching base prices. Supports IDs listed on [Fuzzworks API](https://market.fuzzwork.co.uk/api/). Does not work with Janice API!| 60003760
  MININGTAXES_ALLOW_ANALYTICS | Allow analytics to be sent for plugin usage. | True
  MININGTAXES_LEADERBOARD_TAXABLE_ONLY | Only track leaderboards for activity that is taxed by this plugin. | False
  MININGTAXES_BLACKLIST | List of system names that taxes should be ignored in. Case sensitive.  | []
  MININGTAXES_TAX_HISEC | Include taxing for mining activity in High Security Space | True
  MININGTAXES_TAX_LOSEC | Include taxing for mining activity in Low Security Space | True
  MININGTAXES_TAX_NULLSEC | Include taxing for mining activity in Null Security Space | True
  MININGTAXES_TAX_JSPACE | Include taxing for mining activity in J-Space (Wormhole) | True
  MININGTAXES_TAX_POCHVEN | Include taxing for mining activity in Pochven (Trig Space) | True
  MININGTAXES_WHITELIST | List of the ONLY system names that taxes should be collected. Case sensitive.  | []
  MININGTAXES_PING_THRESHOLD | Threshold to send reminder when "Taxes past due". | 0.01
  MININGTAXES_PING_FIRST_MSG | Format of message to send on the first reminder (should be set on the 1st to 5th of each month). This is triggered by `notify_taxes_due` task | Please pay {:,.2f} ISK or you will be charged interest!
  MININGTAXES_PING_SECOND_MSG | Format of message to send on the second reminder (should be set on the 10th to 14th of each month). This is triggered by `notify_second_taxes_due` task | Please pay {:,.2f} ISK or you will be charged interest!
  MININGTAXES_PING_INTEREST_APPLIED | Format of message once interest is applied (usually on the 15th of each month). This is triggered by the `apply_interest` task | An interest of {:,.2f} ISK has been charged for late taxes.
  MININGTAXES_PING_CURRENT_THRESHOLD | The threshold for Current taxes notification. | 1000000000
  MININGTAXES_PING_CURRENT_MSG | Format of the message for Current taxes notification (usually set to run every day). This is triggered by the `notify_current_taxes_threshold` task | Please pay your taxes. Current tax balance: {:,.2f} ISK


  The logic around whitelisting and blacklisting is a bit complex so I will describe the implementation here.

  If any systems are entered into `MININGTAXES_WHITELIST` then taxes are collected in these systems regardless of what the other settings say. Basically `MININGTAXES_BLACKLIST`, `MININGTAXES_TAX_HISEC`, `MININGTAXES_TAX_LOSEC`, `MININGTAXES_TAX_NULLSEC`, `MININGTAXES_TAX_JSPACE`, `MININGTAXES_TAX_POCHVEN` are completely ignored.

  If there NO systems entered into `MININGTAXES_WHITELIST` (the default state), then the system will look at whether they fall into the exclusion rules and tax accordingly.




  Name | Purpose | Example Target Audience
  -- | -- | --
  basic_access | Can access this app and see own tax information, current ore prices, and FAQ. | Member State
  auditor_access | Can view everyone's tax information and see statistics on taxes. | Auditors
  admin_access | Can set tax rate and add characters with the accountant role to pull information from the corp Master Wallet and the corp moons. | Leadership




  Name | Description
  -- | --
  miningtaxes_preload_prices | Preload all ores and refined materials from chosen Pricing API (Fuzzworks or Janice).
  miningtaxes_zero_all | Zero the tax balance of ALL characters.
  miningtaxes_update_manual | Trigger a manual update for all data
  miningtaxes_prune_non_corpies | Prune all toons who are not in a corp that is covered by the accountants (Use this with care!). Specifically this tool purges characters where their main is not in a tracked corp.


pkgId: 8937de9f8047af919d5c23c2636535a9f00c59cb69bc8216a167fddaa4ee4854
name: python-aa-moonmining
arch: src
version: 1.11.1
epoch: 0
release: 1
summary: Alliance Auth app for tracking moon extractions and scouting new moons.
url: https://gitlab.com/ErikKalkoken/aa-moonmining
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-moonmining-1.11.1-1.src.rpm
checksum_type: sha256
description:
  An Alliance Auth app for tracking moon extractions and scouting new moons.

  [![release](https://img.shields.io/pypi/v/aa-moonmining?label=release)](https://pypi.org/project/aa-moonmining/)
  [![python](https://img.shields.io/pypi/pyversions/aa-moonmining)](https://pypi.org/project/aa-moonmining/)
  [![django](https://img.shields.io/pypi/djversions/aa-moonmining?label=django)](https://pypi.org/project/aa-moonmining/)
  [![pipeline](https://gitlab.com/ErikKalkoken/aa-moonmining/badges/master/pipeline.svg)](https://gitlab.com/ErikKalkoken/aa-moonmining/-/pipelines)
  [![codecov](https://codecov.io/gl/ErikKalkoken/aa-moonmining/branch/master/graph/badge.svg?token=3tY1AOIp4B)](https://codecov.io/gl/ErikKalkoken/aa-moonmining)
  [![license](https://img.shields.io/badge/license-MIT-green)](https://gitlab.com/ErikKalkoken/aa-moonmining/-/blob/master/LICENSE)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![chat](https://img.shields.io/discord/790364535294132234)](https://discord.gg/zmh52wnfvM)



  - [Features](#features)
  - [Installation](#installation)
  - [User manual](#user-manual)
  - [Permissions](#permissions)
  - [Settings](#settings)
  - [Management Commands](#management-commands)
  - [FAQ](#faq)
  - [History](#history)
  - [Change Log](CHANGELOG.md)



  - Upload survey scans and research your moon database
  - Monitor active extractions from your refineries
  - Price estimates for potential monthly income of moons and for extractions
  - Mining ledger per extraction
  - Reports (e.g. potential total income of all owned moons)
  - Tool for mass importing moon scans from external sources

  >**Hint**<br>If you like to see all extraction events in a calendar view please consider checking out the amazing app [Allianceauth Opcalendar](https://gitlab.com/paulipa/allianceauth-opcalendar), which is fully integrated with **Moon Mining**.





  Build your own moon database from survey inputs and find the best moons for you. The moon rarity class and value are automatically calculated from your survey input.

  ![moons](https://i.imgur.com/kxjuPNN.png)

  See the exact ore makeup of this moon on the details page.

  ![moons](https://i.imgur.com/qrLGHZb.png)

  Note that you can also see on this list which moons you already own. In addition an extraction button is visible, when an extraction is active for a particular moon.



  After you added your corporation you can see which moons you own and see upcoming and past extractions:

  ![moons](https://i.imgur.com/earsLke.png)

  You can also review the extraction details, incl. which ore qualities you got.

  ![moons](https://i.imgur.com/mt9eyNN.png)



  See what has been minded from an extraction in the mining ledger:

  ![Mining Ledger](https://i.imgur.com/mQen9Y8.png)



  Check out the reporting section for detail reports on your operation, e.g. Breakdown by corporation and moon of your potential total gross moon income per months:

  ![moons](https://i.imgur.com/JBDPTtB.png)

  > **Note**<br>All ore compositions and ISK values shown on these screenshots are fake.





  1. Moon Mining is a plugin for Alliance Auth. If you don't have Alliance Auth running already, please install it first before proceeding. (see the official [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/auth/allianceauth/) for details)

  2. Moon Mining needs the app [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse) to function. Please make sure it is installed, before before continuing.



  Make sure you are in the virtual environment (venv) of your Alliance Auth installation. Then install the newest release from PyPI:

  ```bash
  pip install aa-moonmining
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'moonmining'` to `INSTALLED_APPS`
  - Add below lines to your settings file:

  ```python
  CELERYBEAT_SCHEDULE['moonmining_run_regular_updates'] = {
      'task': 'moonmining.tasks.run_regular_updates',
      'schedule': crontab(minute='*/10'),
  }
  CELERYBEAT_SCHEDULE['moonmining_run_report_updates'] = {
      'task': 'moonmining.tasks.run_report_updates',
      'schedule': crontab(minute=30, hour='*/1'),
  }
  CELERYBEAT_SCHEDULE['moonmining_run_value_updates'] = {
   'task': 'moonmining.tasks.run_calculated_properties_update',
   'schedule': crontab(minute=30, hour=3)
  }
  ```

  > **Hint**: The value updates are supposed to run once a day during off hours. Feel free to adjust the timing according to your timezone.

  Optional: Add additional settings if you want to change any defaults. See [Settings](#settings) for the full list.



  Run migrations & copy static files

  ```bash
  python manage.py migrate
  python manage.py collectstatic --noinput
  ```

  Restart your supervisor services for Auth.



  Please run the following management command to load all ores from ESI. This has to be done once only.

  ```bash
  python manage.py moonmining_load_eve
  ```

  Please wait until the loading is complete before continuing.

  > **Note**<br>You can monitor the progress on by looking at how many tasks are running on the dashboard.



  In order to get the current prices from ESI initially, please run the following command (assuming the name of your Auth installation is `myauth`):

  ```bash
  python manage.py moonmining_calculate_all
  ```

  Please wait until the loading is complete before continuing.

  > **Hint**<br>You can monitor the loading progress on the dashboard. As long as the Task Queue shows more than 0 tasks the process is most likely still ongoing.



  Update the Eve Online API app used for authentication in your AA installation to include the following scopes:

  - `esi-industry.read_corporation_mining.v1`
  - `esi-universe.read_structures.v1`
  - `esi-characters.read_notifications.v1`



  Finally you want to setup permission to define which users / groups will have access to which parts of the app. Check out [permissions](#permissions) for details.

  Congratulations! You are now ready to use Moon Mining!





  The app uses average market prices as basis for all price calculations. Average market prices are same prices that you also see in the Eve client e.g. for the mining ledger or fitting costs. These can be slightly different from Jita prices, since they are represent an average across all of New Eden, not just Jita / The Forge.

  The calculation of ore prices can be done in two different ways.



  The default ore pricing uses the average market prices directly to calculate ore prices. This is the same approach that the Eve client uses in the mining ledger or when scheduling an extraction. So the main benefit of this approach that you will see the same prices in-game and in the app.



  The disadvantage of this approach is that average market prices for ores are not always accurate. Ores are rarely sold directly on the market, instead most people of refining their ores and selling the refined materials instead. This is because they have they are much smaller in volume making them easier to transport. The total value of the refined materials is also often higher then the value of the ore.

  Therefore you can also chose to use refined ore pricing. This will give you more accurate prices, but the values will be very different from what you may be used to see in the Eve client. For this approach the app calculates the price for a unit of ore as the sum total of it's refined materials. For the materials again the average market price is used.

  Please see the settings `MOONMINING_USE_REPROCESS_PRICING` and `MOONMINING_REPROCESSING_YIELD` for configuring the ore pricing approach.

  After you changed the settings for price calculation, you please restart your AA services so that the changes to your settings become effective. Next please run the following command to recalculate all prices:

  ```bash
  python manage.py moonmining_calculate_all
  ```

  >**Note**<br>You can see the current prices used for all ores in the app in the ore prices report.



  To help with organizing your moons you can label them. For example you might have some of your moons rented out to a third party. Just add a label "Rented out to X" to those moons and the moons and related extractions will show that label allowing you to quickly recognize which are related to your renters.

  Labels are created on the admin site under Label and can then be assigned under Moon.



  Here is an overview of all permissions:

  Name  | Description
  -- | --
  `moonmining.basic_access` | This is access permission, users without this permission will be unable to access the plugin.
  `moonmining.upload_moon_scan` | This permission allows users to upload moon scan data.
  `moonmining.extractions_access` | User can access extractions and view owned moons.
  `moonmining.reports_access` | User can access reports.
  `moonmining.view_all_moons` | User can view all moons in the database and see own moons.
  `moonmining.add_refinery_owner` | This permission is allows users to add their tokens to be pulled from when checking for new extraction events.
  `moonmining.view_moon_ledgers` | Users with this permission can view the mining ledgers from past extractions from moons they have access to.



  Here is a list of available settings for this app. They can be configured by adding them to your AA settings file (`local.py`).

  Note that all settings are optional and the app will use the documented default settings if they are not used.

  Name | Description | Default
  -- | -- | --
  `MOONMINING_ADMIN_NOTIFICATIONS_ENABLED`| whether admins will get notifications about important events like when someone adds a structure owner | `True`
  `MOONMINING_COMPLETED_EXTRACTIONS_HOURS_UNTIL_STALE`| Number of hours an extractions that has passed its ready time is still shown on the upcoming extractions tab. | `12`
  `MOONMINING_REPROCESSING_YIELD`| Reprocessing yield used for calculating all values | `0.85`
  `MOONMINING_USE_REPROCESS_PRICING`|  Whether to calculate prices from it's reprocessed materials or not. Will use direct ore prices when switched off | `False`
  `MOONMINING_VOLUME_PER_DAY`| Maximum ore volume per day used for calculating moon values. | `960400`
  `MOONMINING_DAYS_PER_MONTH`| Average days per months used for calculating moon values. | `30.4`
  `MOONMINING_OVERWRITE_SURVEYS_WITH_ESTIMATES`| Whether uploaded survey are automatically overwritten by product estimates from extractions to keep the moon values current | `False`



  The following management commands are available to perform administrative tasks:

  > **Hint**:<br>Run any command with `--help` to see all options

  Name | Description
  -- | --
  `moonmining_calculate_all`| Calculate all properties for moons and extractions.
  `moonstuff_export_moons`| Export all moons from aa-moonstuff v1 to a CSV file, which can later be used to import the moons into the Moon Mining app
  `moonmining_load_eve`| Pre-loads data required for this app from ESI to improve app performance.
  `moonmining_import_moons`| Import moons from a CSV file. Example:<br>`moon_id,ore_type_id,amount`<br>`40161708,45506,0.19`





  - Q: Why does the tool not show values and ores for all my extractions?
  - A: Unfortunately, the Eve Online API does only provide basic information for extractions. Additional information like the list of ores are retrieved by trying to match moon mining notifications to extractions. However, that process it not 100% reliable. For example the API returns the latest notifications only, so notifications for extractions that have been setup weeks ago might no longer be available.



  - Q: How are the prices and values of ores calculated?
  - A: All ore prices are **average prices** (not Jita prices), which are the current average price of an item accross all of New Eden and the same that the in-game client is showing, e.g. for price estimates when scheduling an extraction.



  This project started as a fork from [aa-moonstuff](https://gitlab.com/colcrunch/aa-moonstuff) in 2019, but as diverged heavily since then through two major iterations. The first iteration was called Moon Planner and used internally. It had a very different data model build upon [allianceauth-evesde](https://gitlab.com/ErikKalkoken/allianceauth-evesde). The current version is the second iteration and is build upon [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse). Nevertheless, we like to take the opportunity to thank @colcrunch for providing a great starting point with moonstuff.


pkgId: bc6bba2e8dd080689ee9438d0f04df134c049d2253b1e8a4fc6c8cac53cca9c5
name: python-aa-moonstuff
arch: src
version: 2.0.4
epoch: 0
release: 1
summary: A plugin for publishing moon extractions, and keeping track of moon scan data.
url: https://gitlab.com/colcrunch/aa-moonstuff
rpm_license: GPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-moonstuff-2.0.4-1.src.rpm
checksum_type: sha256
description:
  ![pypi latest version](https://img.shields.io/pypi/v/aa-moonstuff?label=latest)
  ![python versions](https://img.shields.io/pypi/pyversions/aa-moonstuff)
  ![django versions](https://img.shields.io/pypi/djversions/aa-moonstuff?label=django)
  ![license](https://img.shields.io/pypi/l/aa-moonstuff?color=green)


  - [Overview](#overview)
  - [Key Features](#key-features)
  - [Screenshots](#screenshots)
  - [Installation](#installation)
  - [Updating](#updating)
  - [Settings](#settings)
  - [Permissions](#permissions)
  - [Credits](#credits)


  Moonstuff is an [AllianceAuth](https://gitlab.com/allianceauth/allianceauth) plugin focused on managing moons, from keeping track of moonscan
  data to making sure everyone knows when and where the next extraction will be.


  * Automatically pulls upcoming extractions from ESI.
  * Automatically updates ore composition, just in case CCP decides to shuffle moon ore around.
  * Pulls mining ledger data for all extractions as they happen.
    * Mining Ledger Data is used to track whether or not extractions are jackpots.
    * [Coming Soon] A mining ledger explorer is planned.
  * Per-m3 values are displayed per ore, customized based on a customizable refine percent.
  (So if you don't have a T2-rigged Null Sec Tatara and perfect skills, you can see a more realistic value)
  * Search for R-value or ore type from moon list.
    * Moons will show all rarity values available for that moon, rather than just the top value.






  ![Calendar View](https://i.imgur.com/FIImhhM.png)


  ![Card View](https://i.imgur.com/rE6Br1c.png)


  ![Jackpot Moon Card Example](https://i.imgur.com/KVdeiY2.png)


  ![Moon Info Modal](https://i.imgur.com/NbMy5dx.png)

  (Moon info page is identical)


  ![Moon List](https://i.imgur.com/KIFU8pq.png)


  ![Search by Rarity](https://i.imgur.com/vkkkCja.png)



  Install the app into your allianceauth virtualenvironment via PIP.

  ```bash
  $ pip install aa-moonstuff
  ```


  Configure your AA settings (`local.py`) as follows:
  - Add `'eveuniverse',`and `'moonstuff',` to `INSTALLED_APPS`
  - Add the following lines to the end of your settings file to ensure that the proper tasks are scheduled to run

  ```python

  EVEUNIVERSE_LOAD_TYPE_MATERIALS = True

  CELERYBEAT_SCHEDULE['moonstuff_import_extraction_data'] = {
      'task': 'moonstuff.tasks.import_extraction_data',
      'schedule': crontab(minute='*/10'),
  }
  CELERYBEAT_SCHEDULE['moonstuff_run_ledger_update'] = {
      'task': 'moonstuff.tasks.update_ledger',
      'schedule': crontab(minute=0, hour='*'),
  }
  CELERYBEAT_SCHEDULE['moonstuff_run_refinery_update'] = {
      'task': 'moonstuff.tasks.update_refineries',
      'schedule': crontab(minute=0, hour=0),
  }
  CELERYBEAT_SCHEDULE['moonstuff_run_price_update'] = {
      'task': 'moonstuff.tasks.load_prices',
      'schedule': crontab(minute=0, hour=0),
  }
  ```
  > **Note**: The last two tasks can be schdeuled at whatever time is best for you, though they need only be run once per day.

  - *Optional: Add any settings listed in [settings](#settings) if you would like to change the default values.*


  Run migrations and copy static files.

  ```bash
  $ python manage.py migrate
  $ python manage.py collectstatic
  ```

  Restart your supervisor tasks.


  Run the following command to pull the required eveuniverse data required for moonstuff.

  ```bash
  $ python manage.py moonstuff_preload_data
  ```


  To update your existing installation of Moonstuff first enable your virtual environment.

  Then run the following commands from your allianceauth project directory (the one that contains `manage.py`).

  ```bash
  $ pip install -U aa-moonstuff
  $ python manage.py migrate
  $ python manage.py collectstatic
  ```

  Lastly, restart your supervisor tasks.

  *Note: Be sure to follow any version specific update instructions as well. These instructions can be found on the `Tags` page for this repository.*



  | Setting Name | Description | Default |
  |--------------|-------------|---------|
  |`MOON_REFINE_PERCENT` | This setting defines the refine percent to use when calculating ore values. <br /> (`0.876` and `87.6` are both acceptable formats) | `87.6` |
  |`DEFAULT_EXTRACTION_VIEW` | This setting allows you to configure if you would like the calendar or card view to show by default when the dashboard loads. <br /> (Options are `"Calendar"` or `"Card"`)| `"Calendar"` |



  | Permission Name | Admin Site | Auth Site |
  |-----------------|------------|-----------|
  |Moonstuff.access_moonstuff | None | Can access the moonstuff module.|
  |Moonstuff.access_moon_list | None | Can access the list of known moons.|
  |Resource.add_resource | None | Can add access the add_scan page to add moon scan data. |
  |TrackingCharacter.add_trackingcharacter | None | Can link a character to be used in tracking extractions. |


  Though accepted best practice for auth is to ensure that one's ESI application has access to all
  scopes through the EVE Development portal, if you are not following this practice please make sure to
  include the following scopes in your ESI application.

  | Scope | Purpose |
  |-------|---------|
  |esi-industry.read_corporation_mining.v1| This is required to pull corporation moon extraction data. (The in-game Station_Manager and Accountant roles are required) |
  |esi-universe.read_structures.v1 | Required to pull structure names. |
  |esi-characters.read_notifications.v1| Required to pull character notifications used for updating resource data. |


  This plugin makes use of [django-eveuniverse](https://gitlab.com/ErikKalkoken/django-eveuniverse) by @ErikKalkoken


pkgId: 3b6f1fbf89dd52d561ea3ce665ad11ce5c9ae0cce5e40bc3a8b5ae2b74e3beed
name: python-aa-opcalendar
arch: src
version: 3.0.0
epoch: 0
release: 1
summary: Event calendar plugin app for Alliance Auth
url: https://gitlab.com/paulipa/allianceauth-opcalendar
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-opcalendar-3.0.0-1.src.rpm
checksum_type: sha256
description:
  opcalendar basic_access | Can access this app and see operations based on visibility rules | Everyone
  opcalendar create_event | Can create and edit events | Leadership, FCs
  opcalendar manage_event | Can delete and manage signups | Leadership, FCs
  opcalendar see_signups | Can see all signups for event | Leadership, FCs, Members


pkgId: 85ddc4caf483e4e55d223381951d132d0152c76444a8ab9522ef3a73f5932fc0
name: python-aa-policy-validator
arch: src
version: 0.8
epoch: 0
release: 1
summary: Run AWS Access Analyzer Policy Validation against all your IAM Policies (account-wide)
url: https://github.com/z0ph/aa-policy-validator
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-policy-validator-0.8-1.src.rpm
checksum_type: sha256
description:
  This script will analyze using [AWS Access Analyzer - Policy Validation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html) all your account customer managed IAM policies.



  > ProTip :bulb: : Use AWS CloudShell to run this directly on your AWS Account



          $ python3 -m pip install aa-policy-validator --user

          $ python3 -m aa-policy-validator



          $ python3 -m pip install aa-policy-validator -U --user --no-cache-dir


  Results will be written into `/tmp/findings` folder with a `README.md` file inside.

  ![findings screenshot](./assets/screenshot.png)


pkgId: b4c0ef466c37ad80e6bfa5a35451dbf1eef056e36aee091cc42fa888b01de045
name: python-aa-routing
arch: src
version: 0.2.2a0
epoch: 0
release: 1
summary: AllianceAuth Routing and Pathfinding
url: https://gitlab.com/tactical-supremacy/aa-routing
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-routing-0.2.2a0-1.src.rpm
checksum_type: sha256
description:
  Routing is a pathfinding plugin for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/).



  - def route_path(source: int, destination: int, mode="p_shortest",  algorithm="astar", edges: list = [], static_cache: bool = False) -> List[int]:
  - def route_length(source: int, destination: int, mode="p_shortest",  algorithm="astar", edges: List = [], static_cache: bool = False ) -> int:
  - def systems_range(source: int, range: int, mode="p_shortest", edges: list = [], static_cache: bool = False) -> List:

  - A pregenerated optional Graph dict, to reduce DB load and processing for mass use, cannot guarantee accuracy without shipping new versions.





  AA Drifters
  AA Incursions



  Routing is an App for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth/), Please make sure you have this installed. Routing is not a standalone Django Application



  ```shell
  pip install aa-routing
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'routing'` to `INSTALLED_APPS`
  - Add below lines to your settings file:



  - Run migrations `python manage.py migrate`
  - Gather your staticfiles `python manage.py collectstatic`
  - Restart your project `supervisorctl restart myauth:`



  In the Admin interface, visit `routing` or `<AUTH-URL>/admin/routing`



  | Name | Description | Default |
  | --- | --- | --- |



  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at <https://developers.eveonline.com> before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.


pkgId: 4454cbc62c6fa6c423a1d91072e436acc516de9f2a273f9ac19b791feed09cc0
name: python-aa-rss-to-discord
arch: src
version: 2.2.0
epoch: 0
release: 1
summary: Alliance Auth module to post news from RSS feeds to your Discord
url: https://github.com/ppfeufer/aa-rss-to-discord
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-rss-to-discord-2.2.0-1.src.rpm
checksum_type: sha256
description:
  [![Version](https://img.shields.io/pypi/v/aa-rss-to-discord?label=release)](https://pypi.org/project/aa-rss-to-discord/)
  [![License](https://img.shields.io/github/license/ppfeufer/aa-rss-to-discord)](https://github.com/ppfeufer/aa-rss-to-discord/blob/master/LICENSE)
  [![Python](https://img.shields.io/pypi/pyversions/aa-rss-to-discord)](https://pypi.org/project/aa-rss-to-discord/)
  [![Django](https://img.shields.io/pypi/djversions/aa-rss-to-discord?label=django)](https://pypi.org/project/aa-rss-to-discord/)
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-rss-to-discord/master.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-rss-to-discord/master)
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
  [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
  [![Checks](https://github.com/ppfeufer/aa-rss-to-discord/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-rss-to-discord/actions/workflows/automated-checks.yml)
  [![codecov](https://codecov.io/gh/ppfeufer/aa-rss-to-discord/branch/master/graph/badge.svg?token=LVEQ6W55ZB)](https://codecov.io/gh/ppfeufer/aa-rss-to-discord)
  [![Badge: Translation Status]][weblate engage]
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/ppfeufer/aa-rss-to-discord/blob/master/CODE_OF_CONDUCT.md)

  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)

  A simple app to post selected RSS feeds to your Discord.

  ______________________________________________________________________

  <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->

  - [Alliance Auth RSS to Discord](#alliance-auth-rss-to-discord)
    - [Installation](#installation)
      - [Step 0.5: Install AA-Discordbot](#step-05-install-aa-discordbot)
      - [Step 1: Install the Package](#step-1-install-the-package)
      - [Step 2: Configure Alliance Auth](#step-2-configure-alliance-auth)
      - [Step 3: Finalizing the Installation](#step-3-finalizing-the-installation)
      - [Step 4: Configure your RSS Feeds](#step-4-configure-your-rss-feeds)
    - [Discord Bot Commands](#discord-bot-commands)
    - [Updating](#updating)
    - [Changelog](#changelog)
    - [Translation Status](#translation-status)
    - [Contributing](#contributing)

  <!-- mdformat-toc end -->

  ______________________________________________________________________



  **Important**: Please make sure you meet all preconditions before you proceed:

  - Alliance Auth RSS to Discord is a plugin for Alliance Auth. If you don't have Alliance Auth running
    already, please install it first before proceeding. (see the official
    [AA installation guide](https://allianceauth.readthedocs.io/en/latest/installation/allianceauth.html) for details)
  - Alliance Auth RSS to Discord needs [AA-Discordbot](https://github.com/pvyParts/allianceauth-discordbot)
    to interact with your Discord server. Make sure it is installed and configured
    **before** installing this app.



  In order for this app to work, you need to install and configure
  [AA-Discordbot](https://github.com/pvyParts/allianceauth-discordbot) first. Read the
  instructions how to do so in the README of AA-Discordbot.



  Make sure you're in the virtual environment (venv) of your Alliance Auth
  installation Then install the latest release directly from PyPi.

  ```shell
  pip install aa-rss-to-discord
  ```



  This is fairly simple, just add the following to the `INSTALLED_APPS` of your `local.py`

  Configure your AA settings (`local.py`) as follows:

  - Add `"aa_rss_to_discord",` to `INSTALLED_APPS`
  - Add the scheduled task
    ```python
    CELERYBEAT_SCHEDULE["aa_rss_to_discord_fetch_rss"] = {
        "task": "aa_rss_to_discord.tasks.fetch_rss",
        "schedule": crontab(minute="*/5"),
    }
    ```



  Run migrations to finalize the installation

  ```shell
  python manage.py migrate
  ```

  Finally, restart your supervisor services for AA.



  First, you need to set up the Discord Server and Channels. For this, you go in your
  admin backend to the Discordbot settings and enter the needed information there.

  When done, you can set up your RSS feeds. This can be done in the setting of this
  app, still in your admin backend. Create a new RSS Feed entry, enter the name, url
  and select the Discord channel it should be posted to. Once done, save it.



  The following commands are available for the Discord bot to manage RSS/Atom feeds:

  | Command                         | Options                                                                                   | What it does                                                     |
  | :------------------------------ | :---------------------------------------------------------------------------------------- | :--------------------------------------------------------------- |
  | `!rss_add <rss_url> <rss_name>` | - `rss_url` - The URL of the RSS/Atom feed<br>- `rss_name` - A Name for the RSS/Atom Feed | Adding a RSS/Atom feed to the current channel                    |
  | `!rss_delete <rss_feed_id>`     | `rss_feed_id` - The ID of the RSS/Atom feed you want to remove                            | Remove a RSS/Atom feed from the current Discord channel          |
  | `!rss_disable <rss_feed_id>`    | `rss_feed_id` - The ID of the RSS/Atom feed you want to disable                           | Disable an enabled RSS/Atom feed for the current Discord channel |
  | `!rss_enable <rss_feed_id>`     | `rss_feed_id` - The ID of the RSS/Atom feed you want to enable                            | Enable a disabled RSS/Atom feed for the current Discord channel  |
  | `!rss_list`                     | None                                                                                      | List all RSS/Atom feeds for the current Discord channel          |



  To update your existing installation of Alliance Auth RSS to Discord, first enable your
  virtual environment (venv) of your Alliance Auth installation.

  ```bash
  pip install -U aa-rss-to-discord

  python manage.py migrate
  ```

  Finally, restart your supervisor services for AA.



  See [CHANGELOG.md]



  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-rss-to-discord/multi-auto.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)

  Do you want to help translate this app into your language or improve the existing
  translation? - [Join our team of translators][weblate engage]!



  Do you want to contribute to this project? That's cool!

  Please make sure to read the [Contribution Guidelines].\
  (I promise, it's not much, just some basics)

  <!-- Links -->

  [badge: translation status]: https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-rss-to-discord/svg-badge.svg "Translation Status"
  [changelog.md]: https://github.com/ppfeufer/aa-rss-to-discord/blob/master/CHANGELOG.md "Changelog"
  [contribution guidelines]: https://github.com/ppfeufer/aa-rss-to-discord/blob/master/CONTRIBUTING.md "Contribution Guidelines"
  [weblate engage]: https://weblate.ppfeufer.de/engage/alliance-auth-apps/ "Weblate Translations"

rpm_license:
[cell repeats an earlier one in this file: 34486 characters]


pkgId: 08227baec72b66100c6554f2f018c93c0a779d1cafc819f270fe557b9630cbc8
name: python-aa-secret-santa
arch: src
version: 0.3.0a0
epoch: 0
release: 1
summary: Alliance Auth Secret Santa
url: https://gitlab.com/tactical-supremacy/aa-secret-santa
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-secret-santa-0.3.0a0-1.src.rpm
checksum_type: sha256
description:
  A Secret Santa Manager for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth)



  - Accepts Applications to be secret santas
  - Handles randomly pairing up users
  - Notifies users of their santee
  - handles if gifts have been delivered
  - [Secure Groups Integration](https://github.com/Solar-Helix-Independent-Transport/allianceauth-secure-groups)





  ```shell
  pip install aa-secret-santa
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'secretsanta'` to `INSTALLED_APPS`



  - Run migrations `python manage.py migrate`
  - Gather your staticfiles `python manage.py collectstatic`
  - Restart your project `supervisorctl restart myauth:`



  In the Admin interface, visit `secretsanta` or `<AUTH-URL>/admin/secretsanta` # Coming Soon



  | Perm | Admin Site  | Perm | Description |
  | --- | --- | --- | --- |
  | basic_access | nill | Can access Secret Santa | Can access the Secret Santa Module and Apply to Years
  | manager | nill | Can manage Secret Santa | Can Manage and See all Santa<>Santee Pairs



  | Name | Description | Default |
  | --- | --- | --- |
  `SECRETSANTA_GENERATE_PAIRS_PRIORITY`| the generate_pairs task, to run super uber omega immediately so we can identify issues | 1
  `SECRETSANTA_NOTIFY_PRIORITY`| Priority for discord messages for secret santa | 5



  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at <https://developers.eveonline.com> before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.


pkgId: 6a441039c5ca0e648907e5474e0b40971b8120363b424fe3bfee10fc8f130e90
name: python-aa-secret-santa
arch: src
version: 0.4.0a0
epoch: 0
release: 1
summary: Alliance Auth Secret Santa
url: https://gitlab.com/tactical-supremacy/aa-secret-santa
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-secret-santa-0.4.0a0-1.src.rpm
checksum_type: sha256
description:
  A Secret Santa Manager for [Alliance Auth](https://gitlab.com/allianceauth/allianceauth)



  - Accepts Applications to be secret santas
  - Handles randomly pairing up users
  - Notifies users of their santee
  - handles if gifts have been delivered
  - [Secure Groups Integration](https://github.com/Solar-Helix-Independent-Transport/allianceauth-secure-groups)





  ```shell
  pip install aa-secret-santa
  ```



  Configure your Auth settings (`local.py`) as follows:

  - Add `'secretsanta'` to `INSTALLED_APPS`



  - Run migrations `python manage.py migrate`
  - Gather your staticfiles `python manage.py collectstatic`
  - Restart your project `supervisorctl restart myauth:`



  In the Admin interface, visit `secretsanta` or `<AUTH-URL>/admin/secretsanta` # Coming Soon



  | Perm | Admin Site  | Perm | Description |
  | --- | --- | --- | --- |
  | basic_access | nill | Can access Secret Santa | Can access the Secret Santa Module and Apply to Years |
  | manager | nill | Can manage Secret Santa | Can Manage and See all Santa<>Santee Pairs |



  | Name | Description | Default |
  | --- | --- | --- |
  | `SECRETSANTA_GENERATE_PAIRS_PRIORITY`| the generate_pairs task, to run super uber omega immediately so we can identify issues | 1 |
  | `SECRETSANTA_NOTIFY_PRIORITY`| Priority for discord messages for secret santa | 5 |



  Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at <https://developers.eveonline.com> before submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.


pkgId: 186d105232ba4620f3004bc221ec6082f8ff9a81a753d98ca3104f342ce2ba5a
name: python-aa-simplewiki
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: Alliance Auth Wiki Plugin
url: https://github.com/meowosaurus/aa-simplewiki
rpm_license: GNU General Public License v3 (GPLv3)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aa-simplewiki-2.1.0-1.src.rpm
checksum_type: sha256
description:
  basic_access | None | Can view all wiki pages
  editor_access | None | Can create, edit and delete wiki pages and menus

  - Migrate all data from 1.0.x to 1.1.1 to use new model system: `python manage.py simplewiki_migrate_v1_1`
  - Migrate section data from 1.1.1 and later to 1.1.3 to add author details: `python manage.py simplewiki_migrate_v1_3`

  - [Alliance Auth](https://gitlab.com/allianceauth/allianceauth)
  - [allianceauth-app-utils](https://gitlab.com/ErikKalkoken/allianceauth-app-utils)
  - [Mistune](https://github.com/lepture/mistune)
  - [jQuery](https://github.com/jquery/jquery)
  - [Nestable](https://github.com/dbushell/Nestable)

  * On Discord: meowlicious


