redshodan / unsonic Goto Github PK
View Code? Open in Web Editor NEWUnsonic, the un-Subsonic music server.
License: GNU General Public License v2.0
Unsonic, the un-Subsonic music server.
License: GNU General Public License v2.0
I'm sure I can come up with uses... But for now, backlog the place holder
Make it work.
Add support for multiple languages. Yes, I know this should be done sooner than later, but..
Have Unsonic front for other music services, like Google Music. Expose the gmusic library as part of the unsonic library for unsonic clients to use.
https://unofficial-google-music-api.readthedocs.io/en/latest/
2019-03-31 10:39:11,731 ERROR [unsonic][waitress] Error talking to LastFM: Invalid session key - Please re-authenticate
For everything to just work. :)
It did not.
make MUSIC_DIR=/music docker-postgres
see comment below
General outline:
Doc stuff:
Have a startup password to (de)-encrypt the secrets in the database, like credentials for lastfm. Ask for the password on startup, keep decrypted data in memory only.
unsonic.nicfit.net | 2017-05-04 01:02:36,794 INFO [unsonic.views.rest.scrobble][waitress] Scrobbling Oh
unsonic.nicfit.net | 2017-05-04 01:02:37,394 INFO [wsgi][waitress] 74.220.34.132 - - [04/May/2017:01:02:37 +0000] "GET /rest/stream.view?u=nicfit&s=h6km5imj47943sg2392qm8aap5&t=81d52df812f89b1cfceac5cfade91790&v=1.2.0&c=DSub&id=tr-12788&maxBitRate=196 HTTP/1.1" 200 6371328 "-" "DSub"
PostgreSQL-unsonic.nicfit.net | ERROR: duplicate key value violates unique constraint "pk_un_playcounts"
PostgreSQL-unsonic.nicfit.net | DETAIL: Key (track_id, user_id)=(12787, 2) already exists.
PostgreSQL-unsonic.nicfit.net | STATEMENT: INSERT INTO un_playcounts (track_id, user_id, count) VALUES (12787, 2, 1)
unsonic.nicfit.net | 2017-05-04 01:02:37,830 INFO [wsgi][waitress] 74.220.34.132 - - [04/May/2017:01:02:35 +0000] "GET /rest/scrobble.view?u=nicfit&s=h6km5imj47943sg2392qm8aap5&t=81d52df812f89b1cfceac5cfade91790&v=1.2.0&c=DSub&id=tr-12787&submission=false HTTP/1.1" 200 139 "-" "DSub"
unsonic.nicfit.net | 2017-05-04 01:02:39,556 INFO [wsgi][waitress] 74.220.34.132 - - [04/May/2017:01:02:39 +0000] "GET /rest/savePlayQueue.view?u=nicfit&s=h6km5imj47943sg2392qm8aap5&t=81d52df812f89b1cfceac5cfade91790&v=1.2.0&c=DSub&id=tr-12781&id=tr-12782&id=tr-12783&id=tr-12784&id=tr-12785&id=tr-12786&id=tr-12787&id=tr-12788&id=tr-12789&id=tr-12790&id=tr-32976¤t=tr-12788&position=0 HTTP/1.1" 200 139 "-" "DSub"
The 1.16 version added RadioStations. Looks like just 4 new endpoints were added.
The 1.15 API only adds two calls for music scanning. Implement those interfaces and scanning in the web server process in a different thread.
Hi, users are unable to run Unsonic due to dependency conflict with pastedeploy package. As shown in the following full dependency graph of Unsonic, Unsonic requires pastedeploy==1.5.2,while plaster-pastedeploy * requires pastedeploy>=2.0.
According to pip’s “first found wins” installation strategy, pastedeploy 1.5.2 is the actually installed version. However, pastedeploy 1.5.2 does not satisfy pastedeploy>=2.0.
unsonic - 0.1.3
| +- alembic(install version:0.9.7 version range:==0.9.7)
| | +- mako(install version:1.1.2 version range:*)
| | | +- MarkupSafe(install version:2.0.0a1 version range:>=0.9.2)
| | +- python-dateutil(install version:2.8.1 version range:*)
| | +- python-editor(install version:1.0.4 version range:>=0.3)
| | +- sqlalchemy(install version:1.2.2 version range:>=0.7.6)
| +- mishmash(install version:0.3b5 version range:==0.3b5)
| +- paste(install version:2.0.3 version range:==2.0.3)
| | +- six(install version:1.14.0 version range:>=1.4.0)
| +- pastedeploy(install version:1.5.2 version range:==1.5.2)
| +- psycopg2(install version:2.7.3.2 version range:==2.7.3.2)
| +- pyramid(install version:1.9.1 version range:==1.9.1)
| +- pyramid-debugtoolbar(install version:4.3 version range:==4.3)
| | +- pygments(install version:2.6.1 version range:*)
| | +- pyramid(install version:1.9.1 version range:>=1.4)
| | +- pyramid-mako(install version:1.1.0 version range:>=0.3.1)
| | | +- Mako(install version:1.1.2 version range:>=1.1.0)
| | | | +- MarkupSafe(install version:2.0.0a1 version range:>=0.9.2)
| | | +- pyramid(install version:1.9.1 version range:*)
| | +- repoze-lru(install version:0.7 version range:*)
| +- pyramid-tm(install version:2.2 version range:==2.2)
| | +- pyramid (install version:1.10.4 version range:>=1.5)
| | | +- hupper(install version:1.10.2 version range:>=1.5)
| | | +- plaster(install version:1.0 version range:*)
| | | | +- setuptools(install version:46.1.3 version range:*)
| | | +- plaster-pastedeploy(install version:0.7 version range:*)
| | | | +- pastedeploy(install version:2.1.0 version range:>=2.0)
| | | | +- plaster(install version:1.0 version range:>=0.5)
| | | +- setuptools(install version:46.1.3 version range:*)
| | | +- translationstring(install version:1.3 version range:>=0.4)
| | | +- venusian(install version:3.0.0 version range:>=1.0)
| | | +- webob(install version:1.8.6 version range:>=1.8.3)
| | | +- zope-deprecation(install version:4.4.0 version range:>=3.5.0)
| | | | +- setuptools(install version:46.1.3 version range:*)
| | | +- zope-interface(install version:5.1.0 version range:>=3.8.0)
| | +- transaction (install version:3.0.0 version range:>=2.0)
| | | +- zope.interface(install version:5.1.0 version range:*)
| +- recommonmark(install version:0.4.0 version range:==0.4.0)
| | +- commonmark(install version:0.5.4 version range:<=0.5.4)
| | +- docutils(install version:0.16 version range:>=0.11)
| +- sphinx(install version:1.6.6 version range:==1.6.6)
| +- sqlalchemy(install version:1.2.2 version range:==1.2.2)
| +- transaction(install version:2.1.2 version range:==2.1.2)
| | +- zope-interface(install version:5.1.0 version range:*)
| +- waitress(install version:1.1.0 version range:==1.1.0)
| +- xmltodict(install version:0.11.0 version range:==0.11.0)
| +- zope-sqlalchemy(install version:0.7.7 version range:==0.7.7)
| | +- setuptools(install version:46.1.3 version range:*)
| | +- sqlalchemy(install version:1.2.2 version range:>=0.5.1)
| | +- transaction(install version:2.1.2 version range:*)
| | | +- zope-interface(install version:5.1.0 version range:*)
| | +- zope-interface(install version:5.1.0 version range:>=3.6.0)
Thanks for your help.
Best,
Neolith
Add a page that says how to install jamstash or another web client that is shown when no web client is configured or is not found.
'''
unsonic.nicfit.net | 2019-05-22 07:38:11,019 DEBUG [txn.139753145244392][waitress] new transaction
unsonic.nicfit.net | Traceback (most recent call last):
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/unsonic/views/rest/init.py", line 80, in call
unsonic.nicfit.net | return self.handleReq(session)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/unsonic/views/rest/getrandomsongs.py", line 48, in handleReq
unsonic.nicfit.net | join(Album).filter(Album.release_date >= fy and
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 3054, in bool
unsonic.nicfit.net | raise TypeError("Boolean value of this clause is not defined")
unsonic.nicfit.net | TypeError: Boolean value of this clause is not defined
unsonic.nicfit.net | 2019-05-22 07:38:11,025 DEBUG [txn.139753145244392][waitress] abort
unsonic.nicfit.net | 2019-05-22 07:38:11,028 ERROR [waitress][waitress] Exception when serving /rest/getRandomSongs.view
unsonic.nicfit.net | Traceback (most recent call last):
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/tweens.py", line 13, in error_handler
unsonic.nicfit.net | response = request.invoke_exception_view(exc_info)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/view.py", line 769, in invoke_exception_view
unsonic.nicfit.net | raise HTTPNotFound
unsonic.nicfit.net | pyramid.httpexceptions.HTTPNotFound: The resource could not be found.
unsonic.nicfit.net |
unsonic.nicfit.net | During handling of the above exception, another exception occurred:
unsonic.nicfit.net |
unsonic.nicfit.net | Traceback (most recent call last):
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/waitress/channel.py", line 336, in service
unsonic.nicfit.net | task.service()
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/waitress/task.py", line 175, in service
unsonic.nicfit.net | self.execute()
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/waitress/task.py", line 452, in execute
unsonic.nicfit.net | app_iter = self.channel.server.application(env, start_response)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/paste/translogger.py", line 69, in call
unsonic.nicfit.net | return self.application(environ, replacement_start_response)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/router.py", line 270, in call
unsonic.nicfit.net | response = self.execution_policy(environ, self)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/router.py", line 279, in default_execution_policy
unsonic.nicfit.net | return request.invoke_exception_view(reraise=True)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/view.py", line 768, in invoke_exception_view
unsonic.nicfit.net | reraise(*exc_info)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/compat.py", line 179, in reraise
unsonic.nicfit.net | raise value
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/router.py", line 277, in default_execution_policy
unsonic.nicfit.net | return router.invoke_request(request)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/router.py", line 249, in invoke_request
unsonic.nicfit.net | response = handle_request(request)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid_tm/init.py", line 171, in tm_tween
unsonic.nicfit.net | reraise(*exc_info)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid_tm/compat.py", line 36, in reraise
unsonic.nicfit.net | raise value
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid_tm/init.py", line 136, in tm_tween
unsonic.nicfit.net | response = handler(request)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/tweens.py", line 43, in excview_tween
unsonic.nicfit.net | response = _error_handler(request, exc)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/tweens.py", line 17, in _error_handler
unsonic.nicfit.net | reraise(*exc_info)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/compat.py", line 179, in reraise
unsonic.nicfit.net | raise value
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/tweens.py", line 41, in excview_tween
unsonic.nicfit.net | response = handler(request)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/router.py", line 148, in handle_request
unsonic.nicfit.net | registry, request, context, context_iface, view_name
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/view.py", line 657, in _call_view
unsonic.nicfit.net | response = view_callable(context, request)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/viewderivers.py", line 325, in secured_view
unsonic.nicfit.net | return view(context, request)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/viewderivers.py", line 401, in viewresult_to_response
unsonic.nicfit.net | result = view(context, request)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/pyramid/viewderivers.py", line 130, in _class_view
unsonic.nicfit.net | response = inst()
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/unsonic/views/rest/init.py", line 80, in call
unsonic.nicfit.net | return self.handleReq(session)
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/unsonic/views/rest/getrandomsongs.py", line 48, in handleReq
unsonic.nicfit.net | join(Album).filter(Album.release_date >= fy and
unsonic.nicfit.net | File "/usr/local/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 3054, in bool
unsonic.nicfit.net | raise TypeError("Boolean value of this clause is not defined")
unsonic.nicfit.net | TypeError: Boolean value of this clause is not defined
unsonic.nicfit.net | 2019-05-22 07:38:11,033 DEBUG [txn.139753147366120][waitress] new transaction
'''
Traceback (most recent call last):
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
context)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
cursor.execute(statement, parameters)
psycopg2.IntegrityError: update or delete on table "un_users" violates foreign key constraint "fk_un_playcounts_user_id_un_users" on table "un_playcounts"
DETAIL: Key (id)=(2) is still referenced from table "un_playcounts".
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/unsonic/lib/python3.6/site-packages/mishmash/__main__.py", line 53, in main
retval = args.command_func(args, args.config) or 0
File "/unsonic/lib/python3.6/site-packages/mishmash/core.py", line 17, in run
retval = super().run(args)
File "/unsonic/lib/python3.6/site-packages/nicfit/command.py", line 55, in run
return self._run()
File "/unsonic/lib/python3.6/site-packages/unsonic/commands/deluser.py", line 22, in _run
res.delete()
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3188, in delete
delete_op.exec_()
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py", line 1179, in exec_
self._do_exec()
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py", line 1363, in _do_exec
mapper=self.mapper)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 1107, in execute
bind, close_with_result=True).execute(clause, params or {})
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 945, in execute
return meth(self, multiparams, params)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
compiled_sql, distilled_params
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
context)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1393, in _handle_dbapi_exception
exc_info
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
raise value.with_traceback(tb)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
context)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) update or delete on table "un_users" violates foreign key constraint "fk_un_playcounts_user_id_un_users" on table "un_playcounts"
DETAIL: Key (id)=(2) is still referenced from table "un_playcounts".
[SQL: 'DELETE FROM un_users WHERE un_users.name = %(name_1)s'] [parameters: {'name_1': 'nicfit'}]
Traceback (most recent call last):
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
context)
File "/unsonic/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
cursor.execute(statement, parameters)
psycopg2.IntegrityError: update or delete on table "un_users" violates foreign key constraint "fk_un_playcounts_user_id_un_users" on table "un_playcounts"
DETAIL: Key (id)=(2) is still referenced from table "un_playcounts".
oauth support will be great ...
└> unsonic --version
unsonic (0.1.2, protocol: 0.1, subsonic protocol: 1.15.0) mishmash (0.3b5)
└> unsonic config
2018-01-27 19:02:41,878 DEBUG [unsonic][MainThread] Application._main: Namespace(VALUE=None, app=<unsonic.__main__.Unsonic object at 0x7fb074cd9dd8>, applyLoggingOpts=<function applyLoggingOpts at 0x7fb074014ae8>, command='config', command_func=<bound method Command.run of <unsonic.commands.config.Config object at 0x7fb06a4846d8>>, config=<unsonic.config.HereConfig object at 0x7fb06a499898>, config_show_default=False, db_url=None, debug_pdb=False, list=False, log_files=[], log_levels=[], set=None)
2018-01-27 19:02:41,878 DEBUG [mishmash.database][MainThread] Checking for database 'sqlite:////home/travis/devel/unsonic/venv/development.sqlite'
2018-01-27 19:02:41,881 INFO [mishmash.database][MainThread] Creating database 'sqlite:////home/travis/devel/unsonic/venv/development.sqlite'
2018-01-27 19:02:41,882 ERROR [mishmash][MainThread] [Errno 2] No such file or directory: '/home/travis/devel/unsonic/venv/development.sqlite'
Traceback (most recent call last):
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/mishmash/__main__.py", line 49, in main
retval = args.command_func(args, args.config) or 0
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/mishmash/core.py", line 22, in run
self.db_conn) = database.init(self.config.db_url)
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/mishmash/database.py", line 41, in init
create_database(db_url, template="template0")
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/sqlalchemy_utils/functions/database.py", line 565, in create_database
open(database, 'w').close()
FileNotFoundError: [Errno 2] No such file or directory: '/home/travis/devel/unsonic/venv/development.sqlite'
General error:
Traceback (most recent call last):
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/mishmash/__main__.py", line 49, in main
retval = args.command_func(args, args.config) or 0
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/mishmash/core.py", line 22, in run
self.db_conn) = database.init(self.config.db_url)
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/mishmash/database.py", line 41, in init
create_database(db_url, template="template0")
File "/home/travis/.virtualenvs/unsonic-0.1.x/lib/python3.6/site-packages/sqlalchemy_utils/functions/database.py", line 565, in create_database
open(database, 'w').close()
FileNotFoundError: [Errno 2] No such file or directory: '/home/travis/devel/unsonic/venv/development.sqlite'
When coming online Dsub...
2018-03-26 22:02:17,505 INFO [wsgi][waitress] [email protected] [26/Mar/2018:22:02:17 -0600] "GET /rest/search2.view?u=nicfit&&v=1.2.0&c=DSub&query=artist%3A%22The+Freeze%22+AND+title%3A%22Bloodlights%22&artistCount=0&albumCount=0&songCount=1 HTTP/1.1" 200 174 "-" "DSub"
One per song played while offline.
With nicfit/MishMash#286, compare LastFM artist, album, tracks based on slugified versions of the names.
$ unsonic -c ... serve
Runs the Unsonic API server.
Fails with exception:
$ bin/unsonic -c docker/config.ini serve
2018-01-23 12:52:30,396 ERROR [mishmash][MainThread] 'Serve' object has no attribute 'config'
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mishmash/__main__.py", line 49, in main
retval = args.command_func(args, args.config) or 0
File "/Users/bschumac/src/repos/unsonic/unsonic/commands/serve.py", line 26, in run
super()._run(args)
File "/Users/bschumac/src/repos/unsonic/unsonic/commands/__init__.py", line 21, in _run
initAlembic(self.config.get("mishmash", "sqlalchemy.url"))
AttributeError: 'Serve' object has no attribute 'config'
General error:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mishmash/__main__.py", line 49, in main
retval = args.command_func(args, args.config) or 0
File "/Users/bschumac/src/repos/unsonic/unsonic/commands/serve.py", line 26, in run
super()._run(args)
File "/Users/bschumac/src/repos/unsonic/unsonic/commands/__init__.py", line 21, in _run
initAlembic(self.config.get("mishmash", "sqlalchemy.url"))
AttributeError: 'Serve' object has no attribute 'config'
2018-01-23 12:52:30,397 DEBUG [unsonic][MainThread] Application._atexit
This appears to be related to change ef3680a.
Start Unsonic with serve
.
The startup takes longer than I'd like. It's certainly mostly work around the DB, but do a profile to check if its not something stupid.
Click on artist in the library and dsub makes a request for artist bio info and shows an error dialog
"resource not found". The request:
unsonic.nicfit.net | 2017-03-28 01:31:17,388 INFO [wsgi][waitress] 192.168.1.114 - - [28/Mar/2017:01:31:17 +0000] "GET /rest/getArtistInfo2.view?u=nicfit&s=XXXXXXXXXXXXX&t=XXXXXXXXXXXXXX&v=1.2.0&c=DSub&id=ar-9&includeNotPresent=true HTTP/1.1" 404 77 "-" "DSub"
Mishmash issues required:
Error:
Missing a required parameter: Invalid ID
Make use of mishmash's sync monitor mode to watch for changes to the music directories and sync back up. Use a subprocess to run mishmash directly.
My commit was to fix this, it doesn't.
Although the files are included in the dist now.
Unsonic-sqlite | General error:
Unsonic-sqlite | Traceback (most recent call last):
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/mishmash/__main__.py", line 46, in main
Unsonic-sqlite | retval = args.command_func(args, args.config) or 0
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/mishmash/core.py", line 16, in run
Unsonic-sqlite | retval = super().run(args)
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/nicfit/command.py", line 49, in run
Unsonic-sqlite | return self._run()
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/unsonic/commands/sync.py", line 13, in newrun
Unsonic-sqlite | initAlembic()
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/unsonic/models.py", line 313, in initAlembic
Unsonic-sqlite | command.upgrade(alembic_cfg, "head")
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/alembic/command.py", line 254, in upgrade
Unsonic-sqlite | script.run_env()
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/alembic/script/base.py", line 416, in run_env
Unsonic-sqlite | util.load_python_file(self.dir, 'env.py')
Unsonic-sqlite | File "/unsonic/lib/python3.6/site-packages/alembic/util/pyfiles.py", line 99, in load_python_file
Unsonic-sqlite | raise ImportError("Can't find Python file %s" % path)
Unsonic-sqlite | ImportError: Can't find Python file /unsonic/lib/python3.6/site-packages/unsonic/alembic/env.py
Polish up and publish the docker images.
Looks like the query syntax is a lot more capable than raw substring matching. Examples:
i*
, in*
, int*
artist:"END TIMES" AND title:"Leviathan"
2018-11-30 19:47:43,483 DEBUG [txn.139913930069760][waitress] commit
2018-11-30 19:47:43,483 INFO [wsgi][waitress] [email protected] [30/Nov/2018:19:47:43 -0600] "GET /rest/search3.view?u=nicfit&s=j7566d7aqn5kdaqts13v2o2o6v&t=369acc6b20d2ff2e237ae5b7472ce5c8&v=1.2.0&c=DSub&query=and+y*&artistCount=5&albumCount=10&songCount=10 HTTP/1.1" 200 174 "-" "DSub"
2018-11-30 19:47:44,142 DEBUG [txn.139913921677056][waitress] new transaction
2018-11-30 19:47:44,178 INFO [unsonic][waitress] Response(search3.view): <?xml version="1.0" encoding="UTF-8"?><subsonic-response status="ok" unsonic="0.1" version="1.16.0" xmlns="http://subsonic.org/restapi"><searchResult3 /></subsonic-response>
First run through it mostly works, manual run.
The unsonic the config, web, and models modules do bad things to the configuration. Between the needs of Pyramid, the test framework and mishmash, that code has gotten very ugly. It needs to be fixed up into a single interface that works for everything.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.