Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Django » django-treensl - еще один метод для хранения дерева в модели » Окт. 11, 2015 19:59:31

Выношу на строгий суд свое приложение, реализующее хранение деревьев в модели Django:

django-treensl

https://github.com/EvgeniyBurdin/django_treensl

На данный момент поддерживается только БД PostgreSQL 9.1+

О самом алгоритме можно прочитать в wiki репо:
https://github.com/EvgeniyBurdin/django_treensl/wiki

А так же в моей старинной статье
http://habrahabr.ru/post/166699/
(В этой статье ранее был код на Django, реализующий логику. Сейчас я убрал его, он был ужасен, хоть и работал)

Всю логику по работе с первичным ключем, в приложении treensl, я вынес в БД .

Буду благодарен за вопросы, критику и замечания. Так же если кто захочет присоединиться к разработке приложения - я буду только рад!

Django » Раздельный доступ к файлу » Окт. 7, 2015 10:58:33

Добрый день,
Нужна Ваши помощь, а то я совсем голову сломал.
В Django не силен.

Задача такая:
При переходе на заданный мною url + имя файла, файл открывается, а если его нету создается и парсится html файл содержащий таблицу и выдирается оттуда 1-й столбец и записывается в файл.
Если файл существует и в нем что-то есть, это содержимое выводится на экран.
Можно изменять содержимое и сохранить в файл.

А если пользователей будет несколько, они перезатрут содержимое фала.
Как можно организовать доступ к файлу таким образом, что бы только тот кто открыл мог редактировать и сохранять изменения в файл, а остальные могут только читать получают права только после сохранения\закрытия файла открывшим его.

Вроде, не сильно запутанно написал

urls.py
urlpatterns = patterns('',
    url(r'^look/(.*)$', 'envrnmnt.views.look'),
)

views.py
def look(request, file_name=''):
    temp ={}
    user = None
    if request.method == 'POST':
        if 'fileBody' in request.POST:
            path_to_file = os.path.join('report', file_name)
            #full access to all
            #os.chmod(path_to_file, 0777)
            input_file = open(path_to_file, 'w')
            comment = request.POST.getlist('fileBody')
            goods_name = request.POST.getlist('fileHeader')
            for i in range(0, len(goods_name)):
                temp.update({goods_name[i].encode("utf8") : comment[i].encode("utf8")})
            input_file.write(str(temp))
            input_file.close()
            return render_to_response('look.html', {'file_name': file_name,
                                                        'dict': temp})
    else:
        if not file_name:
            return render_to_response('look.html')
        else:
            _file = open(os.path.join('report', file_name), 'r')#a+
            file_body = _file.read()
            if file_body:
                my_dict = eval(file_body)
                _file.close()
                #может можно привязаться к юзеру?
                #user = request.META['USERNAME']
                #read only to all
                #os.chmod(_file.name, 0444)
                return render_to_response('look.html', {'file_name': file_name,
                                                            'dict': my_dict})
            else:
                url = 'file:' + urllib.pathname2url(r'path to html')
                resp = urlopen(url)
                soup = BeautifulSoup(resp.read(), "html.parser")
                table = soup.find('table')
                rows = table.find_all('tr')
                goods_list = []
                for row in rows:
                    goods_name = row.find_all('td')[0].text
                    if goods_name != 'Summary':
                        if len(goods_name) > 2:
                            goods_list .append(goods_name)
                _file.close()
                return render_to_response('look.html', {'input_file': file_body,
                                                            'file_name': file_name,
                                                            'parsed_files': file_name,
                                                            'goods_list': goods_list})

look.html
<html>
<body>
<div class="container">
    {% if dict %}
    <h2>Goods report - "{{ file_name }}"</h2>
        <form id="form1" action="" method="post">
            {% for key, value in dict.items %}
            <input type="text" class="input_style" name="fileHeader" value="{{ key }}">
            <textarea style="border: none" class="text-block" name="fileBody">{{ value }}</textarea>
            <br><br>
            {% endfor %}
        <br><br>
        <button>Save</button>
        </form>
    {% elif parsed_files %}
    <h2>Goods report - "{{ file_name }}"</h2>
        <form id="form" action="" method="post">
            {% for item in goods_list %}
            <input type="text" class="input_style" name="fileHeader" value="{{ item }}">
            <textarea style="border: none" class="text-block" name="fileBody">{{ input_file }}</textarea>
            <br><br>
            {% endfor %}
        <br><br>
        <button>Save</button>
        </form>
    {% else %}
    <h2>Goods report</h2>
            <h3> Goods</h3>
            <textarea style="border: none" class="text-block" name="fileBody">{{ input_file }}</textarea>
        <br><br>
    {% endif %}
</div>
</body>
</html>

Базы данных » PL/python » Окт. 7, 2015 09:46:41

Всем привет!
вот начал разбираться с программирование БД на питоне.
И обнаружил что в сети крайне мало информации на данную тему!
Может есть где сообщество? ресурсы? и так далее по данному направлению?
А то натыкаюсь на некоторые грабли и даже спросить негде.
Спасибо за любую инфу.

Базы данных » Каким инструментом (как и в какой среде лучше отскриптовать) организовать загрузку множества shp-файлов в SpatiaLite?  » Окт. 6, 2015 12:16:54

Здравствуйте. Каким инструментом (как и в какой среде лучше отскриптовать) организовать загрузку множества shp-файлов в SpatiaLite?

GUI » [PyQt5] Настройка высоты строк в таблице » Окт. 5, 2015 18:14:40

Добрый день.
Я недавно начал изучать PyQt. Сейчас создаю таблицу. Столбцы должны быть одинакового размера, высота строк настраивается под объем текста. Код такой:

#!/usr/bin/python3
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
font_family='LiberationMono'
font_size=14
width=1024
height=768
article='''Макаров      go (в сочетании с последующим герундием выражает действие, соответствующее значению герундия)                   
Габон (государство в юго-западной Африке)       присест (Баян)  заход (I cannot do it in one go - Я не могу сделать это за один заход / с первого захода Баян)  готовый к запуску
'''
article=article.splitlines()
for i in range(len(article)):
        article[i]=article[i].split('\t')
app = QApplication(sys.argv)
table = QTableWidget()
tableItem = QTableWidgetItem()
table.resize(width,height)
table.setRowCount(len(article))
table.setColumnCount(len(article[0]))
# Merge columns 1-4 of row 0
table.setSpan(0,1,1,4)
standard_col = width/len(article[0])
for i in range(len(article[0])):
        table.setColumnWidth(i,standard_col)
for i in range(len(article)):
        for j in range(len(article[i])):
                elem = QTableWidgetItem(article[i][j])
                table.setItem(i,j,elem)
                elem.setTextAlignment(Qt.AlignLeft | Qt.AlignTop)
                elem.setFont(QFont(font_family,font_size))
        table.verticalHeader().setSectionResizeMode(i,QHeaderView.ResizeToContents)
table.show()
app.exec_()
Проблема в том, что высота строк фактически изменяется (ResizeToContents) при вставке текста. После слияния колонок 1-4 строки 0 высота этой строки остается той же, что и до слияния. Я пробовал ставить ResizeToContents и до вставки текста, и вне цикла вставки, но это не помогает.

Вопрос вдогонку - а почему колонки не полностью помещаются в окно? Если с помощью стрелок переместиться в последнюю колонку, то можно заметить, что в первой колонке текст урезается на 1 символ, иногда больше.

Django » “Duplicate key value violates unique constraint”. Используется “get_or_create” с “ManyToMany” » Окт. 3, 2015 16:31:21

Добрый день.

Кратко о проблеме:
Имеются циклы, которые раскидывают информацию по БД. Видно из “принт-логов” ниже. При первом проходе все создается нормально. При втором проходе создается второй инстанс (тот же фильм, только жанр изменен), но данный код
show_movie.showsMovie_originCountry.get_or_create(placeCountry_name=country)
, который идет после создания инстанса и который должен связать Фильм со Страной через many2many, выдает ошибку
django.db.utils.IntegrityError: duplicate key value violates unique constraint "place_countries_placeCountry_name_key"
DETAIL:  Key ("placeCountry_name")=(Польша) already exists.
Если перед запуском кода в базе имеется запись “Польша”, то первый проход цикла проверяет “Польшу” и ошибок не выдает.

Чтобы разобраться, в чем причина, принтами сделал подобие логов:
# Первый проход\инстанс
DEBUG -> show_movie: id: 42 ---->>>> Добрый день, я люблю тебя! ---->>>> Мелодрама
DEBUG -> country: Польша
DEBUG -> films_cast: Алексей Коморовский, Барбара Курдей, Павел Домагала
DEBUG -> actor_position: (<ShowPersonsInShows: Актер>, False)
DEBUG -> actor_position: (<ShowPersonsInShows: Актер>, False)
DEBUG -> actor_position: (<ShowPersonsInShows: Актер>, False)
DEBUG -> films_producer: Рышард Заторский
DEBUG -> producer_position: (<ShowPersonsInShows: Режиссер>, False)
DEBUG -> films_scenarist: Рышард Заторский
DEBUG -> scenarist_position: (<ShowPersonsInShows: Сценарист>, False)
# Второй проход\инстанс
DEBUG -> show_movie: id: 43 ---->>>> Добрый день, я люблю тебя! ---->>>> Комедия
DEBUG -> country: Польша
Traceback (most recent call last):
####
django.db.utils.IntegrityError: duplicate key value violates unique constraint "place_countries_placeCountry_name_key"
DETAIL:  Key ("placeCountry_name")=(Польша) already exists.

Кусок models.py #1:
class Shows(models.Model):
    show_name = models.CharField(max_length=100, db_index=True)
    show_poster = models.ImageField('Poster')
    show_screen = models.ImageField('Screens')
    show_genre = models.CharField('Genre', max_length=20, blank=True)
    # show_length = models.IntegerField('Length', null=True)
    show_length = models.TimeField('Time', null=True)
    show_ageLimit = models.IntegerField('Age limit', null=True)
    show_description = models.TextField('Description', blank=True)
    show_youtubeUrl = models.URLField('Youtube', max_length=255, blank=True)
    show_person = models.ManyToManyField(ShowPersons,
                                         through='ShowPersonsInShows',
                                         related_name='%(app_label)s_%(class)s_related',
                                         verbose_name="People in movie")
    class Meta:
        db_table = 'shows'
        verbose_name = 'Show'
        verbose_name_plural = 'Shows'
        ordering = ['show_name']
class ShowsMovies(Shows):
    showsMovie_originalName = models.CharField('Original name', max_length=100, blank=True)
    showsMovie_budget = models.IntegerField('Budget', null=True)
    showsMovie_productionYear = models.IntegerField('Production year', null=True)
    showsMovie_officialSite = models.URLField('Official site', max_length=255, blank=True)
    showsMovie_originCountry = models.ManyToManyField('app_places.PlaceCountries',
                                                      verbose_name='Origin country',
                                                      db_table='m2m_shows_movies_to_place_countries')
    class Meta:
        db_table = 'shows_movies'
        verbose_name = 'Show Type - Movie'
        verbose_name_plural = 'Show Type - Movie'

Кусок models.py #2:
class PlaceCountries(models.Model):
    placeCountry_name = models.CharField("Country's Name", max_length=60, unique=True)
    placeCountry_short_name = models.CharField("Country's Short name", max_length=5, unique=True)
    class Meta:
        db_table = 'place_countries'
        verbose_name = 'Country'
        verbose_name_plural = 'Countries'
        ordering = ['placeCountry_name']

Код:
for genre in films_genre.title().split(', '):
	show_movie, created = ShowsMovies.objects.get_or_create(
	    show_name=film,
	    show_genre=genre,
	    show_length=films_length,
	    show_ageLimit=films_age,
	    show_description=films_description,
	    show_youtubeUrl=films_youtube_url,
	    showsMovie_originalName=films_original_name,
	    showsMovie_productionYear=films_year,
	)
	print('DEBUG -> show_movie:', 'id:', show_movie.id, '---->>>>', show_movie.show_name, '---->>>>', show_movie.show_genre)
	for country in films_country.split(', '):
	    print('DEBUG -> country:', country)
	    # Место возникновения ошибки
	    show_movie.showsMovie_originCountry.get_or_create(placeCountry_name=country)
	if films_cast != ' ':
	    print('DEBUG -> films_cast:', films_cast)
	    for actor in films_cast.split(', '):  # и таких еще 2 цилка, только для продюсера и сценариста
		get_showPersonsInShow_person, created = ShowPersons.objects.get_or_create(showPerson_fullname=actor)
		get_showPersonsInShow_show, created = Shows.objects.get_or_create(show_name=film, show_genre=genre)
		actor_position = ShowPersonsInShows.objects.get_or_create(
		    showPersonsInShow_person=get_showPersonsInShow_person,
		    showPersonsInShow_show=get_showPersonsInShow_show,
		    showPersonsInShow_position='Актер'
		)
		print('DEBUG -> actor_position:', actor_position)

Полный трейс:
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/antonio/projects/idemvdvoem.com/idemvdvoem.com/src/shared/parser.py", line 47, in __init__
    self.films_list()
  File "/home/antonio/projects/idemvdvoem.com/idemvdvoem.com/src/shared/parser.py", line 91, in films_list
    self.detailed_films_info(films_dict)
  File "/home/antonio/projects/idemvdvoem.com/idemvdvoem.com/src/shared/parser.py", line 285, in detailed_films_info
    show_movie.showsMovie_originCountry.get_or_create(placeCountry_name=country)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/fields/related.py", line 1029, in get_or_create
    obj, created = super(ManyRelatedManager, self.db_manager(db)).get_or_create(**kwargs)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/manager.py", line 127, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/query.py", line 407, in get_or_create
    return self._create_object_from_params(lookup, params)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/query.py", line 447, in _create_object_from_params
    six.reraise(*exc_info)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/utils/six.py", line 659, in reraise
    raise value
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/query.py", line 439, in _create_object_from_params
    obj = self.create(**params)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/query.py", line 348, in create
    obj.save(force_insert=True, using=self.db)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/base.py", line 734, in save
    force_update=force_update, update_fields=update_fields)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/base.py", line 762, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/base.py", line 846, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/base.py", line 885, in _do_insert
    using=using, raw=raw)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/manager.py", line 127, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/query.py", line 920, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 974, in execute_sql
    cursor.execute(sql, params)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise
    raise value.with_traceback(tb)
  File "/home/antonio/projects/idemvdvoem.com/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: duplicate key value violates unique constraint "place_countries_placeCountry_name_key"
DETAIL:  Key ("placeCountry_name")=(Польша) already exists.

Что делаю не так?

Центр помощи » Скрипт для QGis на питоне » Окт. 1, 2015 11:35:39

добрый день!
необходимо создать сервис геообработки для интерполяции по методу обратно_взвешенных расстояний(IDW).
иными словами, написать скрипт на питоне, использующий метод ОВР для QGis c подключением библиотеки GDAL.
Кто сможет помочь?

Django » Не проходит миграция через роутер. » Сен. 30, 2015 14:01:33

Приветствую.
Возникла не обходимость вести разработку на субд староннего сервера.
Прописал в setings.py
                                                       
 DATABASES = {                                                                    
      'default': {                                                                
          'ENGINE': 'django.db.backends.mysql', 
          'NAME': 'Django',                      
          'USER': 'Django',                     
          'PASSWORD': 'xxxxxxxx',                
          'HOST': '127.0.0.1',                    
          'PORT': '3306',                    
      },                                                                          
      'asterisk': {                                                               
          'ENGINE': 'django.db.backends.postgresql_psycopg2', 
          'NAME': 'Django',                     
          'USER': 'Django',                       
          'PASSWORD': 'xxxxxx',                 
          'HOST': 'public-host',                     
          'PORT': '5432',                    
      }                                                                           
  }                                                                               
                                                                                  
 DATABASE_ROUTERS = ['SiAsLo.routers.SisaloRoute','testapp.routers.TestappRoute']   

В routers.py.
class SisaloRoute(object):                                                       
                                                                                  
     def db_for_read(self, model, **hints):                                       
         if model._meta.app_label == 'SiAsLo':                                    
             return 'asterisk'                                                    
         return None                                                              
                                                                                  
     def db_for_write(self, model, **hints):                                      
         if model._meta.app_label == 'SiAsLo':                                    
             return 'asterisk'                                                    
         return None                                                              
                                                                                  
     def allow_migrate(self, db, app_label, model=None, **hints):                 
         if model._meta.app_label == 'SiAsLo':                                    
             return db == 'asterisk'                                              
         return False      

Делаю.
./manage.py makemigrations SiAsLo
Migrations for ‘SiAsLo’:
0001_initial.py:
- Create model Call
- Create model Company
- Create model Contax
- Create model EventCall
- Create model Person
- Create model Seat
- Create model Tag
- Add field seat to person
- Add field tag to person
- Add field person to contax
- Add field person to company
- Add field event_call to call

./manage.py migrate SiAsLo –verbosity=3
Operations to perform:
Apply all migrations: SiAsLo
Running pre-migrate handlers for application auth
Running pre-migrate handlers for application contenttypes
Running pre-migrate handlers for application sessions
Running pre-migrate handlers for application sites
Running pre-migrate handlers for application admin
Running pre-migrate handlers for application SiAsLo
Running migrations:
No migrations to apply.
Running post-migrate handlers for application auth
Running post-migrate handlers for application contenttypes
Running post-migrate handlers for application sessions
Running post-migrate handlers for application sites
Running post-migrate handlers for application admin
Running post-migrate handlers for application SiAsLo


Иду в субд.
 Django=# \dt                                                                     
 No relations found.

Если делать базу asterisk дефолтной то все хорошо.
Что я делаю не так?

Python для новичков » Установка PyQt4 Python3 » Сен. 30, 2015 12:01:19

Доброго времени суток.

Когда пытаюсь сделать последний этап установки PyQt4 мне выдает:
pQtCoreQt.o sipQtCorequintptr.o sipQtCoreQSysInfo.o -L/home/silentstorm/Downloads/PyQt-x11-gpl-4.11.4/qpy/QtCore -L/usr/lib/x86_64-linux-gnu -lqpycore -lQtCore -lpthread
/usr/bin/ld: cannot find -lqpycore
collect2: error: ld returned 1 exit status
make[1]: *** [QtCore.so] Ошибка 1
make[1]: Выход из каталога `/home/silentstorm/Downloads/PyQt-x11-gpl-4.11.4/QtCore'
make: *** [install] Ошибка 2

Это ошибка при самой копмиляции и установки пакета.

Обсуждение новостей » Matplotlib: Научная графика в Python » Сен. 29, 2015 06:11:05

Очень даже бодрое втсупления для тех кто всегда хотел, но так и не познакомился с библиотекой отрисовки графиков в стиле Matlab - matplotlib.
Учебник в доступной и легкой форме рассказывает как начать работать с модулем, и перечисляет базисные элементы и идеологию модуля. Все разъяснения подкреплены примерами и результатами.
Я проглядел, рекомендую.

Оригинал здесь

Взято отсюда


Python для новичков » Погодное API с документацией » Сен. 28, 2015 14:44:07

Можете посоветуете какой-нибудь API прогноза погоды? Желательно с документацией, конечно. Yahoo смотрел - не смог разобраться.

Из всех найденных положил глаз на forecast.io. Найдутся тут те, кто с ним работал?

Python проекты » Экспа за еду » Сен. 28, 2015 11:36:33

Всем доброго дня, возможно, пишу не в тот раздел, поэтому просто ткните носом, если что-то не так.

Собственно, хотел бы прицепиться к опытной команде разработчиков. Будет просто замечательно, если команда окажется ориентированной на веб, потому как тягатею именно к веб-разработке. Работать готов усердно, без претензий на зарплату.
Немного о себе. Высшего образование нет, но в обозримом будущем планирую получить (сейчас в статусе отчисленного с 4 курса). Работаю системным администратором, потому на работе, в основном, занимаюсь самообразованием. С питоном знаком чуть больше полугода. Поначалу изучал урывками, бессистмно и бесцельно. Написал пару, не знаю как их назвать, наверное, демок на pygame, но больше ничего вменяемого представить не могу. Время от времени решал задачи на CheckIO, но давненько уже там не был. Сейчас понял - что хочу двигаться в сторону веба, поэтому активно изучаю Flask и Tornado. Немного знаю HTML/CSS и JavaScript (чистый и Jquery). В целом, с теорией, как мне(!) кажется(!!),
я более-менее знаком.
Из практического опыта - работал с небольшой базой на SQL Server, примрно в 3000 сущностей. Довольно неплохо знаю Ubuntu и CentOS. Пару раз поднимал веб-сервер (IIS, правда это был). К тестам готов и даже буду рад - тоже отличный опыт.

Python для экспертов »  Verksamheten är stolt över att ha » Сен. 19, 2015 15:20:00

Företag rusade att utveckla sin webb strategier. Många har slå en tegelvägg. Nike, som världens största störst märkes sportkläder organisation, är en av de få överlevande. Till skillnad andra företag, Nike har en mycket tydligt mål redan från början. Vi vet shoppare vill ha mer information om Nike produkter, hur de fungerar samt var du kan få dem. Jag gillar att tänka på idag som en fortsättning i samband med Nike e-commerce experiment. en chans för konsumenterna att bidra till alla våra lära sig att bättre betjäna deras krav ,? ¨ säger Mary Kate Buckley nike air max herr rea, chef för Nya Business Ventures. Nike bildades hela 1968 i enlighet med lagstiftningen på delstaten Oregon, U. S.. Den allmänna verksamhet kan beskrivas som följande: design, utveckling, och global marknadsföring av hög kvalitet skor, utrustning och tillbehör varor.


Till exempel är den yngre marknaden början köpa mer avslappnade skor eller stövlar och arbetsskor. En mer för nedgången är att folk är köpa mer medellång prissatta athletic skor och inte går för hög pris skor varumärke. Därför detta är att föra Nike mycket mer konkurrens att överträffa. För nike air max 90 billigt online att stanna kvar på toppen av den atletiska skoindustrin de behöver upprätta en exceptionell global teknik. Formgivarna valde ett nytt ljust orange och natural kartong avsluta med en grå rand separerande de två färgämnen och den orangefärgade delen av detta presenterade en subtil tonalt mönster. Ser man tillbaka i dag hela konstruktionen är mycket nästan dagligen och att sena 90-talet stil och design bara bidrar till känslan av nostalgi. En nutritionist eller kanske dietist kan hjälpa dig göra en frisk och snyggt välbalanserad måltid strategi som är okomplicerad att följa Nike Air Max och kommer hjälpa förbättra din sprit.

För dem som mening du kan ha en konsumera sjukdom Det är verkligen viktigt att du söker upp hjälp stöd. Erkänner som du kan möjligen äga en svårighet är i huvudsak den första period mot återhämtning. Den utmärkta rapporter är att du kan konsumera en hälsosam och väl välbalanserad dietprogram som inte kräver där du bo med en strikt eller rigorösa rutin. En mångsidig kost hjälper dig att kvar matchen samt en regelbunden övervikt nike air max thea dam rea. Jag ska låta dig avgöra i kommentarerna, men först här är några detaljer som du bör känna till. sistone under en speciell på utbildare och sport, Showtime bevisat Victor Cruz första Nike pas cher signatur, Nike Omgivning Cruz, skulle släppa Slide 2015. Hittills har vi inte vet vad som väntar och de resultaten ganska chockerande.

Verksamheten är stolt över att ha en online-närvaro som blandar handel och erfarenhet med de flesta, annars alla nya digitala tillgångar, gruvdrift tvångs trainer curation sina entusiaster genom personalisering. Där andra märken kämpar för att passa mobiltelefon till en fullsatt marknadsföring mix, Nike har gjort utrymme genom att orsaka kanalen tjänar ett verktyg som ger dem en anledning för håll interagera med sin marknadsföring tillgångar på en regelbunden basis nike free run 3 herr rea. Sedan var det den speciella inte så lilla frågan om de 270-graders synlig luft. Typiskt precisionstillverkade formblåst luft Sole enhet - inspirerad av plastmaterial mjölk kannor - producerat helt ny standard för stoppning och blev en hörnsten om synlig luft i främre foten. Utformningen av lådan är radikalt skiljer sig från allt som hade anländer innan det.

Python для новичков » ООП, первая попытка - скажите, что не так :-) » Сен. 18, 2015 11:53:35

Привет.

Есть тулза, писал её сначала в виде просто набора сриптов с функциями. Потом она начала разростаться, начал внеднять классы.

Сейчас решил переписать её с нуля, а заодно - немного глубже вникнуть в ООП, всякие композиии, наследование, и вообще - понять как составлять общую схему отношения классов.

Заранее извиняюсь за терминологию :-)

Заодно - немного попробовал разобраться в UML, получилась вот такая картинка:



Мысль такая:

  • класс RDSmanager - основной класс (“первого уровня”), цель - шарить несколько атрибутов всем дочерним классам;
  • класс Options - первый рабочий класс (“второго” уровня), который начинает обработку - парсит argpase() и в зависимости от опций - создаёт объект из нужного класса “третьего” уровня и вызывает нужный метод (Refresh.refresh() в данном примере);
  • класс Refresh - “третьего” уровня, который занимается уже непосредтсвенно обработкой данных, операции с файлами и прочее, используя некоторые общие методы из класса UnityServices;
  • UnityServices класс - просто “хранилище” для вспомогательных методов, которые будут использоваться Refresh и другими классами “третьего” уровня.

И сами классы, кратко:

RDSmanager.py:

...
from lib.local.rds_services import Logger
from lib.local.exceptions import *
class RDSmanager(object):
    clc_user = 'user'
    clc_password = 'password'
    rdsmanager_localpath = os.path.dirname(os.path.abspath(__file__))
    logger = Logger(rdsmanager_localpath)
    if os.environ.get('bamboo_working_directory'):
        local_source_dir = os.environ['bamboo_working_directory']
    elif os.environ.get('RDS_HOME'):
        local_source_dir = os.environ['RDS_HOME']
    else:
        raise NoSourceDirVariableError(logger, 'Directory with project source files not found. Exit.')
...
...
class Options(RDSmanager):
    ...
    def getopts(self):
        ...
        parser = argparse.ArgumentParser()
        subparsers = parser.add_subparsers()
        # Unity options
        parser_unity = subparsers.add_parser('unity', help='Unity application options')
        parser_unity.set_defaults(func=self.handler_unity)
        parser_unity.add_argument('-r',
                                  '--refresh',
                                  action='store_true',
                                  dest='unity_refresh',
                                  help='Copy necessarry DLLs to Copy necessarry DLLs '
                                       'to MainApplication\\Assets\\PreparedPlugins and '
                                       'NGUIProject\\Assets\\PreparedPlugins before build.')
...
       def handler_unity(self, options_list):
            """Select and run specified command line options"""
            if options_list.unity_refresh:
                self.logger.logger.info('Running Unity refresh modules before Application build')
                from lib.unity.refresh import Refresh
                unity = Refresh()
                unity.refresh()
...

lib.unity.refresh.py:

...
from RDSmanager import RDSmanager
from lib.unity.unity_services import UnityServices
class Refresh(RDSmanager):
    def refresh(self):
        self.logger.logger(self.__class__.__name__)
        unity = UnityServices()
        modules_list = unity.modules_list()
        for modname in modules_list:
        ...
      if moddstdir:
          self.logger.logger.info('Copy file {} to {}'.format(module_src_dll_file, moddstdir))
          shutil.copy(module_src_dll_file, moddstdir)
...

lib.local.unity_services.py:

...
from lib.local.exceptions import *
from RDSmanager import RDSmanager
class UnityServices(RDSmanager):
    ...
    def modules_list(self):
        ...
        return modules_names
    def module_csproj_file(self, module_name):
        ...
                return module_csproj_file
...

Собственно, вопросы:

  • что не правильно в моём UML? (например - мне кажется, что отношения Logger и REDSmanager - это скорее “композия”, верно или нет?);
  • вообще структура наследования и связей - что не верно в моей схеме?
  • немного кода видно, может что-то и там можно было бы улучшить? если надо - добавлю.

Спасибо.

GUI » PyQt5 виджет LCDNumber Не могу разобраться как правильно выводить данные. » Сен. 17, 2015 11:15:28

Не могу разобраться как правильно выводить данные на LCDNumber.
Основная программа:
import serial
import time
import os
import sys
import win
from win import *
from PyQt5 import QtCore, QtGui, QtWidgets
class Okno (QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect (self.send)
    def send (self):
        dat1 = str(self.ui.lineEdit.text())
        print (dat1)
        ser = serial.Serial('COM2', 9600)
        data = (bytes(dat1, encoding='ascii'))
        ser.write (data)
        s=str(ser.readline())
        s=s[3:5]
        print (s)
        self.ui.label.setText ("%s" % s)
        temp = QtCore.pyqtSignal(int)
        self.temp.connect(self.ui.LcdNumber.display)
        self.temp.emit(s)
        
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
okoshko = Okno()
okoshko.show()
sys.exit(app.exec_())

Не работает эта часть кода:
temp = QtCore.pyqtSignal(int)
self.temp.connect(self.ui.LcdNumber.display)
self.temp.emit(s)

Как правильно выводить на LcdNumber значение переменной s ?
Дизайн:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(551, 217)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(380, 20, 111, 61))
        self.pushButton.setObjectName("pushButton")
        self.lcdNumber = QtWidgets.QLCDNumber(self.centralwidget)
        self.lcdNumber.setGeometry(QtCore.QRect(40, 50, 161, 71))
        self.lcdNumber.setObjectName("lcdNumber")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(280, 30, 71, 41))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(80, 10, 71, 21))
        self.label_2.setObjectName("label_2")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(380, 110, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 551, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Отправить"))
        self.label.setText(_translate("MainWindow", "TextLabel"))
        self.label_2.setText(_translate("MainWindow", "Температура"))
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Django » Редирект на https после проксирования https-nginx-http-apache-django » Сен. 11, 2015 19:08:35

Использую в некоторых обработчиках метод redirect().
Он конечно же выстраивает урл редиректа по пришедшему протоколу. Т.к. после терменации TLS/проксирования на апач, приходит обычный http запрос, то этот метод отдаёт урл с http. В этой ситуации нужно вручную обрабатывать is_secure() и переопределять метод redirect?


Центр помощи » Нужен ментор » Сен. 11, 2015 09:58:02

Здравствуйте , господа и дамы.
По возможности , хотел бы найти наставника, может быть рановато конечно для меня , но все же.
Кратко о себе:
30 лет , отучился на программиста , после института немного успел им и поработать(C#). После этого нелегкая занесла в администраторы, хотелось бы соскочить : скучно.
Прошел курс на codecademy.com, сейчас открыл Лутца “Изучаем Python”. На работе загружен по разному, но стараюсь что-то успевать, дома уже сложнее, а через пару месяцев будет еще сложнее.
Небольшое описание , чтобы хоть немного представляли.
Буду очень признателен, если найдет на меня время, направит , подскажет.

Пишите в личку или на почту

Python для новичков » менеджер потоков » Сен. 5, 2015 18:17:25

Всех приветствую!
Когда необходим скрипт с использованием потоков, обычно делаю примерно так:
import threading
class SomeThread(threading.Thread):
    def __init__(self):
        super(SomeThread, self).__init__()
        self.start()
    def run(self):
        thname = threading.current_thread()
        print("Hello Thread: %s" % (thname))
[SomeThread() for _ in range(5)]
Сейчас мне нужно чтобы кажый из потоков выполнял некоторые действия в цикле бесконечно, но если к примеру какой-то поток сгенерирует исключение он будет убит. Вобщем мне бы хотелось сделать типа пула потоков, коллбэк функцию или другой поток который контролирует кол-во запущенных потоков, к примеру если поток завершается и не важно корректно или с исключением, тут же удаляется этот объект из пула и генерируется новый поток. Вот есть функция is_alive() которая проверяет состояние потока, сразу пришло в голову создать отдельный поток который проверяет в цикле с задержкой каждый из потоков на живучесть, но это как мне кажется расточительно по ресурсам. Возможно ли это сделать иммено по событию?

Python для новичков » py2exe изменить стандартную иконку на exe » Сен. 2, 2015 14:15:47

Доброго дня.
Собираю exe из скриптов, посредством py2exe.
Хотелось бы поменять стандартную иконку exe файла. Иконка в титле окна появляется, использую *.png.
Сборку делаю “bundle_files”: 1 , т.е. на выходе один файл.
GUI создано в pyQt4.
Есть предложения как сделать? OS Windows 7.

Python для новичков » parallel sql query  » Авг. 31, 2015 10:00:11

Добрый день.

Прошу помощи в написании функции которая будет выполнять параллельный “select ” запрос с Oracle БД.
Любая информация с полезными ссылками приветствуется

Спасибо!