lukewaite / alfred-gitlab Goto Github PK
View Code? Open in Web Editor NEWA GitLab workflow for Alfred 3
License: Other
A GitLab workflow for Alfred 3
License: Other
Just a quick note: As of v1.4.0, setting the URL is not an optional step.
I assume you default to the gitlab.com endpoint, which is what I am using, but this fails to fetch the projects. And yes, I gave the background process plenty of time to run. It only needed to fetch 4 projects.
Manually setting the URL to https://gitlab.com
with or without the trailing slash also fails.
Setting the full path, "api_url": "https://gitlab.com/api/v4/projects"
, succeeds, returning the projects nearly instantly.
It seems like you already have the correct default ...
Line 34 in 82d36dc
However, the initial value of the api_url
key in settings.json
is an empty string. I wonder if this is preventing the default value from being used.
I should note that I completely uninstalled the workflow and reinstalled it. I then turned on logging before ever invoking the workflow. Through it all, there is no line containing the phrase Setting API URL
, as found here:
Line 40 in d818498
So I am fairly certain I never set the value to an empty string myself. I ended up setting the correct value directly in settings.json directly.
A URL sanity check might help. There is some great regex here: https://stackoverflow.com/a/7160778/338464
regex = re.compile(
r'^(?:http)s?://' # http:// or https://
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...
r'localhost|' #localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
Anyway, thanks for the excellent workflow and the work you have done on it.
glsetkey couldn't handle my token (with special characters, starting with a -
) until I put quotes around it. This could / should probably be solved inside the workflow.
After pressing enter for the first time, the alfred window closes instead of showing the next choices when quick_open
settings is set to false
like this:
(happens everytime on my side)
Make sure quick_open
is set to false
(open alfred settings, search for gitlab workflow, and click on the settings button:
Quit alfred (from the macos top menu bar)
Open alfred again
Write gl SomeExistingProject
Press enter
The alfred window closes and does nothing (bug)
Repeat from step 4 and it will show the choices correctly.
For now, I just set the feature back to true
so it opens the project directly.
An improvement on the UX could be to have the quick open available when holding a keyboard key such as Alt or CMD.
Doesn't seem to contain anything interesting for the issue tho
Starting debug for 'GitLab'
[2019-04-26 09:03:21][STDERR: input.scriptfilter] 09:03:21 workflow.py:2247 DEBUG ---------- GitLab (1.6.0) ----------
09:03:21 workflow.py:1657 DEBUG reading settings from /Users/gableroux/Library/Application Support/Alfred 3/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
09:03:21 workflow.py:2531 DEBUG update check not due
09:03:21 workflow.py:2650 DEBUG got password : com.lukewaite.alfred-gitlab:gitlab_api_key
09:03:21 workflow.py:1884 DEBUG loading cached data: /Users/gableroux/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/projects.cpickle
09:03:21 workflow.py:1884 DEBUG loading cached data: /Users/gableroux/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/__workflow_update_status.cpickle
09:03:21 workflow.py:2461 DEBUG update_data: {u'available': False}
09:03:21 workflow.py:2440 DEBUG set last run version: 1.6.0
09:03:21 workflow.py:2289 DEBUG ---------- finished in 0.069s ----------
[2019-04-26 09:03:22][STDERR: input.scriptfilter] 09:03:22 workflow.py:2247 DEBUG ---------- GitLab (1.6.0) ----------
09:03:22 workflow.py:1657 DEBUG reading settings from /Users/gableroux/Library/Application Support/Alfred 3/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
09:03:22 workflow.py:2531 DEBUG update check not due
09:03:22 workflow.py:2650 DEBUG got password : com.lukewaite.alfred-gitlab:gitlab_api_key
09:03:22 workflow.py:1884 DEBUG loading cached data: /Users/gableroux/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/projects.cpickle
09:03:22 workflow.py:1884 DEBUG loading cached data: /Users/gableroux/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/__workflow_update_status.cpickle
09:03:22 workflow.py:2461 DEBUG update_data: {u'available': False}
09:03:22 workflow.py:2440 DEBUG set last run version: 1.6.0
09:03:22 workflow.py:2289 DEBUG ---------- finished in 0.080s ----------
[2019-04-26 09:03:22][STDERR: input.scriptfilter] 09:03:22 workflow.py:2247 DEBUG ---------- GitLab (1.6.0) ----------
09:03:22 workflow.py:1657 DEBUG reading settings from /Users/gableroux/Library/Application Support/Alfred 3/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
09:03:22 workflow.py:2531 DEBUG update check not due
09:03:22 workflow.py:2650 DEBUG got password : com.lukewaite.alfred-gitlab:gitlab_api_key
09:03:22 workflow.py:1884 DEBUG loading cached data: /Users/gableroux/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/projects.cpickle
09:03:22 workflow.py:1884 DEBUG loading cached data: /Users/gableroux/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/__workflow_update_status.cpickle
09:03:22 workflow.py:2461 DEBUG update_data: {u'available': False}
09:03:22 workflow.py:2440 DEBUG set last run version: 1.6.0
09:03:22 workflow.py:2289 DEBUG ---------- finished in 0.067s ----------
Thanks for this awesome workflow... it's a massive time saver for me.
It would be nice, to jump directly to the issue board view of gitlab.
@lukewaite @meinjens @TribuneX
Hi,Guys。First of all thank you so much for your code and ideas. I made a second creation based on your code:
Now ,it is only on my computer。So, Whether I can keep Mit Licence, can I put it on GitHub too ?(My English is not very good)
MacOS 12.3 remove Python2.x, when i install Python 3, but it doesn't work, the error message:
-e:1: syntax error, unexpected tSTRING_BEG, expecting do or '{' or '(' python gitlab.py --seturl "
how to fix it? Thanks~
Hi,
Is there a way to get the remote Gitlab repositories refreshed so that the Alfred workflow can detect them?
For instance, I had renamed a remote repository, but the workflow couldn't recognize it, so I have to still use the old name.
It would be really useful to build a refresh
option to get the remote urls refreshed.
Thanks
The README states to create a personal access token, but doesn't mention which scopes are necessary
Currently this does workflow does not work with Alfred v4
Using api can retrieve projects which I want, but with workflow not.
How to force it to update local cache if local cache really exists?
I've created an access token and pointed the URL to <our gitlab server>/api/v4/projects
. Unfortunately I'm only seeing that there are no projects available. Here's the debug log:
Starting debug for 'GitLab'
[2017-11-10 09:19:04][STDERR: input.scriptfilter] 09:19:04 workflow.py:2247 DEBUG ---------- GitLab (1.2.1) ----------
09:19:04 workflow.py:1657 DEBUG reading settings from /Users/jamie/Library/Application Support/Alfred 3/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
09:19:04 workflow.py:2531 DEBUG update check not due
09:19:04 workflow.py:2650 DEBUG got password : com.lukewaite.alfred-gitlab:gitlab_api_key
09:19:04 workflow.py:1884 DEBUG loading cached data: /Users/jamie/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/__workflow_update_status.cpickle
09:19:04 workflow.py:2461 DEBUG update_data: {u'available': False}
09:19:04 background.py:188 DEBUG [update] command cached: /Users/jamie/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/update.argcache
09:19:04 background.py:192 DEBUG [update] passing job to background runner: [u'/usr/bin/python', '/Users/jamie/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.D4EAEE99-6561-4063-847F-E72A9A1A6AFC/workflow/background.pyc', 'update']
09:19:04 workflow.py:2247 DEBUG ---------- GitLab (1.2.1) ----------
09:19:04 background.py:197 DEBUG [update] background job started
09:19:04 workflow.py:2440 DEBUG set last run version: 1.2.1
09:19:04 workflow.py:2289 DEBUG ---------- finished in 0.122s ----------
I recently updated alfred-gitlab to version 3.0.0 following the instructions in the README. Unfortunately, it's still not working for me on macOS 12.3. Here are steps to reproduce:
glsetkey {key}
glseturl https://gitlab.com
I get the message "No projects found."
Here's the debug output from the previous command:
[13:01:05.677] GitLab[[Script Filter](alfredpreferences:workflows%3Eworkflow%3Euser.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF%3ECC12EF8B-97E2-4DA6-989E-6E766336576D)] Queuing argument 'terraform'
[13:01:06.005] GitLab[[Script Filter](alfredpreferences:workflows%3Eworkflow%3Euser.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF%3ECC12EF8B-97E2-4DA6-989E-6E766336576D)] Script with argv '(null)' finished
[13:01:06.006] STDERR: GitLab[[Script Filter](alfredpreferences:workflows%3Eworkflow%3Euser.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF%3ECC12EF8B-97E2-4DA6-989E-6E766336576D)] .
13:01:05 workflow.py:2093 DEBUG ---------- GitLab (3.0.0) ----------
13:01:05 workflow.py:1483 DEBUG reading settings from /Users/grantmcconnaughey/Library/Application Support/Alfred/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
13:01:05 workflow.py:2394 INFO checking for update ...
13:01:05 background.py:233 DEBUG [__workflow_update_check] command cached: /Users/grantmcconnaughey/Library/Caches/com.runningwithcrayons.Alfred/Workflow Data/com.lukewaite.alfred-gitlab/__workflow_update_check.argcache
13:01:05 background.py:237 DEBUG [__workflow_update_check] passing job to background runner: ['/Applications/Xcode.app/Contents/Developer/usr/bin/python3', '-m', 'workflow.background', '__workflow_update_check']
.
13:01:05 workflow.py:2093 DEBUG ---------- GitLab (3.0.0) ----------
13:01:05 background.py:243 DEBUG [__workflow_update_check] background job started
13:01:05 workflow.py:2517 DEBUG got password : com.lukewaite.alfred-gitlab:gitlab_api_key
13:01:05 background.py:233 DEBUG [update] command cached: /Users/grantmcconnaughey/Library/Caches/com.runningwithcrayons.Alfred/Workflow Data/com.lukewaite.alfred-gitlab/update.argcache
13:01:05 background.py:237 DEBUG [update] passing job to background runner: ['/Applications/Xcode.app/Contents/Developer/usr/bin/python3', '-m', 'workflow.background', 'update']
.
13:01:05 workflow.py:2093 DEBUG ---------- GitLab (3.0.0) ----------
13:01:05 background.py:243 DEBUG [update] background job started
13:01:05 workflow.py:2314 DEBUG set last run version: 3.0.0
13:01:05 workflow.py:2136 DEBUG ---------- finished in 0.242s ----------
[13:01:06.012] GitLab[[Script Filter](alfredpreferences:workflows%3Eworkflow%3Euser.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF%3ECC12EF8B-97E2-4DA6-989E-6E766336576D)] {
"items": [
{
"title": "No projects found",
"subtitle": "",
"valid": false,
"icon": {
"path": "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertCautionIcon.icns"
}
}
],
"rerun": 0.5
}
If I open the com.lukewaite.alfred-gitlab.log
log file then I do see there was a 400 response when calling GitLab's API:
13:01:06 update.py:12 INFO Calling API page 1
13:01:06 workflow.py:2114 ERROR HTTP response returned error code 400
Traceback (most recent call last):
File "/Path/To/Alfred.alfredpreferences/workflows/user.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF/workflow/workflow.py", line 2107, in run
func(self)
File "/Path/To/Alfred.alfredpreferences/workflows/user.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF/update.py", line 38, in main
projects = wf.cached_data('projects', fetch_gitlab_projects, max_age=3600)
File "/Path/To/Alfred.alfredpreferences/workflows/user.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF/workflow/workflow.py", line 1723, in cached_data
data = data_func()
File "/Path/To/Alfred.alfredpreferences/workflows/user.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF/update.py", line 36, in fetch_gitlab_projects
return get_projects(api_key, api_url)
File "/Path/To/Alfred.alfredpreferences/workflows/user.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF/update.py", line 8, in get_projects
return get_project_page(api_key, url, 1, [])
File "/Path/To/Alfred.alfredpreferences/workflows/user.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF/update.py", line 17, in get_project_page
response.raise_for_status()
File "/Path/To/Alfred.alfredpreferences/workflows/user.workflow.78188B4B-A351-4C3D-A3EE-1A1732DD54AF/mureq.py", line 186, in raise_for_status
raise HTTPErrorStatus(self.status_code)
mureq.HTTPErrorStatus: HTTP response returned error code 400
13:01:06 workflow.py:2136 DEBUG ---------- finished in 0.096s ----------
13:01:06 background.py:289 DEBUG [update] job complete
13:01:06 workflow.py:1483 DEBUG reading settings from ~/Library/Application Support/Alfred/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
13:01:06 workflow.py:2314 DEBUG set last run version: 3.0.0
13:01:06 workflow.py:2136 DEBUG ---------- finished in 0.233s ----------
Thanks for the plugin! It's a great time saver, what would also be cool is that if you type gl yourproject
and then you can select branches, merge-request, issue and it opens the corresponding pages of the project.
Using Python 3
[17:09:09.776] Logging Started...
[17:09:13.443] GitLab[Script Filter] Queuing argument ''
[17:09:13.986] GitLab[Script Filter] Script with argv '(null)' finished
[17:09:13.989] ERROR: GitLab[Script Filter] Code 1: Traceback (most recent call last):
File "/Users/azlekov/Library/Application Support/Alfred/Alfred.alfredpreferences/workflows/user.workflow.F068382A-1211-470D-8CBB-55029DDDF7E5/gitlab.py", line 4, in <module>
from workflow import Workflow3, ICON_WEB, ICON_WARNING, ICON_INFO, web, PasswordNotFound
File "/Users/azlekov/Library/Application Support/Alfred/Alfred.alfredpreferences/workflows/user.workflow.F068382A-1211-470D-8CBB-55029DDDF7E5/workflow/__init__.py", line 16, in <module>
from .workflow import Workflow, manager
File "/Users/azlekov/Library/Application Support/Alfred/Alfred.alfredpreferences/workflows/user.workflow.F068382A-1211-470D-8CBB-55029DDDF7E5/workflow/workflow.py", line 27, in <module>
import cPickle
ModuleNotFoundError: No module named 'cPickle'
I read past the part in the README where I was supposed to add this to the URL. Maybe the workflow could automatically detect if this is present and add it if not.
I added the URL correctly I think, and the access token (all scopes enabled) as well (adding quotes around it b/c it would crash otherwise), but I get a no-projects found. I am looking at the logs, but I can't really see what's happening.
[2018-04-25 07:15:43][STDERR: input.scriptfilter] 07:15:42 workflow.py:2247 DEBUG ---------- GitLab (1.4.0) ----------
07:15:42 workflow.py:1657 DEBUG reading settings from /Users/rap/Library/Application Support/Alfred 3/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
07:15:42 workflow.py:2531 DEBUG update check not due
07:15:42 workflow.py:2650 DEBUG got password : com.lukewaite.alfred-gitlab:gitlab_api_key
07:15:42 workflow.py:1884 DEBUG loading cached data: /Users/rap/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/__workflow_update_status.cpickle
07:15:42 workflow.py:2461 DEBUG update_data: {u'available': False}
07:15:42 background.py:188 DEBUG [update] command cached: /Users/rap/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/com.lukewaite.alfred-gitlab/update.argcache
07:15:42 background.py:192 DEBUG [update] passing job to background runner: [u'/usr/bin/python', '/Users/rap/Dropbox/apps-sync/alfred/Alfred.alfredpreferences/workflows/user.workflow.493FBFEB-5C36-4CFC-8595-F1E6FF888476/workflow/background.pyc', 'update']
07:15:43 workflow.py:2247 DEBUG ---------- GitLab (1.4.0) ----------
07:15:43 background.py:197 DEBUG [update] background job started
07:15:43 workflow.py:2440 DEBUG set last run version: 1.4.0
07:15:43 workflow.py:2289 DEBUG ---------- finished in 0.132s ----------
If the API returns error codes, maybe those could be shown to the user.
I noticed that adding the URL shows an Alfred error, though the log statements don't really tell my what's wrong:
[2018-04-25 07:29:04][ERROR: action.script] 07:29:04 workflow.py:2247 DEBUG ---------- GitLab (1.4.0) ----------
07:29:04 workflow.py:1657 DEBUG reading settings from /Users/rap/Library/Application Support/Alfred 3/Workflow Data/com.lukewaite.alfred-gitlab/settings.json
07:29:04 workflow.py:2531 DEBUG update check not due
07:29:04 gitlab.py:40 INFO Setting API URL to https://gitlab.yourcompanyhere.com/api/v4/projects
07:29:04 workflow.py:2440 DEBUG set last run version: 1.4.0
07:29:04 workflow.py:2289 DEBUG ---------- finished in 0.004s ----------
[2018-04-25 07:29:04][action.script] Processing output of 'output.notification' with arg ''
I even edited the code now to paste our URL into the script instead of the default one and I still don't get any projects.
Just a suggestion as per title
I just wanted to say, you did excellent work on this, and thanks for creating it.
That is all.
Thank for you work! It's useful for me.
I noticed that it uses environment variable to disable the sub page navigation, in order to open the repo url directly.but most of us need the sub page and quick open a repo. so I think there is a way to do that:
After seleting a repo,
enter
to open the url directlyctrl
+ enter
to open the sub pageenjoy it!
and I am happy to open a pr to implement it.
Fresh install this workflow and got this in the logs after adding the token and trying to use it.
Any idea ? (already tried to update openssl)
macos 10.12
Python 2.7.16
'OpenSSL 1.0.2s 28 May 2019'
13:26:33 workflow.py:2526 INFO checking for update ...
13:26:33 update.py:312 INFO retrieving releases: lukewaite/alfred-gitlab
13:26:33 background.py:242 ERROR [__workflow_update_check] command failed with status 1
13:26:33 update.py:13 INFO Calling API page 1
13:26:33 workflow.py:2266 ERROR <urlopen error [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)>
Traceback (most recent call last):
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/workflow/workflow.py", line 2259, in run
func(self)
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/update.py", line 41, in main
projects = wf.cached_data('projects', wrapper, max_age=3600)
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/workflow/workflow.py", line 1890, in cached_data
data = data_func()
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/update.py", line 39, in wrapper
return get_projects(api_key, api_url)
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/update.py", line 10, in get_projects
return get_project_page(api_key, url, 1, [])
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/update.py", line 15, in get_project_page
r = web.get(url, params)
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/workflow/web.py", line 583, in get
stream=stream)
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/workflow/web.py", line 571, in request
return Response(req, stream)
File "/Users/alex/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.AAD72EA7-A4A2-4B7A-911C-528938620683/workflow/web.py", line 214, in __init__
self.raw = urllib2.urlopen(request)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)>```
Hi!
For some reason the gitlab-workflow is unable to fetch my gitlab projects. The interesting thing here is that when I run the update.py script, the request is returning a 308 permanent redirect, which seems to cause the failing project fetching.
12:09:02 update.py:13 INFO Calling API page 1
12:09:03 workflow.py:2266 ERROR HTTP Error 308: Permanent Redirect
Traceback (most recent call last):
File "/Users/reinier/Google Drive/Software/Mac/Backups/Alfred.alfredpreferences/workflows/user.workflow.B62CD0D1-7304-495B-A388-C0982BFE63FA/workflow/workflow.py", line 2259, in run
func(self)
File "update.py", line 41, in main
projects = wf.cached_data('projects', wrapper, max_age=3600)
File "/Users/reinier/Google Drive/Software/Mac/Backups/Alfred.alfredpreferences/workflows/user.workflow.B62CD0D1-7304-495B-A388-C0982BFE63FA/workflow/workflow.py", line 1890, in cached_data
data = data_func()
File "update.py", line 39, in wrapper
return get_projects(api_key, api_url)
File "update.py", line 10, in get_projects
return get_project_page(api_key, url, 1, [])
File "update.py", line 19, in get_project_page
r.raise_for_status()
File "/Users/reinier/Google Drive/Software/Mac/Backups/Alfred.alfredpreferences/workflows/user.workflow.B62CD0D1-7304-495B-A388-C0982BFE63FA/workflow/web.py", line 405, in raise_for_status
raise self.error
HTTPError: HTTP Error 308: Permanent Redirect
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.