Esempio n. 1
0
def main(arguments):
    """Process the arguments and fetch data according to them"""
    arguments = vars(arguments)
    current_time = utils.get_current_timestamp()
    wikidata_site = utils.create_site_instance("wikidata", "wikidata")
    existing_areas = get_wd_items_using_prop("P3613")
    area_data = load_nature_area_file(arguments["dataset"])
    data_files = load_mapping_files()
    if arguments["offset"]:
        print("Using offset: {}.".format(str(arguments["offset"])))
        area_data = area_data[arguments["offset"]:]
    if arguments["limit"]:
        print("Using limit: {}.".format(str(arguments["limit"])))
        area_data = area_data[:arguments["limit"]]
    for area in area_data:
        reserve = NatureArea(area, wikidata_site, data_files, existing_areas)
        if arguments["table"]:
            filename = "{}_{}.txt".format(arguments["dataset"], current_time)
            preview = PreviewTable(reserve)
            utils.append_line_to_file(preview.make_table(), filename)
        if arguments["upload"]:
            live = True if arguments["upload"] == "live" else False
            if arguments["dataset"] == "nr":
                edit_summary = edit_summary_reserves
            elif arguments["dataset"] == "np":
                edit_summary = edit_summary_nationalparks
            uploader = Uploader(reserve,
                                repo=wikidata_site,
                                live=live,
                                edit_summary=edit_summary)
            uploader.upload()
Esempio n. 2
0
def main(arguments):
    arguments = vars(arguments)
    wikidata_site = utils.create_site_instance("wikidata", "wikidata")
    existing_people = get_wd_items_using_prop("P4357")
    auth_data = load_auth_file()
    data_files = load_mapping_files()
    if arguments["offset"]:
        print("Using offset: {}.".format(str(arguments["offset"])))
        auth_data = auth_data[arguments["offset"]:]
    if arguments["limit"]:
        print("Using limit: {}.".format(str(arguments["limit"])))
        auth_data = auth_data[:arguments["limit"]]
    for p in auth_data:
        p_data = p[list(p.keys())[0]]
        person = Person(p_data, wikidata_site, data_files, existing_people)
        if arguments["upload"]:
            live = True if arguments["upload"] == "live" else False
            uploader = Uploader(
                person,
                repo=wikidata_site,
                live=live,
                edit_summary="importing #Musikverket authority file")
            try:
                uploader.upload()
            except pywikibot.data.api.APIError:
                continue
Esempio n. 3
0
def upload():
    """Render and upload eml.xml, and create entry in registry table."""

    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))

    # Create eml.xml
    eml = render_eml(request)

    # Upload to NDB datastore
    uploader = Uploader()
    uploader.upload_eml(eml)

    # Create CartoDB registry record
    success = uploader.cartodb_meta(request.form)
    if success == False:
        return render_template('metadata.html')

    # Store datum
    session.pop('geodeticDatum', None)
    session['geodeticDatum'] = request.form[
        'datum'] if 'datum' in request.form and request.form[
            'datum'] != "" else "WGS84"

    # Create occurrence.txt
    #    uploader.build_occurrence()
    # TODO: Implement build_dwca and move to Cloud Storage with googleapis

    session['from'] = 'upload'
    return render_template('upload_cartodb.html')
Esempio n. 4
0
 def upload(self):
     try:
         login = self.lineEdit_3.text()
         password = self.lineEdit_4.text()
         group_id = abs(int(self.lineEdit.text()))
         path_to_folder = self.lineEdit_2.text()
         QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
         uploader = Uploader(login, password, group_id, path_to_folder)
         self.progressBar = QtWidgets.QProgressBar(self.gridLayoutWidget)
         self.progressBar.setEnabled(True)
         self.progressBar.setValue(0)
         self.progressBar.setTextVisible(True)
         self.progressBar.setObjectName("progressBar")
         self.gridLayout.addWidget(self.progressBar, 10, 0, 1, 1)
         self.pushButton.setEnabled(False)
         self.pushButton_2.setEnabled(False)
         self.update()
         for i, j in uploader.upload_album():
             self.progressBar.setValue(int(i / j * 100))
             QApplication.processEvents()
     except Exception as e:
         errMsgBox = QErrorMessage()
         errMsgBox.showMessage(repr(e))
         errMsgBox.exec_()
     finally:
         self.progressBar.setParent(None)
         self.pushButton.setEnabled(True)
         self.pushButton_2.setEnabled(True)
         QApplication.restoreOverrideCursor()
Esempio n. 5
0
def headers_selector():
    """Basic file-level assessment and proper redirection."""

    # Generate and store new UUID for file

    file_uuid = str(uuid.uuid4())
    session.pop('file_uuid', None)
    session['file_uuid'] = file_uuid

    # Get file
    up_file = request.files['file']
    if not up_file:
        flash("Please, provide a file to upload")
        return redirect(url_for("main"))

    # Parse and upload file to NDB, key in session['raw_key']
    uploader = Uploader()
    uploader.parse_file(up_file)
    if uploader.any_error is True:
        return redirect(url_for('main'))

    # Redirect to proper handler
    session['from'] = 'headers_selector'
    if "useTemplate" in request.form:
        return redirect(url_for('with_template'))
    else:
        return redirect(url_for('without_template'))
Esempio n. 6
0
def metadata():
    """Store extra fields, if any, and prepare and upload meta.xml."""

    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))

    # Parse metafields if coming from there
    if session['from'] == 'metafields':
        session['extra_fields'] = {}

        for i in request.form.keys():
            if i != 'submitBtn' and not i.endswith("_dwc"):
                term_dict = {
                    "description": request.form[i],
                    "term": request.form["%s_dwc" % i]
                }
                session['extra_fields'][i] = term_dict

    # Create meta.xml
    meta = render_meta()

    # Upload to NDB datastore
    uploader = Uploader()
    uploader.upload_meta(meta)

    # Render metadata template
    session['from'] = 'metadata'
    return render_template('metadata.html')
Esempio n. 7
0
def headers_selector():
    """Basic file-level assessment and proper redirection."""
    
    # Generate and store new UUID for file

    file_uuid = str(uuid.uuid4())
    session.pop('file_uuid', None)
    session['file_uuid'] = file_uuid

    # Get file
    up_file = request.files['file']
    if not up_file:
        flash("Please, provide a file to upload")
        return redirect(url_for("main"))
    
    # Parse and upload file to NDB, key in session['raw_key']
    uploader = Uploader()
    uploader.parse_file(up_file)
    if uploader.any_error is True:
        return redirect(url_for('main'))
    
    # Redirect to proper handler
    session['from'] = 'headers_selector'
    if "useTemplate" in request.form:
        return redirect(url_for('with_template'))
    else:
        return redirect(url_for('without_template'))
Esempio n. 8
0
def metadata():
    """Store extra fields, if any, and prepare and upload meta.xml."""
    
    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))
    
    # Parse metafields if coming from there
    if session['from'] == 'metafields':
        session['extra_fields'] = {}

        for i in request.form.keys():
            if i != 'submitBtn' and not i.endswith("_dwc"):
                term_dict = {"description": request.form[i], "term": request.form["%s_dwc" % i]}
                session['extra_fields'][i] = term_dict
    
    # Create meta.xml
    meta = render_meta()
    
    # Upload to NDB datastore
    uploader = Uploader()
    uploader.upload_meta(meta)
    
    # Render metadata template
    session['from'] = 'metadata'
    return render_template('metadata.html')
Esempio n. 9
0
def main(arguments):
    """Process the arguments and fetch data according to them."""
    arguments = vars(arguments)
    filenames = generate_filenames("Bosnia", utils.get_current_timestamp())
    repo = utils.create_site_instance("wikidata", "wikidata")
    source_data = load_source_data(arguments["datadir"])
    data_files = load_mapping_files()
    mapping = data_files["_static"]["ba_(bs)"]
    existing = get_wd_items_using_prop(
        data_files["_static"]["ba_(bs)"]["unique"]["property"])
    if arguments["offset"]:
        print("Using offset: {}.".format(str(arguments["offset"])))
        source_data = source_data[arguments["offset"]:]
    if arguments["short"]:
        print("Using limit: {}.".format(str(arguments["short"])))
        source_data = source_data[:arguments["short"]]
    for row in source_data:
        monument = BosniaMonument(row, mapping, data_files, existing, repo)
        if arguments["table"]:
            raw_data = "<pre>" + str(row) + "</pre>\n"
            monument_table = monument.print_wd_to_table()
            utils.append_line_to_file(raw_data, filenames['examples'])
            utils.append_line_to_file(monument_table, filenames['examples'])
        if arguments["upload"]:
            live = True if arguments["upload"] == "live" else False
            uploader = Uploader(monument, repo=repo, live=live, tablename="ba")
            uploader.upload()
Esempio n. 10
0
def upload():
    """Render and upload eml.xml, and create entry in registry table."""
    
    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))
    
    # Create eml.xml
    eml = render_eml(request)
    
    # Upload to NDB datastore
    uploader = Uploader()
    uploader.upload_eml(eml)
    
    # Create CartoDB registry record
    success = uploader.cartodb_meta(request.form)
    if success == False:
        return render_template('metadata.html')
    
    # Store datum
    session.pop('geodeticDatum', None)
    session['geodeticDatum'] = request.form['datum'] if 'datum' in request.form and request.form['datum'] != "" else "WGS84"
    
    # Create occurrence.txt
#    uploader.build_occurrence()
    # TODO: Implement build_dwca and move to Cloud Storage with googleapis    

    session['from'] = 'upload'
    return render_template('upload_cartodb.html')
Esempio n. 11
0
def main():

    args = parseArguments()
    fileManager = FileManager(args=args)
    demoPathAttributes = fileManager.getAttributes()
    uploader = Uploader(demoPathAttributes)
    uploader.upload()
Esempio n. 12
0
    def proc(self, config: dict, record_dir: str, danmu_path: str,
             current_state, state_change_time) -> None:
        p = Processor(config, record_dir, danmu_path)
        p.run()

        if config.get('spec', {}).get('uploader', {}).get('record', {}).get(
                'upload_record', False) or config.get('spec', {}).get(
                    'uploader', {}).get('clips', {}).get(
                        'upload_clips', False):
            current_state.value = int(utils.state.UPLOADING_TO_BILIBILI)
            state_change_time.value = time.time()
            try:
                u = Uploader(p.outputs_dir, p.splits_dir, config)
                d = u.upload(p.global_start)
            except Exception as e:
                current_state.value = int(utils.state.ERROR)
                state_change_time.value = time.time()

            if d is None:
                current_state.value = int(utils.state.ERROR)
                state_change_time.value = time.time()
            else:
                if not config.get('spec', {}).get('uploader', {}).get(
                        'record',
                    {}).get('keep_record_after_upload', True) and d.get(
                        "record",
                        None) is not None and not config.get('root', {}).get(
                            'uploader', {}).get('upload_by_edit', False):
                    rc = BiliVideoChecker(d['record']['bvid'], p.splits_dir,
                                          config)
                    rc.start()
                if not config.get('spec', {}).get('uploader', {}).get(
                        'clips',
                    {}).get('keep_clips_after_upload', True) and d.get(
                        "clips",
                        None) is not None and not config.get('root', {}).get(
                            'uploader', {}).get('upload_by_edit', False):
                    cc = BiliVideoChecker(d['clips']['bvid'], p.outputs_dir,
                                          config)
                    cc.start()

        if config.get('root', {}).get('enable_baiduyun', False) and config.get(
                'spec', {}).get('backup', False):
            current_state.value = int(utils.state.UPLOADING_TO_BAIDUYUN)
            state_change_time.value = time.time()
            try:
                from bypy import ByPy
                bp = ByPy()
                bp.upload(p.merged_file_path)
            except Exception as e:
                logging.error('Error when uploading to Baiduyun:' + str(e) +
                              traceback.format_exc())
                current_state.value = int(utils.state.ERROR)
                state_change_time.value = time.time()
                return

        if current_state.value != int(utils.state.LIVE_STARTED):
            current_state.value = int(utils.state.WAITING_FOR_LIVE_START)
            state_change_time.value = time.time()
Esempio n. 13
0
    def __init__(self, pathToMain):
        self.pathToSketchbook = ""
        # Get path on mac
        if platform.system() == "Darwin":
            # logging.debug('self.pathToMain');
            # logging.debug(self.pathToMain);
            # logging.debug('PWD=');
            # logging.debug(os.environ.get('PWD'));
            # logging.debug('PYTHONPATH=');
            # logging.debug(os.environ.get('PYTHONPATH'));
            # logging.debug('ENVIRON=');
            # logging.debug(os.environ);
            if os.environ.get("PYTHONPATH") != None:
                self.pathToMain = os.environ.get("PYTHONPATH")
            else:
                self.pathToMain = pathToMain
        elif platform.system() == "Windows" or platform.system() == "Linux":
            self.pathToMain = pathToMain

        if platform.system() == "Linux":
            self.pathToSketchbook = expanduser("~").decode("latin1") + "/Arduino"
        elif platform.system() == "Darwin":
            self.pathToSketchbook = base.sys_path.get_document_path() + "/Arduino"
        elif platform.system() == "Windows":
            self.pathToSketchbook = (
                os.path.dirname(os.path.dirname(os.path.dirname(base.sys_path.get_tmp_path()))) + "/Documents/Arduino"
            )

        self.pathToArduinoDir = pathToMain + "/res/arduino/"
        self.uploader = Uploader(pathToMain)
        self.compiler = Compiler(pathToMain)
        self.boardSettings = defaultdict(BoardConfig)
        self.parseBoardSettings(self.pathToMain + "/res/boards.txt")
        self.board = "uno"
        self.port = None
Esempio n. 14
0
    def startUpload(self):
        argsdict = self.getUploadArgs()
        if not self.checkUploadArgs(argsdict):
            return

        self.uploader = Uploader()
        self.connect(self.uploader.qobj, QtCore.SIGNAL(const.finish_sig),
                     self.onUploadFinish)
        self.uploader.resetUploadArgs(argsdict)

        self.ui.textEdit.clear()
        self.ui.textEdit.append("Start uploading\n")
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.onUploading)
        self.uploader.start()
        self.timer.start(const.process_interval)
Esempio n. 15
0
	def __init__(self, pathToMain):
		#Get path on mac
		if platform.system() == 'Darwin':
			# logging.debug('self.pathToMain');
			# logging.debug(self.pathToMain);
			# logging.debug('PWD=');
			# logging.debug(os.environ.get('PWD'));
			#logging.debug('PYTHONPATH=');
			#logging.debug(os.environ.get('PYTHONPATH'));
			# logging.debug('ENVIRON=');
			# logging.debug(os.environ);
			if os.environ.get('PYTHONPATH') != None:
				self.pathToMain = os.environ.get('PYTHONPATH')
			else:
				self.pathToMain = pathToMain
		elif platform.system() == 'Windows' or platform.system() == 'Linux':
			self.pathToMain = pathToMain

		if platform.system() == 'Linux':
			self.pathToSketchbook = expanduser("~").decode('latin1')+'/Arduino'
		elif platform.system() == 'Windows' or platform.system() == 'Darwin':
			self.pathToSketchbook = expanduser("~").decode('latin1')+'/Documents/Arduino'

		self.pathToSketchbook = self.pathToSketchbook.decode('latin1')

		self.pathToArduinoDir = pathToMain+'/res/arduino/'
		self.uploader = Uploader(pathToMain)
		self.compiler = Compiler(pathToMain)
		self.boardSettings = defaultdict(BoardConfig)
		self.parseBoardSettings(self.pathToMain+"/res/boards.txt")
		self.board = 'uno'
		self.port = None
Esempio n. 16
0
def main(arguments):
    """Get arguments and process data."""
    libris_files = list_available_files(arguments.get("dir"),
                                        arguments.get("limit"),
                                        arguments.get("uri"))
    filenames = make_filenames(utils.get_current_timestamp())

    wikidata_site = utils.create_site_instance("wikidata", "wikidata")
    data_files = load_mapping_files()
    existing_people = utils.get_wd_items_using_prop(
        data_files["properties"]["libris_uri"])
    problem_reports = []

    for fname in libris_files:
        data = utils.load_json(fname)
        cache = load_caches(["surname", "first_name"])
        if is_person(data):
            person = Person(data,
                            wikidata_site,
                            data_files,
                            existing_people,
                            cache)
            dump_caches(person.get_caches())
            problem_report = person.get_report()
            if arguments.get("upload"):
                live = True if arguments["upload"] == "live" else False
                uploader = Uploader(person, repo=wikidata_site,
                                    live=live, edit_summary=EDIT_SUMMARY)
                if "Q" in problem_report and problem_report["Q"] == "":
                    """
                    If the Person didn't have an associated Qid,
                    this means the Uploader has now created a new Item
                    for it -- insert that id into the problem report.
                    """
                    problem_report["Q"] = uploader.wd_item_q
                try:
                    uploader.upload()
                except pywikibot.data.api.APIError as e:
                    print(e)

            if problem_report:
                problem_reports.append(problem_report)
                utils.json_to_file(
                    filenames['reports'], problem_reports, silent=True)
    if problem_reports:
        print("SAVED PROBLEM REPORTS TO {}".format(filenames['reports']))
Esempio n. 17
0
	def __init__(self, pathToMain):
		self.pathToMain = pathToMain
		self.pathToSketchbook = expanduser("~")+'/sketchbook'
		self.pathToArduinoDir = pathToMain+'/res/arduino/'
		self.uploader = Uploader(pathToMain)
		self.compiler = Compiler(pathToMain)
		self.boardSettings = defaultdict(BoardConfig)
		self.parseBoardSettings(self.pathToMain+"/res/boards.txt")
		self.board = 'uno'
		self.port = None
Esempio n. 18
0
def parse():
    """Check the consistency of the uploaded file."""
    
    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))
    
    parser = Parser()
    uploader = Uploader()
    f = uploader.open_file(session['file_uuid'])
    parser.parse_content(f)
    
    if len(parser.errors) == 0:
        target = 'metafields'
    else:
        session.pop('errors', None)
        session['errors'] = parser.errors
        flash('ERROR: We found some problems when parsing your file. <a href="#" data-toggle="modal" data-target="#parsingModal">Click here</a> to get a detailed review.')
        target = 'main'
    return redirect(url_for(target))
Esempio n. 19
0
def proc(config: dict, record_dir: str, danmu_path: str) -> None:
    p = Processor(config, record_dir, danmu_path)
    p.run()
    u = Uploader(p.outputs_dir, p.splits_dir, config)
    d = u.upload(p.global_start)
    if not config['spec']['uploader']['record'][
            'keep_record_after_upload'] and d.get("record", None) is not None:
        rc = BiliVideoChecker(d['record']['bvid'], p.splits_dir, config)
        rc_process = Process(target=rc.check)
        rc_process.start()
    if not config['spec']['uploader']['clips'][
            'keep_clips_after_upload'] and d.get("clips", None) is not None:
        cc = BiliVideoChecker(d['clips']['bvid'], p.outputs_dir, config)
        cc_process = Process(target=cc.check)
        cc_process.start()
    if config['root']['enable_baiduyun'] and config['spec']['backup']:
        from bypy import ByPy
        bp = ByPy()
        bp.upload(p.merged_file_path)
Esempio n. 20
0
def render_recipe_to_ebook(self, recipe_dict):
    self.update_state(state='PROGRESS',
                      meta={
                          'type': 'update',
                          'message': 'Starting conversion to ebook'
                      })
    ebook_generator = EbookGenerator(recipe_dict)
    self.update_state(state='PROGRESS',
                      meta={
                          'type': 'update',
                          'message': 'Creating folders'
                      })
    ebook_generator.setup()

    self.update_state(state='PROGRESS',
                      meta={
                          'type': 'update',
                          'message': 'Generating ebook'
                      })
    file_path = ebook_generator.generate_mobi()
    self.update_state(state='PROGRESS',
                      meta={
                          'type': 'update',
                          'message': 'Uploading'
                      })

    uploader = Uploader()
    response = uploader.upload(file_path)

    self.update_state(state='PROGRESS',
                      meta={
                          'type': 'update',
                          'message': 'Cleaning up'
                      })
    ebook_generator.cleanup()

    return {
        'type': 'update',
        'message': 'Ebook converted and uploaded',
        'url': response["url"]
    }
Esempio n. 21
0
def parse():
    """Check the consistency of the uploaded file."""

    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))

    parser = Parser()
    uploader = Uploader()
    f = uploader.open_file(session['file_uuid'])
    parser.parse_content(f)

    if len(parser.errors) == 0:
        target = 'metafields'
    else:
        session.pop('errors', None)
        session['errors'] = parser.errors
        flash(
            'ERROR: We found some problems when parsing your file. <a href="#" data-toggle="modal" data-target="#parsingModal">Click here</a> to get a detailed review.'
        )
        target = 'main'
    return redirect(url_for(target))
Esempio n. 22
0
def main(arguments):
    wikidata_site = utils.create_site_instance("wikidata", "wikidata")
    data_files = load_mapping_files()
    cache = {}
    existing_editions = utils.get_wd_items_using_prop(
        data_files["properties"]["libris_uri"])
    if arguments.get("uri"):
        mode = "uri"
        data = get_from_uri(arguments.get("uri"))
        edition = Edition(data, wikidata_site, data_files, existing_editions,
                          cache, mode)
        problem_report = edition.get_report()
        if arguments.get("upload"):
            live = True if arguments["upload"] == "live" else False
            uploader = Uploader(edition,
                                repo=wikidata_site,
                                live=live,
                                edit_summary=EDIT_SUMMARY)
            if "Q" in problem_report and problem_report["Q"] == "":
                problem_report["Q"] = uploader.wd_item_q
            try:
                uploader.upload()
            except pywikibot.data.api.APIError as e:
                print(e)
    elif arguments.get("dir") and arguments.get("libris_list"):
        mode = "local"
        available_files = list_available_files(arguments.get("dir"))
        libris_list = get_lines_from_file(arguments["libris_list"])
        for fname in available_files:
            data = utils.load_json(fname)
            selibr = get_libris_id(data)
            if selibr and selibr in libris_list:
                edition = Edition(data, wikidata_site, data_files,
                                  existing_editions, cache, mode)
                problem_report = edition.get_report()
                if arguments.get("upload"):
                    live = True if arguments["upload"] == "live" else False
                    uploader = Uploader(edition,
                                        repo=wikidata_site,
                                        live=live,
                                        edit_summary=EDIT_SUMMARY)
                    if "Q" in problem_report and problem_report["Q"] == "":
                        problem_report["Q"] = uploader.wd_item_q
                    try:
                        uploader.upload()
                    except pywikibot.data.api.APIError as e:
                        print(e)
Esempio n. 23
0
 def startUpload(self):
     argsdict = self.getUploadArgs()
     if not self.checkUploadArgs(argsdict):
         return
         
     self.uploader = Uploader()
     self.connect(self.uploader.qobj, QtCore.SIGNAL(const.finish_sig), self.onUploadFinish)
     self.uploader.resetUploadArgs(argsdict)
     
     self.ui.textEdit.clear()
     self.ui.textEdit.append("Start uploading\n")
     self.timer = QtCore.QTimer()
     self.timer.timeout.connect(self.onUploading)
     self.uploader.start()
     self.timer.start(const.process_interval)
Esempio n. 24
0
def upload_cartodb():
    """Parse records and upload to point table."""

    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))

    uploader = Uploader()

    # Prepare the file for CartoDB
    uploader.cartodb_points()

    # Delete everything NDB datastore
    #uploader.delete_entity('raw_key')
    uploader.delete_entity('meta_key')
    uploader.delete_entity('eml_key')
    #uploader.delete_entity('occurrence_key')

    # Go back to main page
    return redirect(url_for('records', datasetid=session['file_uuid']))
Esempio n. 25
0
def upload_cartodb():
    """Parse records and upload to point table."""
    
    if 'file_uuid' not in session.keys():
        return redirect(url_for('main'))
    
    uploader = Uploader()
    
    # Prepare the file for CartoDB
    uploader.cartodb_points()
    
    # Delete everything NDB datastore
    #uploader.delete_entity('raw_key')
    uploader.delete_entity('meta_key')
    uploader.delete_entity('eml_key')
    #uploader.delete_entity('occurrence_key')
    
    # Go back to main page
    return redirect(url_for('records', datasetid=session['file_uuid']))
Esempio n. 26
0
 def makeUploader(self):
    self.uploader = Uploader()
    self.uploader.setConfig(self.conf)
    self.uploader.setConnector(self.connect)
    self.uploader.setAccess(self.username, self.password)
    self.uploader.setWindow(self)
Esempio n. 27
0
class ArduinoCompilerUploader:

	def __init__(self, pathToMain):
		#Get path on mac
		if platform.system() == 'Darwin':
			# logging.debug('self.pathToMain');
			# logging.debug(self.pathToMain);
			# logging.debug('PWD=');
			# logging.debug(os.environ.get('PWD'));
			#logging.debug('PYTHONPATH=');
			#logging.debug(os.environ.get('PYTHONPATH'));
			# logging.debug('ENVIRON=');
			# logging.debug(os.environ);
			if os.environ.get('PYTHONPATH') != None:
				self.pathToMain = os.environ.get('PYTHONPATH')
			else:
				self.pathToMain = pathToMain
		elif platform.system() == 'Windows' or platform.system() == 'Linux':
			self.pathToMain = pathToMain

		if platform.system() == 'Linux':
			self.pathToSketchbook = expanduser("~").decode('latin1')+'/Arduino'
		elif platform.system() == 'Windows' or platform.system() == 'Darwin':
			self.pathToSketchbook = expanduser("~").decode('latin1')+'/Documents/Arduino'

		self.pathToSketchbook = self.pathToSketchbook.decode('latin1')

		self.pathToArduinoDir = pathToMain+'/res/arduino/'
		self.uploader = Uploader(pathToMain)
		self.compiler = Compiler(pathToMain)
		self.boardSettings = defaultdict(BoardConfig)
		self.parseBoardSettings(self.pathToMain+"/res/boards.txt")
		self.board = 'uno'
		self.port = None

	def setBoard (self, board):
		self.board = board
		return self.searchPort()
	def setPort (self,port=''):
		self.port = port
	def getPort (self):
		return self.port
	def getBoard(self):
		return self.board

	def getBoardBaudRate(self):
		return self.boardSettings[self.board].getBaudRate()

	def getBoardMCU(self):
		return self.boardSettings[self.board].getMCU()

	def getBoardFCPU(self):
		return self.boardSettings[self.board].getFCPU()

	def parseBoardSettings (self, path):
		file=open(path,'r')
		#Split the file using the separator in boards.txt to separate the config of the different boards
		a = file.read().split('\n\n##############################################################\n\n');
		a.pop(0) #Remove first element which is only a url
		for line in a:
			boardName = line.split('.')[0]
			boardConfig = line.split('\n')
			boardConfig= [i.split('=')for i in boardConfig]
			boardConfig.pop(0) #Remove empty first element
			self.boardSettings[boardName]=BoardConfig(boardConfig)

	def getAvailablePorts (self):
		if platform.system() =='Windows':
			from serial.tools.list_ports import comports
			comPorts = list(comports())
			availablePorts = []
			for port in comPorts:
				if not 'Bluetooth' in port[1]: #discard bluetooth ports
					availablePorts.append(port[0])
		elif platform.system() =='Darwin':
			if self.board == 'uno':
				availablePorts = glob.glob('/dev/tty.usbmodem*')
			elif self.board == 'bt328':
				availablePorts = glob.glob('/dev/tty.usbserial-*')
			else:
				availablePorts = glob.glob('/dev/tty*')

		elif platform.system() =='Linux':
			if self.board == 'uno':
				availablePorts = glob.glob('/dev/ttyACM*')
			elif self.board == 'bt328':
				availablePorts = glob.glob('/dev/ttyUSB*')
			else:
				availablePorts = glob.glob('/dev/tty*')
		return availablePorts


	def searchPort (self):
		availablePorts = self.getAvailablePorts()
		if len(availablePorts) <=0:
			return []
		ports = []
		for port in availablePorts:
			args = "-P "+port+" -p "+ self.getBoardMCU() +" -b "+ self.getBoardBaudRate()+" -c arduino"
			output, err = callAvrdude(args);
			if 'Device signature =' in output or 'Device signature =' in err:
				ports.append(port)
		if len(ports)==1:
			self.setPort(ports[0])
		return ports



	def compile (self, code):
		return self.compiler.compile( code, self.getBoard() or 'uno', self.pathToArduinoDir, self.pathToSketchbook, self.getBoardMCU(), self.getBoardFCPU())

	def upload (self, code):
		compilationErrorReport = self.compile(code)
		if compilationErrorReport['status'] == 'OK':
			uploadErrorReport = self.uploader.upload(code, self.getPort(), self.getBoard(), self.getBoardMCU(), self.getBoardBaudRate(), self.pathToMain, self.pathToSketchbook)
			return uploadErrorReport
		else:
			return compilationErrorReport
Esempio n. 28
0
from Analyzer import Analyzer
from Cleaner import Cleaner
from Cluster import Cluster
from Crawler import Crawler
from Uploader import Uploader

this_date = time.strftime("%Y%m%d", time.localtime())
# 爬取新闻
crawler = Crawler(this_date=this_date)
crawler.crawl()

# 聚类
cluster = Cluster(date=this_date)
cluster.remove_useless_articles()
cluster.load_articles()
cluster.cluster()
cluster.upload_groups_to_DB()

# 情绪分析
analyzer = Analyzer(date=this_date)
analyzer.analyze()

# 上传至LeanCloud
uploader = Uploader(date=this_date)
uploader.upload_new_groups()

# 删除过老或分数过低的新闻组
cleaner = Cleaner(date=this_date)
cleaner.clean()
Esempio n. 29
0
class ArduloaderWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.portManager = PortManager(self.ui, startmonitor=True)
        self.configHelper = ConfigHelper(self.ui)
        self.initSignal()
        self.setupUi_Ex()

    def setupUi_Ex(self):
        self.setWindowTitle(const.windowtitle)
        self.ui.textEdit.append(const.aboutinfo)
        self.ui.headLabel.setPixmap(
            QPixmap(":/main/icons/main/arduloader.png"))
        self.setWindowIcon(QtGui.QIcon(":/main/icons/main/logo.png"))
        self.setBoards()

        self.configHelper.updateUiByConfig()

    def setBoards(self):
        ret, self.__boardsinfodict = BoardHelper.getBoardsInfo()
        if not ret:
            self.__boardsinfodict = {}
            return

        for boardname in self.__boardsinfodict.keys():
            self.ui.mcuCombox.addItem(boardname)

    def onUploadFinish(self, ret, text):
        self.timer.stop()
        try:
            res = ret == 0 and "Upload SUCCESS:)" or ("%s\nUpload FAILED:(" %
                                                      text)
        except IOError:
            res = "Read tmp file error"
        except:
            res = "Unknown error"

        self.ui.textEdit.append(res)

    def onUploading(self):
        prev_cursor = self.ui.textEdit.textCursor()
        self.ui.textEdit.moveCursor(QtGui.QTextCursor.End)
        self.ui.textEdit.insertPlainText(".")
        self.ui.textEdit.setTextCursor(prev_cursor)

    def getUploadArgs(self):
        infodict = self.__boardsinfodict.get(
            tostr(self.ui.mcuCombox.currentText()))
        if not infodict:
            return

        mcu = infodict["mcu"]
        speed = infodict["speed"]
        protocol = infodict["protocol"]
        maximum_size = infodict["maximum_size"]
        comport = tostr(self.ui.portCombox.currentText())
        flash_bin = togbk(self.ui.hexfileCombox.currentText())

        return {
            "mcu": mcu,
            "speed": speed,
            "protocol": protocol,
            "maximum_size": maximum_size,
            "comport": comport,
            "flash_bin": flash_bin
        }

    def checkUploadArgs(self, argsdict):
        if not argsdict:
            self.ui.textEdit.append("Get chip data error")
            return False

        if not OSPath.exists(argsdict.get("flash_bin", "")):
            self.ui.textEdit.append("Hex file not exists")
            return False

        # TODO: 检查文件大小是否超多当前芯片允许的最大值
        return True

    def startUpload(self):
        argsdict = self.getUploadArgs()
        if not self.checkUploadArgs(argsdict):
            return

        self.uploader = Uploader()
        self.connect(self.uploader.qobj, QtCore.SIGNAL(const.finish_sig),
                     self.onUploadFinish)
        self.uploader.resetUploadArgs(argsdict)

        self.ui.textEdit.clear()
        self.ui.textEdit.append("Start uploading\n")
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.onUploading)
        self.uploader.start()
        self.timer.start(const.process_interval)

    def onOpenHexFile(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, "Choose a HEX file",
                                                     ".", "HEX (*.hex)")
        if filename == "":
            return
        index = self.ui.hexfileCombox.findText(filename)
        if index < 0:
            self.ui.hexfileCombox.insertItem(0, filename)
            index = 0
        self.ui.hexfileCombox.setCurrentIndex(index)

    def closeEvent(self, e):
        hex = tostr(self.ui.hexfileCombox.currentText())
        com = tostr(self.ui.portCombox.currentText())
        board = tostr(self.ui.mcuCombox.currentText())
        self.configHelper.updateConfig(hex, com, board)
        e.accept()

    def initSignal(self):
        self.ui.exitButton.clicked.connect(self.close)
        self.ui.uploadButton.clicked.connect(self.startUpload)
        self.ui.openHexButton.clicked.connect(self.onOpenHexFile)
Esempio n. 30
0
class ArduloaderWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self)
        
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.portManager = PortManager(self.ui, startmonitor=True)
        self.configHelper = ConfigHelper(self.ui)
        self.initSignal()
        self.setupUi_Ex()        
               
    def setupUi_Ex(self):
        self.setWindowTitle(const.windowtitle)
        self.ui.textEdit.append(const.aboutinfo)
        self.ui.headLabel.setPixmap(QPixmap(":/main/icons/main/arduloader.png"))
        self.setWindowIcon(QtGui.QIcon(":/main/icons/main/logo.png"))
        self.setBoards()
        
        self.configHelper.updateUiByConfig()
    
    def setBoards(self):
        ret, self.__boardsinfodict = BoardHelper.getBoardsInfo()
        if not ret:
            self.__boardsinfodict = {}
            return
            
        for boardname in self.__boardsinfodict.keys():
            self.ui.mcuCombox.addItem(boardname)

    def onUploadFinish(self, ret, text):
        self.timer.stop()
        try:
            res = ret == 0 and "Upload SUCCESS:)" or ("%s\nUpload FAILED:(" % text)
        except IOError:
            res = "Read tmp file error"
        except:
            res = "Unknown error"
            
        self.ui.textEdit.append(res)
    
    def onUploading(self):
        prev_cursor = self.ui.textEdit.textCursor()
        self.ui.textEdit.moveCursor(QtGui.QTextCursor.End)
        self.ui.textEdit.insertPlainText (".")
        self.ui.textEdit.setTextCursor(prev_cursor)
    
    def getUploadArgs(self):
        infodict = self.__boardsinfodict.get(tostr(self.ui.mcuCombox.currentText()))
        if not infodict:
            return
            
        mcu = infodict["mcu"]
        speed = infodict["speed"]
        protocol = infodict["protocol"]
        maximum_size = infodict["maximum_size"]
        comport = tostr(self.ui.portCombox.currentText())
        flash_bin = togbk(self.ui.hexfileCombox.currentText())
        
        return {"mcu": mcu,
                "speed": speed,
                "protocol": protocol,
                "maximum_size": maximum_size,
                "comport": comport, 
                "flash_bin": flash_bin
                }
    
    def checkUploadArgs(self, argsdict):
        if not argsdict:
            self.ui.textEdit.append("Get chip data error")
            return False
            
        if not OSPath.exists(argsdict.get("flash_bin", "")):
            self.ui.textEdit.append("Hex file not exists")
            return False
            
        # TODO: 检查文件大小是否超多当前芯片允许的最大值
        return True
        
    def startUpload(self):
        argsdict = self.getUploadArgs()
        if not self.checkUploadArgs(argsdict):
            return
            
        self.uploader = Uploader()
        self.connect(self.uploader.qobj, QtCore.SIGNAL(const.finish_sig), self.onUploadFinish)
        self.uploader.resetUploadArgs(argsdict)
        
        self.ui.textEdit.clear()
        self.ui.textEdit.append("Start uploading\n")
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.onUploading)
        self.uploader.start()
        self.timer.start(const.process_interval)
    
    def onOpenHexFile(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, "Choose a HEX file", ".", "HEX (*.hex)")
        if filename == "":
            return
        index = self.ui.hexfileCombox.findText(filename)
        if index < 0:
            self.ui.hexfileCombox.insertItem(0, filename)
            index = 0
        self.ui.hexfileCombox.setCurrentIndex(index)
    
    def closeEvent(self, e):
        hex = tostr(self.ui.hexfileCombox.currentText())
        com = tostr(self.ui.portCombox.currentText())
        board = tostr(self.ui.mcuCombox.currentText())
        self.configHelper.updateConfig(hex, com, board)
        e.accept()
        
    def initSignal(self):
        self.ui.exitButton.clicked.connect(self.close)
        self.ui.uploadButton.clicked.connect(self.startUpload)
        self.ui.openHexButton.clicked.connect(self.onOpenHexFile)
Esempio n. 31
0
    print(e)

position = Position()
position.fix()

filename = BoatImage().click(position)

voltages = Voltages()
voltages = voltages.read_voltages()

gyro = Gyro()
x_angle = gyro.get_x_degrees()
temperature = gyro.get_temperature()

tide = Tide()
tide_height = tide.current_height()

uploader = Uploader(bucket_name)

uploader.download_json()

disk_usage = Disk.current_usage()

state = State(position, voltages, filename, x_angle, temperature, tide_height,
              disk_usage)
state.save()

uploader.upload_json()
if filename is not None:
    uploader.upload_image(filename)
Esempio n. 32
0
from flask import Flask, render_template, Response, request, flash

from Camera import Camera
from Database import Database
from Face import Face
from Uploader import Uploader

app = Flask(__name__)
app.secret_key = "aaaaaaa"
UPLOAD_FOLDER = "."
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

db = Database()
face = Face(db)
cam = Camera(0, face)
uploader = Uploader(app, UPLOAD_FOLDER)


@app.route("/")
def index():
    return render_template("index.html")


@app.route("/video_feed")
def video_feed():
    return Response(cam.stream(scale=0.3),
                    mimetype="multipart/x-mixed-replace; boundary=frame")


@app.route("/register", methods=["GET", "POST"])
def register():
Esempio n. 33
0
class Mytago ( wxFrame ):

   def __init__ ( self ):
      wxFrame.__init__ ( self, None, -1, 'MYTAGO Uploader', size = ( 600, 445 ), 
          style = wx.DEFAULT_FRAME_STYLE ^ ( wx.MAXIMIZE_BOX | wx.RESIZE_BORDER  ) )
      self.SetBackgroundColour("WHITE")

      self.TESTING = False
      self.username = ''
      self.password = ''

      wx.lib.colourdb.updateColourDB()

      _icon = wx.IconFromBitmap(getAppIcon())
      self.SetIcon(_icon)

      self.panel = wxPanel ( self, -1, size=(580, 50) )
      self.panel.SetBackgroundColour('WHITE')

      self.addbutton = wxButton ( self.panel, -1, "+" )
      self.Bind(wx.EVT_BUTTON, self.OnAddButton, self.addbutton)
      self.addbutton.SetForegroundColour('CHARTREUSE2')
      self.addbutton.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False))
      self.addbutton.SetMaxSize((30,30))
      self.addbutton.SetMinSize((30,30))
      self.addbutton.SetToolTipString("Add Images")

      self.delbutton = wxButton ( self.panel, -1, "-" )
      self.Bind(wx.EVT_BUTTON, self.OnDelButton, self.delbutton)
      self.delbutton.Enable(False)
      self.delbutton.SetForegroundColour('ORANGE1')
      self.delbutton.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False))
      self.delbutton.SetMaxSize((30,30))
      self.delbutton.SetMinSize((30,30))
      self.delbutton.SetToolTipString("Remove Selected Images")

      self.progpanel = wxPanel(self, -1, size=(565, 10) )
      self.progpanel.SetBackgroundColour('GREY70')
      self.progress = wx.Gauge(self.progpanel, -1, 50, size =(565, 10))
      self.progress.Show(False)

      self.upbutton = wxButton ( self.panel, -1, "Upload" )
      self.Bind(wx.EVT_BUTTON, self.OnUpButton, self.upbutton)
      self.upbutton.Enable(False)
      self.upbutton.SetForegroundColour('GREY30')
      self.upbutton.SetFont(wx.Font(15, wx.SWISS, wx.NORMAL, wx.BOLD, False))
      self.upbutton.SetMaxSize((120,30))
      self.upbutton.SetMinSize((120,30))
      self.upbutton.SetToolTipString("Upload Images")


      self.helpbutton = wxButton ( self.panel, -1, "i" )
      self.Bind(wx.EVT_BUTTON, self.OnHelpButton, self.helpbutton)
      self.helpbutton.SetForegroundColour('DEEPSKYBLUE')
      self.helpbutton.SetFont(wx.Font(15, wx.SWISS, wx.NORMAL, wx.BOLD, False))
      self.helpbutton.SetMaxSize((30,30))
      self.helpbutton.SetMinSize((30,30))
      self.helpbutton.SetToolTipString("Help")

      self.imgpanel = scrolled.ScrolledPanel(self, -1, size=(560, 290),
                                 style = wx.TAB_TRAVERSAL|wx.NO_BORDER, name="imgpanel" )
      self.imgpanel.SetBackgroundColour("WHITE")

      logo = getAppLogo()
      if not self.TESTING:
         self.logoimg = wx.StaticBitmap(self.panel, -1, logo)

      self.scrollsizer = wx.FlexGridSizer(rows=1, cols=3,  vgap=10, hgap=10)
      self.imgpanel.SetSizer( self.scrollsizer )
      self.imgpanel.SetAutoLayout(1)
      self.imgpanel.SetupScrolling()

      self.footer = wxPanel ( self, -1, size=(580, 20) )
      self.footer.SetBackgroundColour("WHITE")

      self.message = wx.StaticText(self.footer, -1, "", size = (450, 10))
      font = wx.Font(8, wx.SWISS, wx.NORMAL,  wx.BOLD)
      self.message.SetFont(font)

      self.hyper1 = hl.HyperLinkCtrl(self.footer, wx.ID_ANY, "www.mytago.com",
                                        URL="http://www.mytago.com")
      self.hyper1.SetBold(True)
      self.hyper1.SetColours("STEELBLUE1", "STEELBLUE1", "STEELBLUE1")
      self.hyper1.SetUnderlines(False, False, False)
      self.hyper1.SetToolTip(wx.ToolTip("Mytago"))
      self.hyper1.UpdateLink()


      self.sizertop  = wxBoxSizer ( wxALIGN_CENTER_HORIZONTAL )
      self.sizerbot  = wxBoxSizer ( wxALIGN_CENTER_HORIZONTAL )
      self.sizermain = wxBoxSizer ( wx.VERTICAL )

      self.sizertop.Add ( (10, 40), 0, wx.EXPAND )
      if self.TESTING:
         self.sizertop.Add ( (230, 40), 0,  wx.ALIGN_TOP | wx.EXPAND )
      else:
         self.sizertop.Add ( self.logoimg, 0,  wx.ALIGN_TOP | wx.EXPAND )
      self.sizertop.Add ( (100, 40), 0, wx.EXPAND )
      self.sizertop.Add ( self.addbutton, 0 )
      self.sizertop.Add ( (5, 40), 0, wx.EXPAND )
      self.sizertop.Add ( self.delbutton, 0 )
      self.sizertop.Add ( (15, 40), 0, wx.EXPAND )
      self.sizertop.Add ( self.upbutton, 0)
      self.sizertop.Add ( (10, 40), 0, wx.EXPAND )
      self.sizertop.Add ( self.helpbutton, 0)

      self.sizerbot.Add ( (15, 10), 0, wx.EXPAND )
      self.sizerbot.Add ( self.message, 0,  wx.ALIGN_LEFT | wx.EXPAND )
      self.sizerbot.Add ( (10, 10), 0, wx.EXPAND )
      self.sizerbot.Add ( self.hyper1, 0,  wx.ALIGN_RIGHT | wx.EXPAND )
      self.sizerbot.Add ( (15, 10), 0, wx.EXPAND )

      self.sizermain.Add ((600, 10) )
      self.sizermain.Add ( self.panel, 0, wx.EXPAND | wx.FIXED_MINSIZE )
      self.sizermain.Add ((600, 10) )
      self.sizermain.Add ( self.progpanel, 0, wx.ALIGN_CENTER | wx.FIXED_MINSIZE )
      self.sizermain.Add ((600, 10) )
      self.sizermain.Add ( self.imgpanel, 0, wx.ALIGN_CENTER | wx.FIXED_MINSIZE )
      self.sizermain.Add ((600, 5) )
      self.sizermain.Add ( wx.StaticLine(self, -1, size=(565,-1)), 0, wx.TOP | wx.ALIGN_CENTER | wx.FIXED_MINSIZE )
      self.sizermain.Add ((600, 5) )
      self.sizermain.Add ( self.footer, 0, wx.EXPAND | wx.FIXED_MINSIZE )
      self.sizermain.Add ((600, 5) )


      self.panel.SetSizer ( self.sizertop )
      self.footer.SetSizer ( self.sizerbot )
      self.SetSizer(self.sizermain)
      self.Show ( True )

      self.maskimg  =  getMask() 

      self.lastsel = None 
      self.lastdesel = None 
      self.shifted = False 

      self.delimglist = []
      self.pathlist = []
      self.upimglist = []

      self.upcount = 0
      self.lastupcount = -1 
      self.uploading = False 
      self.cancelnow = False 

      # Catch all shift key presses 

      self.panel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown, self.panel)
      self.panel.Bind(wx.EVT_KEY_UP, self.OnKeyUp, self.panel)

      self.imgpanel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown, self.imgpanel)
      self.imgpanel.Bind(wx.EVT_KEY_UP, self.OnKeyUp, self.imgpanel)

      self.footer.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown, self.footer)
      self.footer.Bind(wx.EVT_KEY_UP, self.OnKeyUp, self.footer)


   def initConfig(self):
      self.conf = Config()
      if self.TESTING:
         self.conf.setAPI('http://localhost/api')
      self.message.SetForegroundColour('ROYALBLUE1')
      self.message.SetLabel("checking network connection...")

   def connectLogin(self):
      self.connect = Connect()
      self.connect.setConfig(self.conf)
      wx.BeginBusyCursor()
      if self.connect.testConnect():
         wx.EndBusyCursor()
         self.message.SetForegroundColour('ROYALBLUE1')
         self.message.SetLabel("network connected please login")
         self.tryLogin()
      else:
         wx.EndBusyCursor()
         self.message.SetForegroundColour(wxNamedColour('ORANGE1'))
         self.message.SetLabel("network failed. please try proxy")
         self.proxy = ProxyDialog(self)
         keeptrying = True
         while keeptrying:
            if self.proxy.showProxy(self):
               self.connect.setProxy(self.proxy.getProxyServer() + ':' + self.proxy.getProxyPort())
               wx.BeginBusyCursor()
               window.message.SetForegroundColour('ROYALBLUE1')
               window.message.SetLabel("checking network connection...")
               if self.connect.testConnect():
                  wx.EndBusyCursor()
                  self.message.SetForegroundColour('ROYALBLUE1')
                  self.message.SetLabel("network connected. please login")
                  if self.tryLogin():
                     keeptrying = False
               else:
                  wx.EndBusyCursor()
                  self.message.SetForegroundColour(wxNamedColour('ORANGE1'))
                  if len(self.proxy.getProxyServer()) > 0: #FIXME add proper check
                     self.message.SetLabel("proxy failed. please try again")
                  else:
                     self.message.SetLabel("network failed. please try proxy")
            else:
               self.Destroy() 
               sys.exit(0) 

   def tryLogin(self):
         wx.SafeYield()
         login = LoginDialog(self)
         if login.showLogin(self):
            self.username = login.getUser()
            self.password = login.getPassword()
            self.updateMessage()
            return True
         else:
            self.Destroy() 
            sys.exit(0) 

   def makeUploader(self):
      self.uploader = Uploader()
      self.uploader.setConfig(self.conf)
      self.uploader.setConnector(self.connect)
      self.uploader.setAccess(self.username, self.password)
      self.uploader.setWindow(self)

   def showUploadFailedMessage(self):
      self.message.SetForegroundColour('ORANGE1')
      if self.connect.getError() == '105' :
         self.showMessage( 'upload limit reached, ' + `len(self.upimglist)` + ' image(s) left to upload')
      elif self.connect.getError() == '106' :
         self.showMessage( 'server is busy, ' + `len(self.upimglist)` + ' image(s) left to upload')
      elif len(self.upimglist) == 1:
         self.showMessage( 'upload failed, ' + `len(self.upimglist)` + ' image left to upload')
      elif len(self.upimglist) > 1:
         self.showMessage( 'upload failed, ' + `len(self.upimglist)` + ' images left to upload')
      else:
         self.message.SetForegroundColour('GREY30')

   def showMessage(self, msg):
      self.message.SetForegroundColour('STEELBLUE1')
      if len(self.username) < 33: # prevent long username to overflow footer space
         self.message.SetLabel( self.username + ' | ' + msg )
      else:
         self.message.SetLabel( msg )

   def updateMessage(self):
      if len(self.upimglist) == 1:
         self.showMessage( `len(self.upimglist)` + ' image ready for upload')
      elif len(self.upimglist) > 1:
         self.showMessage( `len(self.upimglist)` + ' images ready for upload')
      else:
         self.showMessage( 'please add images to upload')

   def addImages(self, dlg):
      try:
         paths = dlg.GetPaths()
         self.conf.setLastPath(dlg.GetDirectory())
         wx.BeginBusyCursor()
         wx.Yield()
         self.panel.Update()
         #self.progress.Show(True)
         #self.progress.SetRange( len(paths) )
         i = 0
         if len(paths) > 0:
            tilesize = self.conf.tileSize()
            for path in paths:
               i += 1
               self.progress.SetValue(i)
               if path in self.pathlist:
                  if self.conf.debug: print "Skip: %s" % path
               else:
                  if self.conf.debug: print "Adding: %s" % path
                  self.showMessage('adding image ' + str(i) + ' of ' + `len(paths)`)
                  self.pathlist.append(path)
                  img  =  wx.Image(path, wx.BITMAP_TYPE_ANY)
                  imgtile = self.conf.imgSize(img.GetWidth(), img.GetHeight())
                  nw = imgtile[0]
                  nh = imgtile[1]
                  if nh and nw:
                     img.Rescale(nw,nh)
                     sizedimg = img.ConvertToBitmap()               
                     self.imgbutton =  buttons.GenBitmapToggleButton( self.imgpanel, -1, None, size=tilesize ) 
                     self.imgbutton.SetToolTipString(path);
                     self.imgbutton.SetBitmapLabel(sizedimg);

                     self.maskimg.Rescale(nw,nh)
                     maskbmp = self.maskimg.ConvertToBitmap()               
                     mask = wx.Mask(maskbmp, wx.BLACK)
                     sizedimgtoggle = img.ConvertToBitmap()			
                     sizedimgtoggle.SetMask(mask);
                     self.imgbutton.SetBitmapSelected(sizedimgtoggle)
                     self.imgbutton.SetBackgroundColour("WHITE")

                     #self.scrollsizer.Add( self.imgbutton )
                     #self.upimglist.append(self.imgbutton)

                     self.scrollsizer.Prepend(self.imgbutton)
                     self.upimglist.insert(0, self.imgbutton)

      	             self.Bind(wx.EVT_BUTTON, self.OnImgButton, self.imgbutton)
                     self.imgbutton.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown, self.imgbutton)
                     self.imgbutton.Bind(wx.EVT_KEY_UP, self.OnKeyUp, self.imgbutton)

                     #redraw
                     wx.Yield()
                     #self.scrollsizer.Layout()
                     #self.imgpanel.Layout()
                     self.imgpanel.SetupScrolling()
                     #self.imgpanel.Refresh()
                     self.imgpanel.Update()

         self.upbutton.Enable(True) #if its disabled by delbutton
         #self.progress.SetRange(0)
         #self.progress.Show(False)
         self.scrollsizer.Layout()
         self.imgpanel.Layout()
         self.imgpanel.SetupScrolling()
         self.imgpanel.Refresh()
         self.imgpanel.Update()
         self.panel.Update()
         wx.EndBusyCursor()
      except:
         self.upbutton.Enable(True) 
         #self.imgpanel.Show(True)
         self.progress.SetRange(0)
         self.progress.Show(False)
         self.imgpanel.SetupScrolling()
         self.imgpanel.Update()
         self.panel.Update()
         wx.EndBusyCursor()
         
   # All event handler functions

   def OnResult(self, event): # Gets events triggered from Uploader->Worker Thread
      if event.data is None:
         self.upimglist = self.upimglist[self.upcount:] #slice out uploaded
         self.uploader.closeThread()
	 if self.cancelnow:
            self.postUpload(False)
         else:
            self.postUpload(True)
      elif event.data == 0:
         self.uploader.closeThread()
         self.postUpload(False)
      else:
         count = int(event.data) - 1
         if(count == self.lastupcount): 
            button = self.upimglist[count]
            self.showMessage('uploading image ' + str(count+1) + ' of ' + `len(self.upimglist)`)
            self.progress.SetValue((count*2)+2)
            self.scrollsizer.Remove(button)
            self.pathlist.remove(button.GetToolTip().GetTip()) #clear pathlist
            button.Destroy() 
            self.scrollsizer.Layout()
            self.imgpanel.Layout()
            self.imgpanel.Refresh()
            self.imgpanel.Update()
            self.upcount += 1
         else: #hack for progess update using same event
            self.progress.SetValue((count*2)+1)
         self.lastupcount = count

   def OnAddButton(self, event):
      wildcard = "All Supported Images|*.gif;*.jpg;*.jpeg;*.png|" \
           "JPEG Images|*.jpg;*jpeg|"  \
           "GIF Images|*.gif|" \
           "PNG Images|*.png"   
       
      dlg = wx.FileDialog(
            self, message="Choose Images", defaultDir=self.conf.getLastPath(), 
            defaultFile="", wildcard=wildcard, style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR)

      if dlg.ShowModal() == wx.ID_OK:

         self.imgpanel.Enable(False)
         self.imgpanel.Refresh()
         self.imgpanel.Update()

         self.addbutton.Enable(False)
         self.upbutton.Enable(False)
         self.delbutton.Enable(False)

         self.addImages(dlg)

         self.addbutton.Enable(True)
         self.upbutton.Enable(True)
         if len(self.delimglist) > 0:
           self.delbutton.Enable(True)

         self.imgpanel.Enable(True)
         self.imgpanel.Refresh()
         self.imgpanel.Update()

      self.updateMessage()
      dlg.Destroy()


   def OnDelButton(self, event):
      for button in self.delimglist:
         if self.conf.debug: print "Removing: %s" % button.GetToolTip().GetTip() 
         self.scrollsizer.Detach(button)
         self.pathlist.remove(button.GetToolTip().GetTip()) #clear pathlist
         self.upimglist.remove(button)
	 button.Destroy()

         #redraw
         wx.Yield()
         self.scrollsizer.Layout()
         self.imgpanel.Layout()
         self.imgpanel.Refresh()
         self.imgpanel.Update()
 
      self.imgpanel.SetupScrolling()

      self.delimglist = []
   
      if len(self.pathlist) > 0:
          self.upbutton.Enable(True)
          if not len(self.delimglist):
             self.delbutton.Enable(False)
      else:
          self.upbutton.Enable(False)
          self.delbutton.Enable(False)

      self.updateMessage()
   
   def OnUpButton(self, event):
      connectionbroke = False

      self.scrollsizer.Layout()
      self.imgpanel.Layout()
      self.imgpanel.SetupScrolling()

      self.imgpanel.Enable(False)
      self.imgpanel.Refresh()
      self.imgpanel.Update()

      if self.uploading:
         if self.conf.debug: print "Cancel"
	 self.cancelnow = True
         self.uploading = False
         self.upbutton.Enable(False)
         self.showMessage('cancelling upload..')
         self.uploader.abortUpload()
      else:
         for b in self.upimglist: # reset selected for delete
            b.SetBackgroundColour("WHITE")
            b.SetValue(False)
         self.upbutton.SetLabel("Cancel")
         self.upbutton.SetToolTipString("Cancel Upload")
         self.addbutton.Enable(False)
         self.delbutton.Enable(False)
         self.progress.Show(True)
         self.progress.SetRange(len(self.upimglist) * 2)
         self.upcount = 0
         self.lastupcount = -1 
         self.uploading = True
         self.showMessage('starting upload...')

         self.uploader.uploadFiles(self.upimglist)


   def postUpload(self, connectionbroke):
      if self.cancelnow:
         self.cancelnow = False
      elif len(self.upimglist) == self.upcount:
         self.upimglist = [] # all uploaded
      else:
         self.upimglist = self.upimglist[self.upcount:] #slice out uploaded

      if len(self.upimglist) > 0: # upload cancelled in middle
         for button in self.upimglist:
               button.Update()
         self.upbutton.Enable(True)
      else:
         self.upbutton.Enable(False)

      #reset control flags
      self.uploading = False 
      self.upcount = 0

      self.delimglist = [] #always reset delete list once in upload
      self.upbutton.SetLabel("Upload")
      self.upbutton.SetToolTipString("Upload Images")
      self.upbutton.Enable(True)
      self.addbutton.Enable(True)
      self.progress.SetRange(0)
      self.progress.Enable(False)

      self.imgpanel.Enable(True)
      self.scrollsizer.Layout()
      self.imgpanel.Layout()
      self.imgpanel.SetupScrolling()
      self.imgpanel.Refresh()
      self.imgpanel.Update()

      if connectionbroke:
         self.showUploadFailedMessage()
      else:
         self.updateMessage()

   def OnImgButton(self, event):
      self.delbutton.Enable(True)
      button = event.GetEventObject()
      if button in self.delimglist:
         self.delimglist.remove(button)
         button.SetBackgroundColour("WHITE")
         self.multiDesel(button)
         self.lastdesel = button
         self.lastsel = None 
      else:
         self.delimglist.append(button)
         button.SetBackgroundColour("ORANGE1")
         self.multiSel(button)
         self.lastsel = button
         self.lastdesel = None 

      if len(self.delimglist) > 0:
          self.delbutton.Enable(True)
      else:
          self.delbutton.Enable(False)
      self.updateMessage()

   def multiDesel(self, button):
      if not self.shifted:
         return
      if self.lastdesel == None:
         return
      if not self.lastdesel in self.upimglist:
         return
      x =  self.upimglist.index(self.lastdesel)
      y =  self.upimglist.index(button)
      if  x < 0 or y < 0:
         return
      if x < y:
         start = x
         end = y
      else:
         start = y
         end = x
      for i in range(len(self.upimglist)):
         if i > start and i < end:
            b = self.upimglist[i]
            if b in self.delimglist: # safe remove
               self.delimglist.remove(b)
            b.SetBackgroundColour("WHITE")
            b.SetValue(False)
            b.Update()
      wx.Yield()
      self.imgpanel.Refresh()
      self.imgpanel.Update()
	
   def multiSel(self, button):
      if not self.shifted:
         return
      if self.lastsel == None:
         return
      if not self.lastsel in self.upimglist:
         return
      x =  self.upimglist.index(self.lastsel)
      y =  self.upimglist.index(button)
      if x < 0 or y < 0:
         return
      if x < y:
         start = x 
         end = y
      else: 
         start = y 
         end = x
      for i in range(len(self.upimglist)):
         if i > start and i < end:
            b = self.upimglist[i]
            if not b in self.delimglist: # safe append 
               self.delimglist.append(b)
            b.SetBackgroundColour("ORANGE1")
            b.SetValue(True)
            b.Update()
      wx.Yield()
      self.imgpanel.Refresh()
      self.imgpanel.Update()
	
   def OnHelpButton(self, event):
      about = AboutDialog(self)
      about.showAbout(self.conf.version)
      about.Destroy()

   def OnKeyDown(self, evt):
      if evt.GetKeyCode() == wx.WXK_SHIFT:
        self.shifted = True

   def OnKeyUp(self, evt):
      if evt.GetKeyCode() == wx.WXK_SHIFT:
        self.shifted = False 
Esempio n. 34
0
def proc(config: dict, record_dir: str, danmu_path: str) -> None:
    p = Processor(config, record_dir, danmu_path)
    p.run()
    u = Uploader(p.outputs_dir, p.splits_dir, config)
    u.upload(p.global_start)
Esempio n. 35
0
class ArduinoCompilerUploader:
    def __init__(self, pathToMain):
        self.pathToSketchbook = ""
        # Get path on mac
        if platform.system() == "Darwin":
            # logging.debug('self.pathToMain');
            # logging.debug(self.pathToMain);
            # logging.debug('PWD=');
            # logging.debug(os.environ.get('PWD'));
            # logging.debug('PYTHONPATH=');
            # logging.debug(os.environ.get('PYTHONPATH'));
            # logging.debug('ENVIRON=');
            # logging.debug(os.environ);
            if os.environ.get("PYTHONPATH") != None:
                self.pathToMain = os.environ.get("PYTHONPATH")
            else:
                self.pathToMain = pathToMain
        elif platform.system() == "Windows" or platform.system() == "Linux":
            self.pathToMain = pathToMain

        if platform.system() == "Linux":
            self.pathToSketchbook = expanduser("~").decode("latin1") + "/Arduino"
        elif platform.system() == "Darwin":
            self.pathToSketchbook = base.sys_path.get_document_path() + "/Arduino"
        elif platform.system() == "Windows":
            self.pathToSketchbook = (
                os.path.dirname(os.path.dirname(os.path.dirname(base.sys_path.get_tmp_path()))) + "/Documents/Arduino"
            )

        self.pathToArduinoDir = pathToMain + "/res/arduino/"
        self.uploader = Uploader(pathToMain)
        self.compiler = Compiler(pathToMain)
        self.boardSettings = defaultdict(BoardConfig)
        self.parseBoardSettings(self.pathToMain + "/res/boards.txt")
        self.board = "uno"
        self.port = None

    def setBoard(self, board):
        self.board = board
        return self.searchPort()

    def setPort(self, port=""):
        self.port = port

    def getPort(self):
        return self.port

    def getBoard(self):
        return self.board

    def getBoardBaudRate(self):
        return self.boardSettings[self.board].getBaudRate()

    def getBoardMCU(self):
        return self.boardSettings[self.board].getMCU()

    def getBoardFCPU(self):
        return self.boardSettings[self.board].getFCPU()

    def parseBoardSettings(self, path):
        file = open(path, "r")
        # Split the file using the separator in boards.txt to separate the config of the different boards
        a = file.read().split("\n\n##############################################################\n\n")
        a.pop(0)  # Remove first element which is only a url
        for line in a:
            boardName = line.split(".")[0]
            boardConfig = line.split("\n")
            boardConfig = [i.split("=") for i in boardConfig]
            boardConfig.pop(0)  # Remove empty first element
            self.boardSettings[boardName] = BoardConfig(boardConfig)

    def getAvailablePorts(self):
        availablePorts = []

        if platform.system() == "Windows":
            from serial.tools.list_ports import comports

            comPorts = list(comports())
            for port in comPorts:
                if not "Bluetooth" in port[1]:  # discard bluetooth ports
                    availablePorts.append(port[0])
        elif platform.system() == "Darwin":
            darwinPorts = glob.glob("/dev/tty.*")

            for port in darwinPorts:
                if not "Bluetooth" in port:  # discard bluetooth ports
                    availablePorts.append(port)

        elif platform.system() == "Linux":
            availablePorts = glob.glob("/dev/ttyACM*")
            availablePorts += glob.glob("/dev/ttyUSB*")
        return availablePorts

    def searchPort(self):
        availablePorts = self.getAvailablePorts()
        if len(availablePorts) <= 0:
            return []
        ports = []
        for port in availablePorts:
            args = "-P " + port + " -p " + self.getBoardMCU() + " -b " + self.getBoardBaudRate() + " -c arduino"
            output, err = callAvrdude(args)
            if "Device signature =" in output or "Device signature =" in err:
                ports.append(port)
        if len(ports) == 1:
            self.setPort(ports[0])
        return ports

    def compile(self, code):
        return self.compiler.compile(
            code,
            self.getBoard() or "uno",
            self.pathToArduinoDir,
            self.pathToSketchbook,
            self.getBoardMCU(),
            self.getBoardFCPU(),
        )

    def upload(self, code):
        compilationErrorReport = self.compile(code)
        if compilationErrorReport["status"] == "OK":
            uploadErrorReport = self.uploader.upload(
                code,
                self.getPort(),
                self.getBoard(),
                self.getBoardMCU(),
                self.getBoardBaudRate(),
                self.pathToMain,
                self.pathToSketchbook,
            )
            return uploadErrorReport
        else:
            return compilationErrorReport
Esempio n. 36
0
def main():
    logger.info('Starting')

    every = 1

    #Map of used pins
    pins = {'data': 15, 'enable': 18}

    try:

        state = {}
        try:
            tmp = json.loads(open('status.txt', 'r').read())

            #if is not passed midnight or aren't elapsed 10 mins, restore the state
            now = localtime()
            if tmp['timestamp'][2] == now.tm_mday and (
                    now.tm_hour * 60 + now.tm_min) - (
                        tmp['timestamp'][3] * 60 + tmp['timestamp'][4]) <= 10:
                logger.info('Restored previous state')
                state = tmp

        except Exception:
            pass

        #Create threads
        v = VentusDecoder(pins['data'], pins['enable'], logger, state)
        uploader = Uploader(HTTP_ENDPOINT, 'weather.db', logger)

        #Create thread exit handler
        def close(signum=None, frame=None, exitcode=0):
            v.stop()

            #Save current state
            state = v.serialize()
            state['timestamp'] = localtime()
            with open('status.txt', 'w') as f:
                f.write(json.dumps(state))

            uploader.stop()
            logger.info('Quitted safely')
            sys.exit(exitcode)

        #for systemd exit
        signal.signal(signal.SIGINT, close)
        signal.signal(signal.SIGTERM, close)

        #Start threads
        v.start()
        uploader.start()

        start = time()

        #Wait until is ready
        while not v.isReady() and v.is_alive() and uploader.is_alive():
            sleep(1)

        if v.isReady():
            logger.info('Checking completed!')

        lastUpdateMin = 60  #impossible minute

        #Upload every x minutes
        while v.is_alive() and uploader.is_alive():
            nowMin = localtime().tm_min
            if lastUpdateMin != nowMin and nowMin % every == 0:
                data = v.getData()
                data['timestamp'] = datetime.now().strftime(
                    '%Y-%m-%d %H:%M:00')

                uploader.push(data)

                lastUpdateMin = nowMin

            sleep(1)

        logger.info('Quitting for thread death!')
        close(exitcode=1)

    except (KeyboardInterrupt, SystemExit) as e:
        sys.exit()

    except Exception as e:
        logger.info('Exception : ' + str(e))
        raise
Esempio n. 37
0
def getUploadedFiles():
	fileManager = FileManager(args=[None, None, None])
	demoPathAttributes = fileManager.getAttributes()
	uploader = Uploader(demoPathAttributes)