rename service to ffxivbis, add notes about venv

This commit is contained in:
Evgenii Alekseev 2019-09-15 02:57:53 +03:00
parent 36f0b8151a
commit 28dabcb44e
68 changed files with 172 additions and 150 deletions

View File

@ -9,14 +9,23 @@ This service requires python >= 3.7. For other dependencies see `setup.py`.
In general installation process looks like:
```bash
python setup.py build
python setup.py build install
python setup.py test # if you want to run tests
```
Service can be run from `src` directory by using command:
With virtualenv (make sure that virtualenv package was installed) the process may look like:
```bash
python -m service.application.application
virtualenv -p python3.7 env
source env/bin/activate
python setup.py install
pip install aiosqlite # setup.py does not handle extras
```
Service can be run by using command (if you don't use virtualenv, you have to run it from `src` directory):
```bash
python -m ffxivbis.application.application
```
To see all available options type `--help`.
@ -27,6 +36,17 @@ REST API documentation is available at `http://0.0.0.0:8000/api-docs`. HTML repr
*Note*: host and port depend on configuration settings.
### Authorization
Default admin user is `admin:qwerty`, but it may be changed by generating new hash, e.g.:
```python
from passlib.hash import md5_crypt
md5_crypt.hash('newstrongpassword')
```
and add new password to configuration.
## Configuration
* `settings` section

View File

@ -5,7 +5,7 @@ from os import path
here = path.abspath(path.dirname(__file__))
metadata = dict()
with open(convert_path('src/service/core/version.py')) as metadata_file:
with open(convert_path('src/ffxivbis/core/version.py')) as metadata_file:
exec(metadata_file.read(), metadata)
@ -22,13 +22,15 @@ setup(
license='BSD',
packages=find_packages(exclude=['contrib', 'docs', 'tests']),
package_dir={'': 'src'},
packages=find_packages(where='src', exclude=['contrib', 'docs', 'test']),
install_requires=[
'aiohttp',
'aiohttp==3.6.0',
'aiohttp_jinja2',
'aiohttp_security',
'apispec',
'iniherit',
'Jinja2',
'passlib',
'requests',
@ -44,7 +46,7 @@ setup(
include_package_data=True,
extras_require={
'Postgresql': ['aiopg'],
'Postgresql': ['asyncpg'],
'SQLite': ['aiosqlite'],
'test': ['coverage', 'pytest'],
},

View File

@ -10,7 +10,7 @@ from aiohttp.web import middleware, Request, Response
from aiohttp_security import AbstractAuthorizationPolicy, check_permission
from typing import Callable, Optional
from service.core.database import Database
from ffxivbis.core.database import Database
class AuthorizationPolicy(AbstractAuthorizationPolicy):

View File

@ -9,17 +9,17 @@
from aiohttp.web import Application
from apispec import APISpec
from service.core.version import __version__
from service.models.action import Action
from service.models.bis import BiS, BiSLink
from service.models.error import Error
from service.models.job import Job
from service.models.loot import Loot
from service.models.piece import Piece
from service.models.player import Player, PlayerId, PlayerIdWithCounters
from service.models.player_edit import PlayerEdit
from service.models.upgrade import Upgrade
from service.models.user import User
from ffxivbis.core.version import __version__
from ffxivbis.models.action import Action
from ffxivbis.models.bis import BiS, BiSLink
from ffxivbis.models.error import Error
from ffxivbis.models.job import Job
from ffxivbis.models.loot import Loot
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player, PlayerId, PlayerIdWithCounters
from ffxivbis.models.player_edit import PlayerEdit
from ffxivbis.models.upgrade import Upgrade
from ffxivbis.models.user import User
def get_spec(app: Application) -> APISpec:

View File

@ -9,12 +9,12 @@
from aiohttp.web import Response
from typing import Any, Dict, List, Optional, Type
from service.models.job import Job
from service.models.piece import Piece
from service.models.player import PlayerId
from ffxivbis.models.job import Job
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import PlayerId
from service.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from service.api.views.common.bis_base import BiSBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from ffxivbis.api.views.common.bis_base import BiSBaseView
from .openapi import OpenApi

View File

@ -9,8 +9,8 @@
from aiohttp.web import Response
from typing import Any, Dict, List, Optional, Type
from service.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from service.api.views.common.login_base import LoginBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from ffxivbis.api.views.common.login_base import LoginBaseView
from .openapi import OpenApi

View File

@ -6,8 +6,8 @@
from aiohttp.web import Response
from typing import Any, Dict, List, Optional, Type
from service.api.utils import wrap_exception, wrap_json
from service.api.views.common.login_base import LoginBaseView
from ffxivbis.api.utils import wrap_exception, wrap_json
from ffxivbis.api.views.common.login_base import LoginBaseView
from .openapi import OpenApi

View File

@ -9,12 +9,12 @@
from aiohttp.web import Response
from typing import Any, Dict, List, Optional, Type
from service.models.job import Job
from service.models.piece import Piece
from service.models.player import PlayerId
from ffxivbis.models.job import Job
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import PlayerId
from service.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from service.api.views.common.loot_base import LootBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from ffxivbis.api.views.common.loot_base import LootBaseView
from .openapi import OpenApi

View File

@ -10,7 +10,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional, Type
from service.models.serializable import Serializable
from ffxivbis.models.serializable import Serializable
class OpenApi(Serializable):

View File

@ -9,10 +9,10 @@
from aiohttp.web import Response
from typing import Any, Dict, List, Optional, Type
from service.models.job import Job
from ffxivbis.models.job import Job
from service.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from service.api.views.common.player_base import PlayerBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from ffxivbis.api.views.common.player_base import PlayerBaseView
from .openapi import OpenApi

View File

@ -9,10 +9,10 @@
from aiohttp.web import View
from typing import List, Optional
from service.core.ariyala_parser import AriyalaParser
from service.models.bis import BiS
from service.models.piece import Piece
from service.models.player import PlayerId
from ffxivbis.core.ariyala_parser import AriyalaParser
from ffxivbis.models.bis import BiS
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import PlayerId
class BiSBaseView(View):

View File

@ -10,7 +10,7 @@ from aiohttp.web import HTTPFound, HTTPUnauthorized, View
from aiohttp_security import check_authorized, forget, remember
from passlib.hash import md5_crypt
from service.models.user import User
from ffxivbis.models.user import User
class LoginBaseView(View):

View File

@ -9,9 +9,9 @@
from aiohttp.web import View
from typing import List, Optional, Union
from service.models.piece import Piece
from service.models.player import PlayerId, PlayerIdWithCounters
from service.models.upgrade import Upgrade
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import PlayerId, PlayerIdWithCounters
from ffxivbis.models.upgrade import Upgrade
class LootBaseView(View):

View File

@ -9,10 +9,10 @@
from aiohttp.web import View
from typing import List, Optional
from service.core.ariyala_parser import AriyalaParser
from service.models.bis import BiS
from service.models.job import Job
from service.models.player import Player, PlayerId
from ffxivbis.core.ariyala_parser import AriyalaParser
from ffxivbis.models.bis import BiS
from ffxivbis.models.job import Job
from ffxivbis.models.player import Player, PlayerId
class PlayerBaseView(View):

View File

@ -10,12 +10,12 @@ from aiohttp.web import HTTPFound, Response
from aiohttp_jinja2 import template
from typing import Any, Dict, List
from service.models.piece import Piece
from service.models.player import Player, PlayerId
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player, PlayerId
from service.api.utils import wrap_exception, wrap_invalid_param
from service.api.views.common.bis_base import BiSBaseView
from service.api.views.common.player_base import PlayerBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param
from ffxivbis.api.views.common.bis_base import BiSBaseView
from ffxivbis.api.views.common.player_base import PlayerBaseView
class BiSHtmlView(BiSBaseView, PlayerBaseView):

View File

@ -10,13 +10,13 @@ from aiohttp.web import HTTPFound, Response
from aiohttp_jinja2 import template
from typing import Any, Dict, List
from service.models.piece import Piece
from service.models.player import Player, PlayerId
from service.models.upgrade import Upgrade
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player, PlayerId
from ffxivbis.models.upgrade import Upgrade
from service.api.utils import wrap_exception, wrap_invalid_param
from service.api.views.common.loot_base import LootBaseView
from service.api.views.common.player_base import PlayerBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param
from ffxivbis.api.views.common.loot_base import LootBaseView
from ffxivbis.api.views.common.player_base import PlayerBaseView
class LootHtmlView(LootBaseView, PlayerBaseView):

View File

@ -10,13 +10,13 @@ from aiohttp.web import Response
from aiohttp_jinja2 import template
from typing import Any, Dict, List, Union
from service.models.piece import Piece
from service.models.player import PlayerIdWithCounters
from service.models.upgrade import Upgrade
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import PlayerIdWithCounters
from ffxivbis.models.upgrade import Upgrade
from service.api.utils import wrap_invalid_param
from service.api.views.common.loot_base import LootBaseView
from service.api.views.common.player_base import PlayerBaseView
from ffxivbis.api.utils import wrap_invalid_param
from ffxivbis.api.views.common.loot_base import LootBaseView
from ffxivbis.api.views.common.player_base import PlayerBaseView
class LootSuggestHtmlView(LootBaseView, PlayerBaseView):

View File

@ -10,11 +10,11 @@ from aiohttp.web import HTTPFound, Response
from aiohttp_jinja2 import template
from typing import Any, Dict, List
from service.models.job import Job
from service.models.player import PlayerIdWithCounters
from ffxivbis.models.job import Job
from ffxivbis.models.player import PlayerIdWithCounters
from service.api.utils import wrap_exception, wrap_invalid_param
from service.api.views.common.player_base import PlayerBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param
from ffxivbis.api.views.common.player_base import PlayerBaseView
class PlayerHtmlView(PlayerBaseView):

View File

@ -10,10 +10,10 @@ from aiohttp.web import HTTPFound, Response
from aiohttp_jinja2 import template
from typing import Any, Dict, List
from service.models.user import User
from ffxivbis.models.user import User
from service.api.utils import wrap_exception, wrap_invalid_param
from service.api.views.common.login_base import LoginBaseView
from ffxivbis.api.utils import wrap_exception, wrap_invalid_param
from ffxivbis.api.views.common.login_base import LoginBaseView
class UsersHtmlView(LoginBaseView):

View File

@ -14,10 +14,10 @@ from aiohttp import web
from aiohttp_security import setup as setup_security
from aiohttp_security import CookiesIdentityPolicy
from service.core.config import Configuration
from service.core.database import Database
from service.core.loot_selector import LootSelector
from service.core.party import Party
from ffxivbis.core.config import Configuration
from ffxivbis.core.database import Database
from ffxivbis.core.loot_selector import LootSelector
from ffxivbis.core.party import Party
from .auth import AuthorizationPolicy, authorize_factory
from .routes import setup_routes

View File

@ -6,7 +6,7 @@
#
# License: 3-clause BSD, see https://opensource.org/licenses/BSD-3-Clause
#
from service.core.config import Configuration
from ffxivbis.core.config import Configuration
from .core import Application

View File

@ -9,12 +9,12 @@
import asyncio
import logging
from service.api.web import run_server, setup_service
from service.core.config import Configuration
from service.core.database import Database
from service.core.loot_selector import LootSelector
from service.core.party import Party
from service.models.user import User
from ffxivbis.api.web import run_server, setup_service
from ffxivbis.core.config import Configuration
from ffxivbis.core.database import Database
from ffxivbis.core.loot_selector import LootSelector
from ffxivbis.core.party import Party
from ffxivbis.models.user import User
class Application:

View File

@ -11,7 +11,7 @@ import requests
from typing import Dict, List, Optional
from service.models.piece import Piece
from ffxivbis.models.piece import Piece
from .config import Configuration

View File

@ -14,11 +14,11 @@ import logging
from yoyo import get_backend, read_migrations
from typing import List, Mapping, Optional, Type, Union
from service.models.loot import Loot
from service.models.piece import Piece
from service.models.player import Player, PlayerId
from service.models.upgrade import Upgrade
from service.models.user import User
from ffxivbis.models.loot import Loot
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player, PlayerId
from ffxivbis.models.upgrade import Upgrade
from ffxivbis.models.user import User
from .config import Configuration
from .exceptions import InvalidDatabase

View File

@ -8,9 +8,9 @@
#
from typing import Iterable, List, Tuple, Union
from service.models.player import Player, PlayerIdWithCounters
from service.models.piece import Piece
from service.models.upgrade import Upgrade
from ffxivbis.models.player import Player, PlayerIdWithCounters
from ffxivbis.models.piece import Piece
from ffxivbis.models.upgrade import Upgrade
from .party import Party

View File

@ -11,9 +11,9 @@ from __future__ import annotations
from threading import Lock
from typing import Dict, List, Optional, Type, Union
from service.models.piece import Piece
from service.models.player import Player, PlayerId
from service.models.upgrade import Upgrade
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player, PlayerId
from ffxivbis.models.upgrade import Upgrade
from .database import Database

View File

@ -12,13 +12,13 @@ from passlib.hash import md5_crypt
from psycopg2.extras import DictCursor
from typing import List, Optional, Union
from service.models.bis import BiS
from service.models.job import Job
from service.models.loot import Loot
from service.models.piece import Piece
from service.models.player import Player, PlayerId
from service.models.upgrade import Upgrade
from service.models.user import User
from ffxivbis.models.bis import BiS
from ffxivbis.models.job import Job
from ffxivbis.models.loot import Loot
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player, PlayerId
from ffxivbis.models.upgrade import Upgrade
from ffxivbis.models.user import User
from .database import Database

View File

@ -9,13 +9,13 @@
from passlib.hash import md5_crypt
from typing import List, Optional, Union
from service.models.bis import BiS
from service.models.job import Job
from service.models.loot import Loot
from service.models.piece import Piece
from service.models.player import Player, PlayerId
from service.models.upgrade import Upgrade
from service.models.user import User
from ffxivbis.models.bis import BiS
from ffxivbis.models.job import Job
from ffxivbis.models.loot import Loot
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player, PlayerId
from ffxivbis.models.upgrade import Upgrade
from ffxivbis.models.user import User
from .database import Database
from .sqlite_helper import SQLiteHelper

View File

@ -11,7 +11,7 @@ from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Dict, List, Mapping, Type, Union
from service.core.exceptions import InvalidDataRow
from ffxivbis.core.exceptions import InvalidDataRow
from .serializable import Serializable
from .upgrade import Upgrade

View File

@ -4,17 +4,17 @@ import tempfile
from typing import Any, List
from service.api.web import setup_service
from service.core.ariyala_parser import AriyalaParser
from service.core.config import Configuration
from service.core.database import Database
from service.core.loot_selector import LootSelector
from service.core.party import Party
from service.core.sqlite import SQLiteDatabase
from service.models.bis import BiS
from service.models.job import Job
from service.models.piece import Head, Piece, Weapon
from service.models.player import Player
from ffxivbis.api.web import setup_service
from ffxivbis.core.ariyala_parser import AriyalaParser
from ffxivbis.core.config import Configuration
from ffxivbis.core.database import Database
from ffxivbis.core.loot_selector import LootSelector
from ffxivbis.core.party import Party
from ffxivbis.core.sqlite import SQLiteDatabase
from ffxivbis.models.bis import BiS
from ffxivbis.models.job import Job
from ffxivbis.models.piece import Head, Piece, Weapon
from ffxivbis.models.player import Player
@pytest.fixture

View File

@ -1,8 +1,8 @@
from typing import List
from service.core.ariyala_parser import AriyalaParser
from service.models.piece import Piece
from service.models.player import Player
from ffxivbis.core.ariyala_parser import AriyalaParser
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player
def test_get(parser: AriyalaParser, player: Player, bis_link: str, bis_set: List[Piece]) -> None:

View File

@ -1,6 +1,6 @@
from service.models.bis import BiS
from service.models.piece import Piece
from service.models.upgrade import Upgrade
from ffxivbis.models.bis import BiS
from ffxivbis.models.piece import Piece
from ffxivbis.models.upgrade import Upgrade
def test_set_item(bis: BiS, weapon: Piece) -> None:

View File

@ -1,6 +1,6 @@
from service.core.loot_selector import LootSelector
from service.models.piece import Piece
from service.models.player import Player
from ffxivbis.core.loot_selector import LootSelector
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player
def test_suggest_by_need(selector: LootSelector, player: Player, player2: Player, head_with_upgrade: Piece) -> None:

View File

@ -1,7 +1,7 @@
from service.core.database import Database
from service.core.party import Party
from service.models.piece import Piece
from service.models.player import Player
from ffxivbis.core.database import Database
from ffxivbis.core.party import Party
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player
async def test_set_player(party: Party, player: Player) -> None:

View File

@ -1,4 +1,4 @@
from service.models.piece import Piece
from ffxivbis.models.piece import Piece
def test_parse_head(head_with_upgrade: Piece) -> None:

View File

@ -1,5 +1,5 @@
from service.models.piece import Piece
from service.models.player import Player
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player
def test_loot_count(player: Player, head_with_upgrade: Piece, weapon: Piece) -> None:

View File

@ -1,9 +1,9 @@
from typing import Any, List
from service.api.utils import make_json
from service.core.party import Party
from service.models.piece import Piece
from service.models.player import Player
from ffxivbis.api.utils import make_json
from ffxivbis.core.party import Party
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player
async def test_bis_get(server: Any, party: Party, player: Player, player2: Player,

View File

@ -1,9 +1,9 @@
from typing import Any
from service.api.utils import make_json
from service.core.party import Party
from service.models.piece import Piece
from service.models.player import Player
from ffxivbis.api.utils import make_json
from ffxivbis.core.party import Party
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player
async def test_loot_get(server: Any, party: Party, player: Player, player2: Player, weapon: Piece) -> None:

View File

@ -1,9 +1,9 @@
from typing import Any, List
from service.api.utils import make_json
from service.core.party import Party
from service.models.piece import Piece
from service.models.player import Player
from ffxivbis.api.utils import make_json
from ffxivbis.core.party import Party
from ffxivbis.models.piece import Piece
from ffxivbis.models.player import Player
async def test_players_get(server: Any, party: Party, player: Player) -> None: