| commit 34: | 9d48898ae48b |
| parent 33: | dadb98c613bf |
| branch: | default |
initial pastebin support, hpaste.
- View xmonader's profile
-
xmonader's public repos »
- pyprayertime
- pygtkhelpers-main
- happytweet
- pyqplayer
- pyprayertime-db
- donbili
- mintNanny2
- netspeed-striky
- CSISOMounter
- pygoogleweather
- pytasker
- rfsindexer
- pygravatar
- happy-python-twitter
- pytextutils
- gfiler
- djapps
- gsum
- helloed
- gladizer
- simpleboard
- pida-xmon-main
- pybloomfilter
- pynetpbmparsers
- happypypackager
- pybasekit
- pynexodyne
- happymapper
- libmagicbindings
- prayertime
- pypcre
- shorturl
- Send message
6 months ago
Changed (Δ5.5 KB):
raw changeset »
helloed6/src/widgets.py (192 lines added, 0 lines removed)
Up to file-list helloed6/src/widgets.py:
| … | … | @@ -422,6 +422,188 @@ class LeftSidePane(gtk.Notebook): |
422 |
422 |
self.sourceviewer=SourceCodeTreeView() |
423 |
423 |
scrolled.add(self.sourceviewer) |
424 |
424 |
self.append_page(scrolled, gtk.Label("SourceViewer")) |
425 |
||
426 |
||
427 |
||
428 |
class Paste(object): |
|
429 |
def __init__(self, author="", title="", code="", lang=""): |
|
430 |
self.author=author |
|
431 |
self.title=title |
|
432 |
self.lang=lang |
|
433 |
self.code=code |
|
434 |
||
435 |
class HPaste(object): |
|
436 |
PASTE_URL="http://hpaste.org/fastcgi/hpaste.fcgi/save" |
|
437 |
||
438 |
@staticmethod |
|
439 |
def create_data_dict(title, name, content, syntax): |
|
440 |
return dict( |
|
441 |
content=content, |
|
442 |
author=name, |
|
443 |
title=title, |
|
444 |
save='save', |
|
445 |
language=syntax, |
|
446 |
channel='none', |
|
447 |
) |
|
448 |
||
449 |
@staticmethod |
|
450 |
def create_data_from_paste(paste): |
|
451 |
return dict( |
|
452 |
content=paste.code, |
|
453 |
author=paste.author, |
|
454 |
title=paste.title, |
|
455 |
save='save', |
|
456 |
language=paste.lang, |
|
457 |
channel='none', |
|
458 |
) |
|
459 |
||
460 |
@classmethod |
|
461 |
def get_syntax_items(cls): |
|
462 |
return [ |
|
463 |
("apacheconf","ApacheConf"), |
|
464 |
("BBCode", "bbcode"), |
|
465 |
("Bash", "bash"), |
|
466 |
("C", "c"), |
|
467 |
("C#", "csharp"), |
|
468 |
("C++", "cpp"), |
|
469 |
("CSS", "css"), |
|
470 |
("Clojure", "clojure"), |
|
471 |
("Common Lisp", "common-lisp"), |
|
472 |
("D", "d"), |
|
473 |
("HTML", "html"), |
|
474 |
("Haskell", "haskell"), |
|
475 |
("INI", "ini"), |
|
476 |
("Io", "io"), |
|
477 |
("Java", "java"), |
|
478 |
("JavaScript", "js"), |
|
479 |
("Lighttpd configuration file", "lighty"), |
|
480 |
("Lua", "lua"), |
|
481 |
("Makefile", "make"), |
|
482 |
("Objective-C", "objective-c"), |
|
483 |
("PHP", "php"), |
|
484 |
("Perl", "perl"), |
|
485 |
("Python", "python"), |
|
486 |
("Python 3", "python3"), |
|
487 |
("Python 3.0 Traceback", "py3tb"), |
|
488 |
("Python Traceback", "pytb"), |
|
489 |
("Python console session", "pycon"), |
|
490 |
("Raw token data","raw"), |
|
491 |
("Ruby", "rb"), |
|
492 |
("SQL", "sql"), |
|
493 |
("Scala", "scala"), |
|
494 |
("Text only", "text"), |
|
495 |
("VimL", "vim"), |
|
496 |
("XML", "xml"), |
|
497 |
("YAML", "yaml"), |
|
498 |
("reStructuredText", "rst"), |
|
499 |
("sqlite3con", "sqlite3"), |
|
500 |
] |
|
501 |
||
502 |
||
503 |
from urllib import urlencode |
|
504 |
from urllib2 import urlopen, Request |
|
505 |
def fetch_url(url, data={}, auth=None): |
|
506 |
""" |
|
507 |
fetch a URL. |
|
508 |
||
509 |
It takes these arguments: |
|
510 |
||
511 |
``url``: the url to fetch |
|
512 |
``data`` (optional): Additional POST data |
|
513 |
``auth`` (optional): A tuple in the format (username, password) that's |
|
514 |
used for http authentication |
|
515 |
||
516 |
""" |
|
517 |
req = Request(url) |
|
518 |
||
519 |
if auth: |
|
520 |
base64string = base64.encodestring('%s:%s' % auth)[:-1] |
|
521 |
req.add_header("Authorization", "Basic %s" % base64string) |
|
522 |
||
523 |
if data: |
|
524 |
urlargs = (req, urlencode(data)) |
|
525 |
else: |
|
526 |
urlargs = (req,) |
|
527 |
||
528 |
def _fetcher(): |
|
529 |
try: |
|
530 |
f = urlopen(*urlargs) |
|
531 |
content = f.read() |
|
532 |
url = f.url |
|
533 |
except Exception, e: |
|
534 |
content = str(e) |
|
535 |
url = None |
|
536 |
return url, content |
|
537 |
return _fetcher() |
|
538 |
||
539 |
class Paster(object): |
|
540 |
||
541 |
def __init__(self): |
|
542 |
self.pastedlinks=[] |
|
543 |
||
544 |
def supported_services(self): |
|
545 |
return ("HPaste") |
|
546 |
||
547 |
def paste(self, paste): |
|
548 |
d=HPaste.create_data_from_paste(paste) |
|
549 |
link=fetch_url(HPaste.PASTE_URL, d)[0] |
|
550 |
self.pastedlinks.append(link) |
|
551 |
return link |
|
552 |
#print "pasted..: ", link |
|
553 |
||
554 |
||
555 |
class PasterWidget(gtk.VBox): |
|
556 |
||
557 |
def __init__(self, *args): |
|
558 |
super(PasterWidget, self).__init__(*args) |
|
559 |
self._init_comps() |
|
560 |
self.paster=Paster() |
|
561 |
||
562 |
def _init_comps(self): |
|
563 |
self.tbl=gtk.Table(6, 2) |
|
564 |
self.tbl.set_row_spacings(10) |
|
565 |
self.tbl.set_col_spacings(4) |
|
566 |
self.tbl.attach(gtk.Label("Author: "),0, 1, 0, 1) |
|
567 |
self.authorentry=gtk.Entry() |
|
568 |
self.tbl.attach(self.authorentry, 1, 2, 0, 1) |
|
569 |
||
570 |
self.tbl.attach(gtk.Label("Title: "), 0, 1, 1, 2) |
|
571 |
self.titleentry=gtk.Entry() |
|
572 |
self.tbl.attach(self.titleentry, 1, 2, 1, 2) |
|
573 |
||
574 |
self.tbl.attach(gtk.Label("Code: "),0, 1, 2, 3) |
|
575 |
self.txtview=gtk.TextView() |
|
576 |
scrolled=gtk.ScrolledWindow() |
|
577 |
scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) |
|
578 |
scrolled.add(self.txtview) |
|
579 |
self.tbl.attach(scrolled, 1, 2, 2, 3) |
|
580 |
||
581 |
self.tbl.attach(gtk.Label("Language: "), 0, 1, 3, 4) |
|
582 |
self.langentry=gtk.Entry() |
|
583 |
self.tbl.attach(self.langentry, 1, 2, 3, 4) |
|
584 |
||
585 |
self.tbl.attach(gtk.Label("Link: "), 0, 1, 4, 5) |
|
586 |
self.linkentry=gtk.Entry() |
|
587 |
self.tbl.attach(self.linkentry, 1, 2, 4, 5) |
|
588 |
||
589 |
self.btn_paste=gtk.Button("Paste!") |
|
590 |
self.btn_paste.connect("clicked", self._on_paste) |
|
591 |
self.tbl.attach(self.btn_paste, 1, 2, 5, 6) |
|
592 |
||
593 |
self.add(self.tbl) |
|
594 |
||
595 |
def _on_paste(self, widget): |
|
596 |
author=self.authorentry.get_text() |
|
597 |
title=self.titleentry.get_text() |
|
598 |
buf=self.txtview.get_buffer() |
|
599 |
code=buf.get_text(buf.get_start_iter(), buf.get_end_iter()) |
|
600 |
lang=self.langentry.get_text() |
|
601 |
||
602 |
paste=Paste(author=author, title=title, code=code, lang=lang) |
|
603 |
link=self.paster.paste(paste) |
|
604 |
if link: |
|
605 |
self.linkentry.set_text(link) |
|
606 |
||
425 |
607 |
|
426 |
608 |
class TabWidget(gtk.Notebook): |
427 |
609 |
|
| … | … | @@ -431,6 +613,7 @@ class TabWidget(gtk.Notebook): |
431 |
613 |
self.add_terminal() |
432 |
614 |
self.add_python_console() |
433 |
615 |
self.add_scribble() |
616 |
self.add_paster() |
|
434 |
617 |
|
435 |
618 |
def add_terminal(self): |
436 |
619 |
self.gterminal=GeditTerminal() |
| … | … | @@ -447,6 +630,15 @@ class TabWidget(gtk.Notebook): |
447 |
630 |
self.scribble_scrolled_window.add(self.scribble_tv) |
448 |
631 |
self.append_page(self.scribble_scrolled_window, gtk.Label("Scribble")) |
449 |
632 |
|
633 |
||
634 |
def add_paster(self): |
|
635 |
#FIXME |
|
636 |
scrolled=gtk.ScrolledWindow() |
|
637 |
scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) |
|
638 |
self.paster=PasterWidget() |
|
639 |
scrolled.add(self.paster) |
|
640 |
self.append_page(scrolled, gtk.Label("Paster")) |
|
641 |
||
450 |
642 |
#def add_simple_label(self): |
451 |
643 |
#self.append_page(gtk.Label("Hi"), gtk.Label("simple label")) |
452 |
644 |
