Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Action: Add test #119

Merged
merged 1 commit into from
Dec 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 42 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,50 @@ jobs:
- name: "Run tests"
run: pytest -vvv

test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: "Install dependencies"
run: |
pip install -r requirements.txt
sudo apt update && sudo apt install -y docker-compose

- name: "Checkout JellyPlex-Watched-CI"
uses: actions/checkout@v2
with:
repository: luigi311/JellyPlex-Watched-CI
path: JellyPlex-Watched-CI

- name: "Start containers"
run: |
export PGID=$(id -g)
export PUID=$(id -u)

sudo chown -R $PUID:$PGID JellyPlex-Watched-CI

docker-compose -f JellyPlex-Watched-CI/plex/docker-compose.yml up -d
docker-compose -f JellyPlex-Watched-CI/jellyfin/docker-compose.yml up -d
# Wait for containers to start
sleep 15
docker-compose -f JellyPlex-Watched-CI/plex/docker-compose.yml logs
docker-compose -f JellyPlex-Watched-CI/jellyfin/docker-compose.yml logs

- name: "Run tests"
run: |
# Move test/.env to root
mv test/ci.env .env
# Run script
python main.py

cat mark.log

docker:
runs-on: ubuntu-latest
needs: pytest
needs:
- pytest
- test
env:
DEFAULT_VARIANT: alpine
strategy:
Expand Down
10 changes: 7 additions & 3 deletions src/jellyfin.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,16 +100,20 @@ async def query(self, query, query_type, session=None, identifiers=None):
return await self.query(query, query_type, session, identifiers)

results = None

authorization = (
"MediaBrowser , "
'Client="other", '
'Device="script", '
'DeviceId="script", '
'Version="0.0.0"'
)
headers = {"Accept": "application/json", "X-Emby-Token": self.token, "X-Emby-Authorization": authorization}

headers = {
"Accept": "application/json",
"X-Emby-Token": self.token,
"X-Emby-Authorization": authorization,
}

if query_type == "get":
async with session.get(
self.baseurl + query, headers=headers
Expand Down
45 changes: 28 additions & 17 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,21 @@ def generate_server_connections():
)

for i, url in enumerate(plex_baseurl):
server = Plex(
baseurl=url.strip(),
token=plex_token[i].strip(),
username=None,
password=None,
servername=None,
ssl_bypass=ssl_bypass,
)

logger(f"Plex Server {i} info: {server.info()}", 3)

servers.append(
(
"plex",
Plex(
baseurl=url.strip(),
token=plex_token[i].strip(),
username=None,
password=None,
servername=None,
ssl_bypass=ssl_bypass,
),
server,
)
)

Expand All @@ -110,17 +114,20 @@ def generate_server_connections():
)

for i, username in enumerate(plex_username):
server = Plex(
baseurl=None,
token=None,
username=username.strip(),
password=plex_password[i].strip(),
servername=plex_servername[i].strip(),
ssl_bypass=ssl_bypass,
)

logger(f"Plex Server {i} info: {server.info()}", 3)
servers.append(
(
"plex",
Plex(
baseurl=None,
token=None,
username=username.strip(),
password=plex_password[i].strip(),
servername=plex_servername[i].strip(),
ssl_bypass=ssl_bypass,
),
server,
)
)

Expand All @@ -140,10 +147,14 @@ def generate_server_connections():
baseurl = baseurl.strip()
if baseurl[-1] == "/":
baseurl = baseurl[:-1]

server = Jellyfin(baseurl=baseurl, token=jellyfin_token[i].strip())

logger(f"Jellyfin Server {i} info: {server.info()}", 3)
servers.append(
(
"jellyfin",
Jellyfin(baseurl=baseurl, token=jellyfin_token[i].strip()),
server,
)
)

Expand Down
86 changes: 86 additions & 0 deletions test/ci.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Global Settings

## Do not mark any shows/movies as played and instead just output to log if they would of been marked.
DRYRUN = "False"

## Additional logging information
DEBUG = "True"

## Debugging level, "info" is default, "debug" is more verbose
DEBUG_LEVEL = "debug"

## If set to true then the script will only run once and then exit
RUN_ONLY_ONCE = "True"

## How often to run the script in seconds
SLEEP_DURATION = 10

## Log file where all output will be written to
LOG_FILE = "log.log"

## Mark file where all shows/movies that have been marked as played will be written to
MARK_FILE = "mark.log"

## Timeout for requests for jellyfin
REQUEST_TIMEOUT = 300

## Max threads for processing
MAX_THREADS = 2

## Map usernames between servers in the event that they are different, order does not matter
## Comma seperated for multiple options
USER_MAPPING = {"JellyUser":"jellyplex_watched"}

## Map libraries between servers in the even that they are different, order does not matter
## Comma seperated for multiple options
LIBRARY_MAPPING = { "Shows": "TV Shows" }


## Blacklisting/Whitelisting libraries, library types such as Movies/TV Shows, and users. Mappings apply so if the mapping for the user or library exist then both will be excluded.
## Comma seperated for multiple options
#BLACKLIST_LIBRARY = ""
#WHITELIST_LIBRARY = "Movies"
#BLACKLIST_LIBRARY_TYPE = "Series"
#WHITELIST_LIBRARY_TYPE = "Movies, movie"
#BLACKLIST_USERS = ""
WHITELIST_USERS = "jellyplex_watched"



# Plex

## Recommended to use token as it is faster to connect as it is direct to the server instead of going through the plex servers
## URL of the plex server, use hostname or IP address if the hostname is not resolving correctly
## Comma seperated list for multiple servers
PLEX_BASEURL = "https://localhost:32400"

## Plex token https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/
## Comma seperated list for multiple servers
PLEX_TOKEN = "mVaCzSyd78uoWkCBzZ_Y"

## If not using plex token then use username and password of the server admin along with the servername
## Comma seperated for multiple options
#PLEX_USERNAME = "PlexUser, PlexUser2"
#PLEX_PASSWORD = "SuperSecret, SuperSecret2"
#PLEX_SERVERNAME = "Plex Server1, Plex Server2"

## Skip hostname validation for ssl certificates.
## Set to True if running into ssl certificate errors
SSL_BYPASS = "True"

## control the direction of syncing. e.g. SYNC_FROM_PLEX_TO_JELLYFIN set to true will cause the updates from plex
## to be updated in jellyfin. SYNC_FROM_PLEX_TO_PLEX set to true will sync updates between multiple plex servers
SYNC_FROM_PLEX_TO_JELLYFIN = "True"
SYNC_FROM_JELLYFIN_TO_PLEX = "True"
SYNC_FROM_PLEX_TO_PLEX = "True"
SYNC_FROM_JELLYFIN_TO_JELLYFIN = "True"

# Jellyfin

## Jellyfin server URL, use hostname or IP address if the hostname is not resolving correctly
## Comma seperated list for multiple servers
JELLYFIN_BASEURL = "http://localhost:8096"

## Jellyfin api token, created manually by logging in to the jellyfin server admin dashboard and creating an api key
## Comma seperated list for multiple servers
JELLYFIN_TOKEN = "d773c4db3ecc4b028fc0904d9694804c"
Loading