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: In general installation process looks like:
```bash ```bash
python setup.py build python setup.py build install
python setup.py test # if you want to run tests 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 ```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`. 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. *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 ## Configuration
* `settings` section * `settings` section

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,10 +9,10 @@
from aiohttp.web import Response from aiohttp.web import Response
from typing import Any, Dict, List, Optional, Type 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 ffxivbis.api.utils import wrap_exception, wrap_invalid_param, wrap_json
from service.api.views.common.player_base import PlayerBaseView from ffxivbis.api.views.common.player_base import PlayerBaseView
from .openapi import OpenApi from .openapi import OpenApi

View File

@ -9,10 +9,10 @@
from aiohttp.web import View from aiohttp.web import View
from typing import List, Optional from typing import List, Optional
from service.core.ariyala_parser import AriyalaParser from ffxivbis.core.ariyala_parser import AriyalaParser
from service.models.bis import BiS from ffxivbis.models.bis import BiS
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import PlayerId from ffxivbis.models.player import PlayerId
class BiSBaseView(View): 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 aiohttp_security import check_authorized, forget, remember
from passlib.hash import md5_crypt from passlib.hash import md5_crypt
from service.models.user import User from ffxivbis.models.user import User
class LoginBaseView(View): class LoginBaseView(View):

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -10,10 +10,10 @@ from aiohttp.web import HTTPFound, Response
from aiohttp_jinja2 import template from aiohttp_jinja2 import template
from typing import Any, Dict, List 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 ffxivbis.api.utils import wrap_exception, wrap_invalid_param
from service.api.views.common.login_base import LoginBaseView from ffxivbis.api.views.common.login_base import LoginBaseView
class UsersHtmlView(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 setup as setup_security
from aiohttp_security import CookiesIdentityPolicy from aiohttp_security import CookiesIdentityPolicy
from service.core.config import Configuration from ffxivbis.core.config import Configuration
from service.core.database import Database from ffxivbis.core.database import Database
from service.core.loot_selector import LootSelector from ffxivbis.core.loot_selector import LootSelector
from service.core.party import Party from ffxivbis.core.party import Party
from .auth import AuthorizationPolicy, authorize_factory from .auth import AuthorizationPolicy, authorize_factory
from .routes import setup_routes from .routes import setup_routes

View File

@ -6,7 +6,7 @@
# #
# License: 3-clause BSD, see https://opensource.org/licenses/BSD-3-Clause # 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 from .core import Application

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -11,7 +11,7 @@ from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from typing import Any, Dict, List, Mapping, Type, Union 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 .serializable import Serializable
from .upgrade import Upgrade from .upgrade import Upgrade

View File

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

View File

@ -1,8 +1,8 @@
from typing import List from typing import List
from service.core.ariyala_parser import AriyalaParser from ffxivbis.core.ariyala_parser import AriyalaParser
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import Player from ffxivbis.models.player import Player
def test_get(parser: AriyalaParser, player: Player, bis_link: str, bis_set: List[Piece]) -> None: 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 ffxivbis.models.bis import BiS
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.upgrade import Upgrade from ffxivbis.models.upgrade import Upgrade
def test_set_item(bis: BiS, weapon: Piece) -> None: def test_set_item(bis: BiS, weapon: Piece) -> None:

View File

@ -1,6 +1,6 @@
from service.core.loot_selector import LootSelector from ffxivbis.core.loot_selector import LootSelector
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import Player from ffxivbis.models.player import Player
def test_suggest_by_need(selector: LootSelector, player: Player, player2: Player, head_with_upgrade: Piece) -> None: 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 ffxivbis.core.database import Database
from service.core.party import Party from ffxivbis.core.party import Party
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import Player from ffxivbis.models.player import Player
async def test_set_player(party: Party, player: Player) -> None: 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: def test_parse_head(head_with_upgrade: Piece) -> None:

View File

@ -1,5 +1,5 @@
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import Player from ffxivbis.models.player import Player
def test_loot_count(player: Player, head_with_upgrade: Piece, weapon: Piece) -> None: 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 typing import Any, List
from service.api.utils import make_json from ffxivbis.api.utils import make_json
from service.core.party import Party from ffxivbis.core.party import Party
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import Player from ffxivbis.models.player import Player
async def test_bis_get(server: Any, party: Party, player: Player, player2: 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 typing import Any
from service.api.utils import make_json from ffxivbis.api.utils import make_json
from service.core.party import Party from ffxivbis.core.party import Party
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import Player from ffxivbis.models.player import Player
async def test_loot_get(server: Any, party: Party, player: Player, player2: Player, weapon: Piece) -> None: 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 typing import Any, List
from service.api.utils import make_json from ffxivbis.api.utils import make_json
from service.core.party import Party from ffxivbis.core.party import Party
from service.models.piece import Piece from ffxivbis.models.piece import Piece
from service.models.player import Player from ffxivbis.models.player import Player
async def test_players_get(server: Any, party: Party, player: Player) -> None: async def test_players_get(server: Any, party: Party, player: Player) -> None: